备份:
@Value(value = "${spring.datasource.dynamic.datasource.master.url}")
private String url;
@Value(value = "${spring.datasource.dynamic.datasource.master.username}")
private String username;
@Value(value = "${spring.datasource.dynamic.datasource.master.password}")
private String password;
public Result MySqlBackups(){
String path="D:\\";
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
String fileName = path + "/" + LocalDate.now() + ".sql";
/** 默认使用linux*/
//String cmdPrefix = "/bin/sh -c ";
String c1 = "/bin/sh";
String c2 = "-c";
String os_name = System.getProperty("os.name");
// 判断是否是windows系统
if (os_name.toLowerCase().startsWith("win")){
//cmdPrefix = "cmd /c ";
c1 = "cmd";
c2 = "/c";
}
String database = url.substring(url.indexOf("3306/") + 5,url.indexOf("?"));
System.out.println(database);
String cmd = "mysqldump" // mysqldump的绝对路径,配置环境变量,直接写mysqldump即可
+ " -u" + username // 数据库用户名
+ " -p" + password// 数据库密码
+ " -P" + "3306" // 数据库端口号
+ " " + database // 数据库名
+ " > " + fileName; // 最终写入的文件路径
try {
Process process = Runtime.getRuntime().exec(new String[]{c1, c2, cmd});
process.waitFor();
System.out.println("数据库备份END" + LocalDateTime.now());
} catch (Exception e) {
e.printStackTrace();
System.out.println( e.getMessage());
}
return Result.OK("MYSQL数据备份成功");
}
简单说一下备份流程:
1、创建文件位置(可以有,也可以没有)
2、因为部署一般都是Linux操作系统,所以分2部分命令。win和linux
3、拼接cmd命令
4、命令传入开始备份。
网上都是大差不差,备份流程一般都是一样的。
恢复:
//MYSQL恢复
public Result getMySqlConnection(){
try {
Connection conn = DriverManager.getConnection(url, username, password);
ScriptRunner runner = new ScriptRunner(conn);
Resources.setCharset(Charset.forName("UTF-8")); //设置字符集,不然中文乱码插入错误
runner.setLogWriter(null);//设置是否输出日志
// 绝对路径读取
// Reader read = new FileReader(new File("D:\\"+"2023-04-18.sql"));
Reader read = new FileReader("D:\\"+"2023-04-18.sql");
// 从class目录下直接读取
//Reader read = Resources.getResourceAsReader("test.sql");
runner.runScript(read);
runner.closeConnection();
conn.close();
return Result.OK("还原成功!");
} catch (Exception e) {
e.printStackTrace();
return Result.error( "sql脚本执行发生异常!");
}
}
恢复的流程就是传入数据库地址账号密码,你和要恢复的文件地址名称。