在介绍前我要说一下,网上的例子不少,但是坑很多,有些代码看起来是对的,但是小问题不少,原因在于楼主没有测试过,或者没有交代使用时的特殊环境。以下代码都是亲身测试过的。
1.项目背景:使用java实现远程备份mysql数据库到本地电脑,并可以将本地数据库的备份还原到远程mysql数据库。本机环境windows。
2.注意:本机必须已经装了mysql数据库,并且将mysql 的bin加在了系统环境变量中。我的mysql在c盘,以下代码也是以c盘的mysql的bin下运行的。具体要以你实际安装mysql的位置而定,不然就会自己坑自己了。
3.代码逻辑:很重要!!!
4.我们首先(在远程数据库)创建一个有测试数据的库:robot,一个空的数据库(没表,没数据)robot-test。
5.我们第一步将robot数据库备份到本地电脑d:\test,名字命名:robot-test.sql。
6.查看本地电脑的d:\test\robot-test.sql是否存在,并确定是否备份成功。
7.第二步,将robot-test.sql还原到之前创建的空数据库:robot-test。
8.查看robot-test数据库的表和数据是否还原成功。
备份和还原方法写到一个类中:
package com.company; import java.io.file; import java.io.ioexception; public class databasedumporbackrout { /** * @param hostip ip地址,可以是本机也可以是远程 * @param username 数据库的用户名 * @param password 数据库的密码 * @param savepath 备份的路径 * @param filename 备份的文件名 * @param databasename 需要备份的数据库的名称 * @return */ public static boolean backup(string hostip, string username, string password, string savepath, string filename, string databasename) { filename +=".sql"; file savefile = new file(savepath); if (!savefile.exists()) {// 如果目录不存在 savefile.mkdirs();// 创建文件夹 } if (!savepath.endswith(file.separator)) { savepath = savepath + file.separator; } //拼接命令行的命令 stringbuilder stringbuilder = new stringbuilder(); stringbuilder.append("c:\\program files\\mysql\\mysql server 8.0\\bin\\mysqldump --opt -h ").append(hostip); stringbuilder.append(" --user=").append(username).append(" --password=").append(password) .append(" --lock-all-tables=true"); stringbuilder.append(" --result-file=").append(savepath + filename).append(" --default-character-set=utf8 ") .append(databasename); system.out.println(stringbuilder.tostring()); try { //调用外部执行exe文件的javaapi process process = runtime.getruntime().exec(stringbuilder.tostring()); if (process.waitfor() == 0) {// 0 表示线程正常终止。 return true; } } catch (ioexception e) { e.printstacktrace(); } catch (interruptedexception e) { e.printstacktrace(); } return false; } /** * @param filepath 数据库备份的脚本路径 * @param ip ip地址 * @param database 数据库名称 * @param username 用户名 * @param password 密码 * @return */ public static boolean recover(string filepath,string ip,string database, string username,string password) { string stmt1 = "c:\\program files\\mysql\\mysql server 8.0\\bin\\mysqladmin -h "+ip+" -u"+username+" -p"+password+" create database if not exists "+database; string stmt2 = "mysql -h "+ip+" -u"+username+" -p"+password+" "+database+" < " + filepath; string[] cmd = { "cmd", "/c", stmt2 }; try { system.out.println(stmt1); runtime.getruntime().exec(stmt1); system.out.println(cmd); runtime.getruntime().exec(cmd); system.out.println("数据已从 " + filepath + " 导入到数据库中"); } catch (ioexception e) { e.printstacktrace(); return false; } return true; } }
备份的main方法
package com.company; /** * * @author zndume * 数据库备份主方法测试 * */ public class buckupmain { public static void main(string[] args) { string hostip = "172.17.7.60"; string username = "root"; string password = "zndume"; string savepath = "d:\\test"; string filename = "robot-test"; string databasename = "robot"; boolean backup = databasedumporbackrout.backup(hostip, username, password, savepath, filename, databasename); system.out.println(backup); } }
还原的main方法
package com.company; public class recovermain { public static void main(string[] args) { string ip = "172.17.7.60"; string username = "root"; string password = "zndume"; string savepath = "d:\\test\\robot-test.sql"; string databasename = "robot-test"; boolean recover = databasedumporbackrout.recover(savepath, ip, databasename, username, password); system.out.println(recover); } }
以上就是java实现mysql数据库的自动备份和自动还原的详细内容,更多关于java mysql自动备份和自动还原的资料请关注代码网其它相关文章!
发表评论