欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 代码通过调用mysqldump命令备份mysql数据库

程序员文章站 2022-07-10 18:53:00
java 代码通过调用mysqldump命令备份mysql数据库 数据库备份是开发工作中经常要做的事情,好处是mysql提供了一个非常好的命令 mysqldump,直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便,遇到定时备份或者指定备份那么就需要代码调用。下面是一个使用java代码调用该命令的小示例: /** * 备份调用工具方法 * * @param connectParam 包含数据库连接信息的对象 *...

java 代码通过调用mysqldump命令备份mysql数据库

   数据库备份是开发工作中经常要做的事情,好处是mysql提供了一个非常好的命令 mysqldump,直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便,遇到定时备份或者指定备份那么就需要代码调用。下面是一个使用java代码调用该命令的小示例:
 /**
     * 备份调用工具方法
     *
     * @param connectParam 包含数据库连接信息的对象
     * @param backupAll    是否全部备份
     * @param startTime    待备份日志的时间区间结束点
     * @param endTime      待备份日志的时间区间结束点
     * @return 备份操作结果
     */ public CommonResult backupLoginfo(ConnectParam connectParam, boolean backupAll, String startTime, String endTime) { CommonResult result = new CommonResult(); String strFilter; String strFilePath = strLogExcelPath; if (backupAll) { strFilter = "\"1=1\""; // 其实此处.sql和.dump效果是一样的 strFilePath += String.format("loginfo-%s.dump", System.currentTimeMillis()); } else { if (null == startTime || startTime.isEmpty() || null == endTime || endTime.isEmpty()) { result.message = "起止时间不能为空"; result.result = false; return result; } else { strFilter = String.format("\"OPERTIME BETWEEN '%s' AND '%s'\"", startTime, endTime); // 文件名中要剔除非法字符 strFilePath += String.format("loginfo(%s_%s).dump", startTime, endTime) .replaceAll(":", ""); } } try { int nBackUpResult = backUpDataTable(connectParam.ip, connectParam.userName, connectParam.password, String.format(" %s lnd_loginfo", connectParam.databaseName), strFilter, strFilePath); // 0 表示线程正常终止 if (0 == nBackUpResult) { result.result = true; return result; } } catch (IOException ie) { logger.error(ie.getMessage()); } catch (InterruptedException ire) { logger.error(ire.getMessage()); } catch (Exception e) { logger.error(e.getMessage()); } result.result = false; result.message = "备份异常"; return result; } public static int backUpDataTable(String clientIp, String userName, String userPsw, String tableInfo, String strFilter, String strFilePath) throws IOException, InterruptedException { // 判断路径是否存在 File file = new File(strFilePath).getParentFile(); if (!file.exists()) { file.mkdirs(); } // 拼接命令行的命令 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("mysqldump -t --opt -h").append(clientIp) // 用户名、密码、表名 .append(" --user=").append(userName).append(" --password=").append(userPsw).append(tableInfo) // 条件语句 .append(" --where=").append(strFilter) .append(" --lock-all-tables=true") // 导出路径 .append(" --result-file=").append(strFilePath).append(" --default-character-set=utf8"); // 调用外部执行exe文件的javaAPI logger.info("执行mysql指令:" + stringBuilder.toString()); Process process = Runtime.getRuntime().exec(stringBuilder.toString()); return process.waitFor(); } 
其中backupLoginfo()方法是备份数据的调用方法,传入的参数是连接mysql的信息,类如下,可以备份某个数据库的表的全部数据或者选择一部分数据。这里通过参数backupAll来确定,当backupAll=true的时候,那么输入备份的时间。
 /**
     * 用于映射lnd.oper.datasource.DataSourceParam,传递数据库连接参数
     */ public class ConnectParam { public String ip; public String databaseName; public String userName; public String password; } 

本文地址:https://blog.csdn.net/yht18330690553/article/details/108261647