Java备份和还原MySQL数据库
来源:互联网 发布:现代战争5数据总是重制 编辑:程序博客网 时间:2024/06/05 05:46
网络上有很多关于Java程序中备份和还原MySQL数据库的内容,但内容都是大同小异,程序也有各种各样的问题(比如运行时异常、乱码等),实现上都是用Runtime执行MySQL的命令行工具,然后读写IO流数据;也有可能是由于使用java的Runtime来实现备份还原功能,而由于大家的运行时环境有差异才导致代码运行不成功;具体原因不清楚,后来在国外的网站上看到了较为简单的方法,这里记一下。
同样也是使用MySQL提供的命令行工具来实现备份(mysqldump)和还原(mysql source),只是不需要读写IO流了。
备份
备份使用MySQL的mysqldump命令来实现,官方对mysqldump命令的说明:http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
上面的网页提到mysqldump命令一共有三种形式,如下:
shell> mysqldump [options] db_name [tbl_name ...]shell> mysqldump [options] --databases db_name ...shell> mysqldump [options] --all-databases
该命令有很多的options,详情可以查看上面的链接,我这里只需要备份一个数据库,命令也比较简单;如果在命令行窗口可以使用如下命令来实现备份:
mysqldump -umysql -pmysql --add-drop-database --skip-lock-tables -B tjfinal > d:/backup.sql
如果不加--add-drop-database参数并且用户不是root用户,有可能报下面的错误:
mysqldump: Got error: 1044: "Access denied for user 'mysql'@'localhost' to database 'tjfinal'" when using LOCK TABLES
Java示例代码:
/** * 备份数据库 * @throws Exception */public static void backup () throws Exception { String savePath = BACKUP_DIR + "backup-" + DateTimeTool.getDateByTime() + ".sql"; String[] execCMD = new String[] {"mysqldump", "-u" + DB_USER, "-p" + DB_PWD, DB_NAME, "-r" + savePath, "--skip-lock-tables"}; Process process = Runtime.getRuntime().exec(execCMD); int processComplete = process.waitFor(); if (processComplete == 0) { System.out.println("备份成功."); } else { throw new RuntimeException("备份数据库失败."); }}
还原
还原数据库需要用到MySQL的source命令,该命令用来读取一个文件并执行其中的SQL语句;如果使用命令行工具,可以登录MySQL客户端,然后直接执行source命令即可:
MariaDB [tjfinal]> source file_name -- 或者MariaDB [tjfinal]> \. file_name
当然如果不登录进客户端也是可以的,这时就需要用到mysql客户端命令的 --execute(或者-e)选项(option),如下:
--execute=statement-- 或者-e statement其中--execute(或-e)选项表示要登录客户端然后执行SQL命令后退出,而该选项的参数 statement 就是要执行的SQL命令,关于mysql命令选项的说明可以参考这里:http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html#option_mysql_execute
因此在不登录MySQL客户端的情况下可以使用下面的命令还原数据库:
mysql -umysql -pmysql -e source d:/backup.sql-- 或者mysql -umysql -pmysql --execute="source d:/backup.sql"
Java示例代码:
/** * 还原数据库 * @param sql 要还的SQL文件 * @throws Exception */public static void restore (String sql) throws Exception { String targetFile = BACKUP_DIR + sql; // SQL文件路径 String[] execCMD = new String[]{"mysql", DB_NAME, "-u" + DB_USER, "-p" + DB_PWD, "-e source", targetFile}; Process process = Runtime.getRuntime().exec(execCMD); int processComplete = process.waitFor(); if (processComplete == 0) { System.out.println("还原成功."); } else { throw new RuntimeException("还原数据库失败."); }}
以上代码经测试可以完成MySQL数据库的备份和还原操作。
- Java在线备份和还原MySQL数据库。
- java实现mysql数据库备份和还原
- Java备份和还原MySQL数据库
- Java MySQL数据库备份和还原
- java备份还原mysql数据库
- Java备份还原Mysql数据库
- java 备份还原 mysql 数据库
- java mysql数据库备份还原
- Java备份还原Mysql数据库
- java备份还原mysql数据库
- Java备份&还原MySQL数据库
- 备份和还原MySQL数据库
- mysql数据库备份和还原
- Mysql数据库备份和还原
- mysql 数据库备份和还原
- mysql数据库备份和还原
- mysql数据库备份和还原
- mysql数据库备份和还原
- static全局变量,导致数据冲突严重错误
- 单例模式的七种写法
- Guava学习笔记:Range
- linux grep命令学习与总结
- sed学习笔记
- Java备份和还原MySQL数据库
- Android 通过 Intent 传递类对象
- HDU 2688 Rotate 树状数组
- debug listener in eclipse
- Yale CAS实现原理及其基础协议
- 首个运用工作流的装饰管理软件
- debian 右键选项中打开终端
- nginx文件类型错误解析漏洞
- 数独 Sudoku poj 2676