傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)

注释都是由chatGPT生成,有什么问题可以评论交流

    @Value("${backup.sql.database}")
private String databases; @Value("${backup.sql.host}")
private String host; @Value("${backup.sql.username}")
private String username; @Value("${backup.sql.password}")
private String password; private static final int MAX_BACKUP_COUNT = 7; // 最多保存备份文件的数量 /**
* 备份MySQL数据库
*
* @return 备份文件的绝对路径
*/
public void backupSql() { // 定义备份 MySQL 数据库的方法
String[] split = databases.split(","); // 根据逗号分隔符,将要备份的数据库名称拆分成数组
for (String database : split) { // 遍历每个数据库名称
String backup_path = ContentsUtil.TEMP_BACKUPSQL + database + "/"; // 备份文件存放目录
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 = backup_path + backupFileName; // 备份文件路径
new File(backup_path).mkdirs(); // 创建备份文件存放目录,如果已经存在则不创建 try { // 尝试备份数据库 List<String> command = new ArrayList<>(); // 新建命令列表
command.add("mysqldump"); // 添加命令:备份 MySQL 数据库
command.add("--host=" + host); // 添加命令参数:MySQL 服务器地址
command.add("--user=" + username); // 添加命令参数:MySQL 用户名
command.add("--result-file=" + backupFilePath); // 添加命令参数:备份文件路径
command.add("--databases"); // 添加命令参数:指定要备份的数据库
command.add(database); // 添加要备份的数据库名称 ProcessBuilder pb = new ProcessBuilder(command); // 创建进程构建器
pb.environment().put("MYSQL_PWD", password); // 设置 MySQL 密码 pb.redirectErrorStream(true); // 合并标准错误输出和标准输出
Process runtimeProcess = pb.start(); // 启动进程 InputStream inputStream = runtimeProcess.getInputStream(); // 读取进程的标准输出
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // 创建输入流读取器 int processComplete = runtimeProcess.waitFor(); // 等待进程结束 if (processComplete == 0) { // 如果进程成功结束
deleteOldBackups(backup_path); // 删除多余的备份文件
System.out.println("Backup Success: " + backupFilePath); // 输出备份成功信息
} else { // 如果进程没有成功结束
System.out.println("Backup Failed"); // 输出备份失败信息
} } catch (IOException | InterruptedException ex) { // 如果出现异常
System.out.println("Error: " + ex.getMessage()); // 输出异常信息
}
}
}
只保留七个周期内的备份数据
/**
* 删除多余的备份文件,最多只保留 MAX_BACKUP_COUNT 个文件
*/
private static void deleteOldBackups(String backup_path) {
// 创建文件夹对象
File backupDir = new File(backup_path);
// 获取该文件夹下的所有文件对象
File[] backupFiles = backupDir.listFiles();
// 将文件对象数组转换成 List,方便排序和删除
List<File> backupList = Arrays.asList(backupFiles);
// 对 List 中的文件对象按照修改时间进行升序排序
Collections.sort(backupList, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
}
}); // 计算需要删除的文件数量
int excessCount = backupList.size() - MAX_BACKUP_COUNT;
// 如果需要删除的文件数量大于 0,则循环删除文件
if (excessCount > 0) {
for (int i = 0; i < excessCount; i++) {
backupList.get(i).delete();
}
}
}

傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)的更多相关文章

  1. Java实现MySQL数据库备份(二)

    权声明:本文为博主原创文章,未经博主允许不得转载. 博客<Java实现MySQL数据库备份(一)>使用I/O流的方式实现了MySQL数据库的备份,这种方法比较繁杂,下面介绍另一种备份MyS ...

  2. Java实现mysql数据库备份

    Runtime是一个与JVM运行时环境有关的类,这个类是Singleton的. Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法. ...

  3. Java达到MySQL数据库备份(两)

    博客<Java实现MySQL数据库备份(一)>使用I/O流的方式实现了MySQL数据库的备份,这样的方法比較繁杂.以下介绍还有一种备份MySQL数据库的方法: import java.io ...

  4. Java实现MySQL数据库备份(一)

    下班了,利用闲暇时间总结一下如何使用Java语言实现MySQL数据库备份: import java.io.BufferedReader; import java.io.File; import jav ...

  5. java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)

    插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和 ...

  6. Java 操作MySql数据库

    Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Ja ...

  7. java 实现mysql数据库备份

    package com.itenp.gen.action; import java.io.BufferedReader; import java.io.FileInputStream; import ...

  8. mysql数据库备份与还原命令

    还原一个数据库:mysql -h localhost -u root -p123456 www 备份一个数据库:mysqldump -h localhost -u root -p123456 www ...

  9. ubuntu mysql 数据库备份以及恢复[命令行]

    之所以加了个ubuntu,其实也没什么,就是恢复数据库的时候给幽默了一下,所以特地加上.   写在前面:一直很想好好的学linux命令行.shell编程,幻想自己能够通过学习进而成为命令行高手,游刃于 ...

  10. mysql数据库备份及恢复命令mysqldump,source的用法

    还原一个数据库:mysql -h localhost -u root -p123456 www<c:/www.sql 备份一个数据库:mysqldump -h localhost -u root ...

随机推荐

  1. uniapp底层跨端原理

    uniapp底层跨端原理 - 代码编写:开发者使用Vue.js框架编写uniapp的代码,包括页面结构.样式和逻辑等. - 编译过程:在编译过程中,uniapp会将Vue.js的代码转换为各个平台所需 ...

  2. .NET ASPIRE 预览版 7 发布

    .NET Aspire 预览版 7 并不是原计划的一部分,此预览版有很多重大 API 更改,部分原因是一旦产品发布,我们将致力于稳定的 API 表面.可以说,Aspire团队希望确保在最终发布之前完成 ...

  3. 稳定、省钱的 ClickHouse 读写分离方案:基于 JuiceFS 的主从架构实践

    Jerry 是一家位于北美的科技公司,利用人工智能和机器学习技术,简化汽车保险和贷款的比价和购买流程.在美国,Jerry 的应用在其所属领域排名第一. 随着数据规模的增长,Jerry 在使用 AWS ...

  4. Python:Python对象模型与序列迭代陷阱

    1. Python对象模型与浅拷贝/深拷贝 1.1 Python对象模型和引用 在我们讲解Python的序列修改陷阱之前,先巩固一下Python的对象模型和浅拷贝/深拷贝的知识. 众所周知,Pytho ...

  5. 开源项目分享:ChatGPT 控制台聊天应用

    开源项目分享:ChatGPT 控制台聊天应用 分享一个我最近完成的一个小应用,一个ChatGPT 的控制台聊天应用,大家都在搞AI,我也来玩一玩,顺便分享到社区,有兴趣的小伙伴可以去我的github主 ...

  6. redhat8连接xshell命令卡顿

    取消下方  转发x11连接到(X) 再重新连接一遍 就好了

  7. python-将多个表格的信息合并到一个表格中

    1.环境 代码运行环境:python3.7 相关的库:xlrd.xlwt 2.目的 通过xlrd库读取各个表格的数据,通过xlwt库将读取到的数据写入到一个表格中. 3.实现 在工程目录下,有一个te ...

  8. Mysql 创建索引语句

    mysql有哪些索引 index 普通索引 alter table table_name add index index_name(column) 最基本的索引,没有任何限制 primary key ...

  9. lodash已死?radash库方法介绍及源码解析 —— 判断方法篇

    前言 大家好,我是阿瓜.一个励志分享更多技术的前端瓜 ~ 我们已经分享了 radash 库中数组.对象等相关的方法,大家感兴趣的可以前往主页查看阅读: 或许你最近在某个地方听过或者看过 radash ...

  10. 对于 EI K 逆序对排列计数的另一种自然求和方法的理解

    有一个简单的 \(O(n^3)\) DP,考虑 \(f_{x + 1, k} = \sum_{j = 0}^{x} f_{x, k - j}\),利用前缀和优化即可. 考虑这实际上是 \(f_{x + ...