在介绍前我要说一下,网上的例子不少,但是坑很多,有些代码看起来是对的,但是小问题不少,原因在于楼主没有测试过,或者没有交代使用时的特殊环境。以下代码都是亲身测试过的。
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自动备份和自动还原的资料请关注代码网其它相关文章!
发表评论