Java实现数据库备份

需求:每晚凌晨对项目数据库进行定时备份。
方案:采用定时任务使用Runtime.getRuntime().exec(cmd)操作mysqldump命令实现

window环境下:

@Configuration
@EnableScheduling
@Slf4j
public class JobService {

    @Scheduled(cron = "0 0 0 * * ?")
    private void dbBackup() throws Exception {
        String cmd = "cmd /c mysqldump -uroot -p123456 runwel>C:/Users/17586/Desktop/"+DateUtil.get8Date()+".sql";
        Process process = Runtime.getRuntime().exec(cmd);//执行语句
        process.waitFor();//等待上述命令执行完毕后打印下面log
        log.info("数据库备份结束,备份结果:{}",process.exitValue() == 0 ? "success" : "fail");
    }

}

Linux环境下(我的Linux环境下mysqldump没有设置软连接所以需要进入具体目录下,这个可根据个人安装路径修改):

@Configuration
@EnableScheduling
@Slf4j
public class JobService {

    @Scheduled(cron = "0 0 0 * * ?")
    private void dbBackup() throws Exception {
        String [] cmd = {"/bin/sh","-c","/usr/local/mysql/bin/mysqldump -uroot -p123456 runwel>/usr/springboot/assessment/dbbackup/"+DateUtil.get8Date()+".sql"};
        Process process = Runtime.getRuntime().exec(cmd);//执行语句
        process.waitFor();//等待上述命令执行完毕后打印下面log
        log.info("数据库备份结束,备份结果:{}",process.exitValue() == 0 ? "success" : "fail");

    }
}

备份命令:
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql
我的在本地端口也是默认端口 所以没加主机与端口

注意:脚本名称尽量不要出现特殊字符否则会出现无法导出的情况。
此处我的数据库账号密码以及路径直接写死在命令中了,具体使用时可将数据库路径、账号、密码等数据抽离出来方便后续维护。

你可能感兴趣的:(springboot,linux)