当前位置: 首页 > news >正文

傻瓜式Java操作MySQL数据库备份

在这里插入图片描述

文章目录

  • 前言
  • 存储数据库
  • 存储数据表

前言

  数据库备份是开发工作中经常要做的事情,好处是mysql提供了一个非常好的命令 mysqldump,直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便,遇到定时备份或者指定备份那么就需要代码调用。下面是一个使用java代码调用该命令的小示例:

mysqldump -u username -p password -h host -P port exportDatabaseName exportPath

  在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令。

存储数据库

public class DataSyncTransfer {/** MySQL安装目录的Bin目录的绝对路径 */private static String mysqlBinPath = "/usr/local/mysql/bin/";private static String mysqldump = mysqlBinPath + "mysqldump";/*** 备份 MySQL 数据库* * @param clientIp   访问MySQL数据库的主机* @param port       访问MySQL数据库的端口* @param userName   访问MySQL数据库的用户名* @param password   访问MySQL数据库的密码* @param database   需要备份的数据库,多个数据库之间使用逗号分隔* @param backupFile 备份文件存放的路径,如果指定路径的文件不存在会自动生成*/public static boolean backupDatabase(String clientIp, int port, String userName, String password, String database,String backupPath) throws Exception {// 当前日期String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());// 当前时间String currentTime = new SimpleDateFormat("HH-mm-ss").format(Calendar.getInstance().getTime());// 备份文件名String backupFileName = database + "-" + currentDate + "-" + currentTime + ".sql";// 备份文件路径String backupFilePath = backupPath + backupFileName;// 创建备份文件存放目录,如果已经存在则不创建new File(backupPath).mkdirs();// 新建命令列表List<String> commandList = new ArrayList<>();// 添加命令:备份 MySQL 数据库commandList.add(mysqldump);// 添加命令参数:MySQL 服务器地址if (StringUtils.isNoneBlank(clientIp)) {commandList.add("--host=" + clientIp);}// 添加命令参数:MySQL 用户名commandList.add("--user=" + userName);// 添加命令参数:备份文件路径commandList.add("--result-file=" + backupFilePath);// 添加命令参数:指定要备份的数据库commandList.add("--databases");// 添加要备份的数据库名称commandList.add(database);// 创建进程构建器ProcessBuilder pb = new ProcessBuilder(commandList);// 设置 MySQL 密码pb.environment().put("MYSQL_PWD", password);// 启动进程Process process = pb.start();readStringFromInputStream(process.getInputStream(), backupFilePath);// 等待进程结束int processComplete = process.waitFor();if (processComplete == 0) { // 如果进程成功结束return true;} else { // 如果进程没有成功结束return false;}}/*** 存储文件*/private static void readStringFromInputStream(InputStream stream, String backupFilePath) throws IOException {byte[] buff = new byte[128];int n;FileOutputStream fileOutputStream = null;StringBuilder sb = new StringBuilder();try {while ((n = stream.read(buff)) != -1) {sb.append(new String(buff, 0, n));}fileOutputStream = new FileOutputStream(new File(backupFilePath));fileOutputStream.write(sb.toString().getBytes());} finally {fileOutputStream.close();stream.close();}}
}

存储数据表

public class DataSyncTransfer {/** MySQL安装目录的Bin目录的绝对路径 */private static String mysqlBinPath = "/usr/local/mysql/bin/";private static String mysqldump = mysqlBinPath + "mysqldump";/*** 备份数据表* * @param clientIp   访问MySQL数据库的主机* @param port       访问MySQL数据库的端口* @param userName   访问MySQL数据库的用户名* @param password   访问MySQL数据库的密码* @param database   需要备份的数据库* @param tableName  需要备份的数据库,多个表之间使用空格分隔* @param backupFile 备份生成的文件路径,如果指定路径的文件不存在会自动生成*/public static boolean backupTable(String clientIp, int port, String userName, String password, String database,String tableNames, String backupPath) throws Exception {// 根据逗号分隔符,将要备份的数据库名称拆分成数组// String[] tableArr = tableNames.split(",");// 当前日期String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());// 当前时间String currentTime = new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime());// 备份文件名String backupFileName = database + "-" + currentDate + currentTime + ".sql";// 备份文件路径String backupFilePath = Paths.get(backupPath, backupFileName).toFile().getPath();String command = mysqldump + " -u" + userName + " -p" + password + " " + database + " " + tableNames;Process process = Runtime.getRuntime().exec(command);readStringFromInputStream(process.getInputStream(), backupFilePath);// 等待进程结束int processComplete = process.waitFor();if (processComplete == 0) { // 如果进程成功结束return true;} else { // 如果进程没有成功结束return false;}}/*** 存储文件*/private static void readStringFromInputStream(InputStream stream, String backupFilePath) throws IOException {byte[] buff = new byte[128];int n;FileOutputStream fileOutputStream = null;StringBuilder sb = new StringBuilder();try {while ((n = stream.read(buff)) != -1) {sb.append(new String(buff, 0, n));}fileOutputStream = new FileOutputStream(new File(backupFilePath));fileOutputStream.write(sb.toString().getBytes());} finally {fileOutputStream.close();stream.close();}}
}
http://www.lryc.cn/news/178720.html

相关文章:

  • redis常用操作命令
  • pytorch gpu安装
  • uni跳转页面不缓存上一个页面的方法
  • 排序:败者树和置换选择排序(解决外部排序中的优化问题)
  • 【超分:光谱响应函数】
  • IoT 物联网 JavaScript 全栈开发,构建家居环境监控系统实战
  • jupyter notebook可以打开,但无法打开.ipynb文件,报错500 : Internal Server Error
  • latex图片编号+表格编号
  • 【1day】用友时空KSOA平台 imagefield接口SQL注入漏洞学习
  • linux之美
  • 5、超链接标签
  • CCF CSP认证历年题目自练 Day15
  • APP的收费模式及特点
  • opencv: 解决保存视频失败的问题
  • 源码编译安装zstd
  • LabVIEW开发实时自动化多物镜云计算全玻片成像装置
  • 【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络
  • Socket网络编程练习题三:客户端上传文件到服务器
  • Excel技巧之【锁定工作簿】
  • 用于自然语言处理的 Python:理解文本数据
  • 历史服务器
  • 竞赛无人机搭积木式编程(四)---2023年TI电赛G题空地协同智能消防系统(无人机部分)
  • 深入理解JavaScript中的事件冒泡与事件捕获
  • 纯css html 真实水滴效果
  • HBASE集群主节点迁移割接手动操作步骤
  • TRB爆仓分析,套利分析,行情判断!
  • LVGL - RV1109 LVGL UI刷新效率优化-02
  • 5、布局管理器
  • What is a UDP Flood Attack?
  • 多核 ARM Server 性能调优