Logger log = LoggerFactory.getLogger(this.getClass());
//数据库地址
@Value("${spring.datasource.url}")
String url;
//用户名
@Value("${spring.datasource.username}")
String username;
//密码
@Value("${spring.datasource.password}")
String password;
//需要备份的数据库 可以多个, 多个使用逗号分隔
@Value("${dbNames}")
String dbNames;
//截取IP
private String getHost(){
return url.substring(13,27);
}
@GetMapping(value = "/exportSQL")
public String exportSQL(){
String filePath = "";
File file = new File(filePath);
if (!file.exists()){
file.mkdirs();
}
String host = getHost();
List<String> strings = Arrays.asList(dbNames.split(","));
strings.stream().forEach(dbName -> {
try {
log.info("dbNme--->"+dbName);
//linux下保存备份的路径
String sqlBackPath = "/code/dbback/";
//保存的文件名称 DateUtility.getCurrentDate()是年月日
String fileName = DateUtility.getCurrentDate() + "_" + dbName + ".sql";
StringBuilder sb = new StringBuilder();
sb.append("mysqldump")
.append(" -h")
.append(host)
.append(" -u")
.append(username)
.append(" -p'")
.append(password +"'") //我的密码有特殊符号 所以使用了单引号处理
.append(" "+dbName)
.append(" > "+sqlBackPath)
.append(fileName);
log.info("sb-->"+sb.toString());
//linux下的命令 windows下使用 String[] command = { "cmd", "/c", sb.toString()}
String[] command = { "/bin/sh", "-c", sb.toString() };
Process process = Runtime.getRuntime().exec(command);
if (0 == process.waitFor()){
log.info("数据库备份成功,保存路径是: "+sqlBackPath);
}else {
log.info("process.waitFor()=="+process.waitFor());
}
}catch (Exception e){
log.error("io异常",e);
}
});
return "ok";
}