Java项目中实现操作的数据库(定时)备份、还原功能
Java项目中实现操作的数据库(定时)备份、还原功能
·
Java项目中实现操作的数据库(定时)备份、还原功能
1. 数据库备份
① 代码部分
/**
* 数据库文件备份
*/
@RequestMapping("/doBackup")
public static String doBackup(){
log.info("现在时间是"+new Date());
Runtime runtime = Runtime.getRuntime(); //获取Runtime实例
String database1 = "test_db"; // 需要备份的数据库名
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
String sdfDate = sdf.format(currentDate);
String filepath = "D:\sql\time_" + sdfDate + ".sql"; // 备份的路径地址
String installPath="D:\MySQL\MySQL Server 8.0\bin";
installPath=installPath.replace(" ", "" "");
String stmt = installPath+"\mysqldump --column-statistics=0 -h localhost -uroot -proot --default-character-set=gbk "+database1+" > "+filepath;
log.info(stmt);
try {
String[] command = { "cmd", "/c", stmt};
Process process = runtime.exec(command);
InputStream input = process.getInputStream();
log.info(IOUtils.toString(input, "UTF-8"));
//若有错误信息则输出 InputStream errorStream = process.getErrorStream();
log.info(IOUtils.toString(errorStream, "gbk"));
//保存备份数据信息到数据库中 } catch (IOException e) {
e.printStackTrace();
}
return "ok";
}
② 注意
执行备份命令(此处需要定位到mysqldump.exe路径,–default-character-set=gbk是为了解决中文乱码问题)
在很多命令行下,我们要运行某个命令,往往会出现只能显示到路径空格的地方就停下来了,并显示找不到所需要的文件。
解决的方法为:加上英文双引号,而在引号中空格。
例:regsvr32.exe X:\DD" " DD\XXX.DLL
③ 执行效果
2. 数据恢复
① 代码部分
/**
* 还原数据库
*/
@GetMapping("/restore")
public static String restore( String filename) {
String database = "test_2db"; // 需要备份的数据库名
System.out.println("现在时间是" + new Date());
Runtime runtime = Runtime.getRuntime();
try {
String filePath = "D:\sql\"+filename; // sql文件路径
String stmt ="mysql -h localhost -uroot -proot "+database+" < " + filePath;
// String[] command = {"cmd", "/c",installPath};
Process process = runtime.exec("cmd /c cd /d d:\MySQL\MySQL" "Server" "8.0\bin && .\mysql -h localhost -uroot -proot test_2db < D:\sql\"+filename);
//若有错误信息则输出 InputStream errorStream = process.getErrorStream();
log.info(IOUtils.toString(errorStream, "gbk"));
//等待操作 int processComplete = process.waitFor();
if (processComplete == 0) {
System.out.println("还原成功.");
} else {
throw new RuntimeException("还原数据库失败.");
}
} catch (Exception e) {
e.printStackTrace();
}
return "ok";
}
② 注意
连续使用两个cmd命令中间用 &&相连 cmd /c是运行完后关闭窗口 cmd /k是运行完后不关闭。
命令语句:
"cmd /c cd /d d:\MySQL\MySQL" "Server" "8.0\bin && .\mysql -h localhost -uroot -proot test_2db < D:\sql\"+filename
3.定时
使用定时任务将备份方法调用即可此处不做过多解释;
更多推荐
已为社区贡献1条内容
所有评论(0)