java代码实现数据库备份

java 代码实现数据库备份

  • 引入xxl-job,定时调度改方法,实现数据库备份

配置类

import lombok.Data;
@Data
public class BackupConfig {
    private String ip = "10.1.132.23 ";
    private String backupPath = "D:\\test\\backup";
    private String mysqldumpPath = "mysqldump";
    private String username = "root";
    private String password = "root";
    private String port = "3306";
    private String dbName = "dbName";
}

执行方法


import com.spic.project.service.BriefingScheduleService;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @project 
 * @Classname XxlJobTask
 * @Description TODO
 * @Date 2022/11/2 11:18
 * @Created by weidong
 */
@Component
public class XxlJobTask {

    private static Logger logger = LoggerFactory.getLogger(XxlJobTask.class);

    /**
     * 数据库备份
     */
    @XxlJob("buckUpDBJobHandler")
    public void buckUpDBJobHandler() throws Exception {

        XxlJobHelper.log("request param.");
        logger.info("执行--数据库备份--定时任务begin时间: " + LocalDateTime.now());
        BackupConfig backupConfig = new BackupConfig();
        File file = new File(backupConfig.getBackupPath());
        if (!file.exists()) {
            file.mkdirs();
        }
        String fileName = backupConfig.getBackupPath() + "/" + "mysql" + System.currentTimeMillis() + ".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 cmd = backupConfig.getMysqldumpPath()  // mysqldump的绝对路径,配置环境变量,直接写mysqldump即可
                + " -h " + backupConfig.getIp()  // ip
                + " -u" + backupConfig.getUsername()  // 数据库用户名
                + " -p" + backupConfig.getPassword()  // 数据库密码
                + " -P" + backupConfig.getPort()      // 数据库端口号
//                + " " + " --databases MySQL"      // 数据库名
                + " " + " -A"      // -A
                + " > " + fileName;                   // 最终写入的文件路径
        try {
            System.out.println("第一个参数 " + c1);
            System.out.println("第二个参数 " + c2);
            System.out.println("具体命令 " + cmd);

//            log.error("数据库备份START" + LocalDateTime.now());
            /**
             * exec重载方法有一个参数的,window下执行正常,linux下无法完成备份。
             * 使用多参数重载方法都可以正常备份
             */
            Process process = Runtime.getRuntime().exec(new String[]{c1, c2, cmd});
            process.waitFor();

//            log.info("数据库备份END" + LocalDateTime.now());
        } catch (Exception e) {
            e.printStackTrace();
//            log.error("数据库备份失败:{}", e.getMessage());
        }


        logger.info("执行--数据库备份--定时任务时间: " + LocalDateTime.now());
        XxlJobHelper.log("执行--数据库备份--定时任务时间: " + LocalDateTime.now());
    }
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

benboerdong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值