java 代码通过调用mysqldump命令备份mysql数据库
程序员文章站
2022-04-15 17:45:33
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
推荐阅读