java中实现数据库备份

1、直接上代码

    public void backup() {
        File file = new File(backupConfig.getBackupPath());
        if (!file.exists()) {
            file.mkdirs();
        }
        String fileName = backupConfig.getBackupPath() + "/" + backFilePrefix + 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 cmd = backupConfig.getMysqldumpPath()  // mysqldump的绝对路径,配置环境变量,直接写mysqldump即可
                + " -u" + backupConfig.getUsername()  // 数据库用户名
                + " -p" + backupConfig.getPassword()  // 数据库密码
                + " -P" + backupConfig.getPort()      // 数据库端口号
                + " " + backupConfig.getDbName()      // 数据库名
                + " > " + 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.error("数据库备份END" + LocalDateTime.now());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("数据库备份失败:{}", e.getMessage());
        }
    }

2、定时备份
使用定时任务,调用该方法,就可以实现定时备份数据库了

小尾巴~~
只要有积累,就会有进步

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐