java程序实现MySQL数据库备份与恢复工具类

文章描述了一个名为MySQLDbBackupUtil的Java类,用于在Java应用中执行MySQL数据库的备份和恢复操作,通过参数管理文件路径、数据库名、表名等,并记录操作日志。
摘要由CSDN通过智能技术生成
package com.xxs.util;

import com.xxs.common.Constant;
import com.xxs.exception.BackupException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * MySQL 数据库备份
 */
public class MySQLDbBackupUtil {

    private static final Logger log = LoggerFactory.getLogger(MySQLDbBackupUtil.class);

    /**
     * 备份数据库
     *
     * @param param  备份参数
     * @param tableNames  备份表名
     */
    public static void backup(Map<String,String> param, String... tableNames) throws BackupException {
        try{
            File backupFile = new File(param.get(Constant.FILE_PATH));
            if (!backupFile.getParentFile().exists()) {
                backupFile.getParentFile().mkdirs();
            }
            String tableName;
            StringBuilder stringBuilder = new StringBuilder(" ");
            for (String name : tableNames) {
                if (!"".equals(name.trim())) {
                    stringBuilder.append(name).append(" ");
                }
            }
            tableName = stringBuilder.toString();
            String cmd1 = "/bin/sh";
            String cmd2 = "-c";
            String os_name = System.getProperty("os.name");
            log.info("--------------------开始时间:【{}】, 系统开启数据库备份--------------------", LocalDateTime.now());
            StringBuilder stmt = new StringBuilder("mysqldump --defaults-extra-file=/etc/my.cnf --default-character-set=utf8 ").
                    append(param.get(Constant.DB_NAME));
            if (tableNames.length > 0) {
                log.info("备份环境信息:【{}】, 数据库:【{}】, 表【{}】", os_name, param.get(Constant.DB_NAME), tableName);
                stmt.append(" --tables").append(tableName);
            } else {
                log.info("备份环境信息:【{}】, 数据库:【{}】", os_name, param.get(Constant.DB_NAME));
            }
            stmt.append(" > ").append(param.get(Constant.FILE_PATH));
            log.info(String.format("cmd命令为:%s", stmt));
            String[] cmd = { cmd1, cmd2 , stmt.toString() };
            Process process = Runtime.getRuntime().exec(cmd);
            if(process.waitFor() == 0){//0 表示线程正常终止。
                log.info(String.format(" 【数据库:%s】 >>> 【文件:%s】 备份成功!", param.get(Constant.DB_NAME), param.get(Constant.FILE_PATH)));
            }else{
                log.info(String.format(" 【数据库:%s】 >>> 【文件:%s】 备份失败!", param.get(Constant.DB_NAME), param.get(Constant.FILE_PATH)));
                throw new BackupException("数据库备份失败");
            }
            log.info("--------------------结束时间:【{}】, 系统结束数据库备份--------------------", LocalDateTime.now());
        }catch (Exception e){
            log.error(e.getMessage(),e);
            throw new BackupException("数据库备份异常");
        }
    }

    /**
     * 恢复数据库
     * @param param 恢复参数
     */
    public static void restore(Map<String,String> param) throws BackupException {
        String cmd1 = "/bin/sh";
        String cmd2 = "-c";
        String os_name = System.getProperty("os.name");
        String stmt2 = "mysql --defaults-extra-file=/etc/my.cnf "+param.get(Constant.DB_NAME)+" < " + param.get(Constant.FILE_PATH);
        String[] cmd = { cmd1, cmd2, stmt2 };
        try {
            log.info(--------------------开始时间:【{}】, 系统开启数据库恢复--------------------", LocalDateTime.now());
            log.info("恢复环境信息:【{}】, 数据库:【{}】", os_name, param.get(Constant.DB_NAME));
            log.info(String.format("cmd命令为:%s", stmt2));
            Process process = Runtime.getRuntime().exec(cmd);
            if(process.waitFor() == 0){//0 表示线程正常终止。
                log.info(String.format(" 【文件:%s】 >>> 【数据库:%s】 恢复成功!", param.get(Constant.FILE_PATH), param.get(Constant.DB_NAME)));
            }else{
                log.info(String.format(" 【文件:%s】 >>> 【数据库:%s】 恢复失败!", param.get(Constant.FILE_PATH), param.get(Constant.DB_NAME)));
                throw new BackupException("数据库恢复失败");
            }
            log.info("--------------------结束时间:【{}】, 系统结束数据库恢复--------------------", LocalDateTime.now());
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            throw new BackupException("数据库恢复异常");
        }
    }
}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值