一、思路
1. 我们可以通过mysql的mysqldump命令来备份数据库
2. win 的命令 , 将mysql/bin下面的mysqldump拷贝到c盘的更目录下
C:\\mysqldump -h 127.0.0.1 -u root -proot home >E:\\test\\"+date.getTime()+".sql
3. linux 的命令
/usr/local/mysql-5.7.26-linux-glibc2.12-x86_64/bin/mysqldump -h 127.0.0.1 -u root -proot home > /usr/logmysql/home.sql
问题:
不知道什么原因无法执行这个命令,java中执行了也不报错,也不成功,我们换一个方式自己写一个sh文件,通过java来条用就ok了
注意:win写的sh文件,需要执行下面的命令才能执行
chmod 777 backup.sh
sed -i 's/\r$//' backup.sh
二、代码
1. back.sh 内容
rm -rf /usr/logmysql/home.sql /bin/sh -c /usr/local/mysql-5.7.26-linux-glibc2.12-x86_64/bin/mysqldump -h 127.0.0.1 -u root -proot home > /usr/logmysql/home.sql
2. java代码
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.File;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
@Component
public class DatabaseBackUp {
@Scheduled(cron = "*/60 * * * * ?")
public void dump() throws Exception {
System.out.println("备份数据库");
String backName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")){
dataBaseDump("127.0.0.1", "3306", "root", "root", "home", backName);
}else{
dataBaseDump("47.92.67.98", "3306", "root", "Zhuguoping!@#123", "home", backName);
}
}
//mysqldump -hlocalhost -P3306 -uroot -p123456 db > E:/back.sql
//备份
public void dataBaseDump(String host, String port, String username, String password, String databasename, String sqlname) throws Exception {
// 注意:mysqldump.exe路径中不能含有空格,我将这个文件拷贝到了项目中
try {
//删除
String rmrf = "";
Date date = new Date();
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")){
File file = new File("E:\\test");
if (!file.exists()) {
file.mkdir();
}
String cmd = "";
System.out.println("windows");
rmrf = "cmd /c del E:\\test\\*.sql";
Runtime process = Runtime.getRuntime();
process.exec(rmrf);
cmd = "cmd /c C:\\mysqldump -h "+host+" -u "+username+" -p"+password+" "+databasename+" > E:\\test\\"+date.getTime()+".sql";
System.out.println(cmd);
Runtime process1 = Runtime.getRuntime();
Process res= process1.exec(cmd);
if (res.waitFor() == 0) {
System.out.println("数据库备份成功,备份路径为:");
}
}else{
System.out.println("linux");
String cmd= "/home/project/database/backup_mysql.sh ";
System.out.println(cmd);
Runtime process1 = Runtime.getRuntime();
Process res= process1.exec(cmd);
if (res.waitFor() == 0) {
System.out.println("数据库备份成功,备份路径为:");
}
}
} catch (Exception e) {
System.out.println(LocalDateTime.now() + " 备份数据库失败...");
e.printStackTrace();
}
}
}