Java调用shell脚本实现数据库备份功能

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本篇文章主要介绍怎样使用Java程序,执行服务器上的数据库备份Shell脚本进行MySQL数据库的备份功能。

本篇文章主要介绍怎样使用Java程序,执行服务器上的数据库备份Shell脚本进行MySQL数据库的备份功能。

学习目标

使用Java执行Shell脚本、实现MySQL数据库的备份功能。

学习内容

编写导出MysSQL数据库的Shell脚本

以下是一个使用Bash脚本进行数据库备份的示例代码:

xk_mysql.sh

#!/bin/bash
source  /etc/profile
# 设置备份目录和文件名
backup_directory="/root/xxkfz/service/db_backup"
backup_filename="xxkfz_$(date +%Y%m%d%H:%M:%S).sql"

# 设置MySQL连接参数
mysql_host="127.0.0.1"
mysql_user="root"
mysql_password="123456"
mysql_database="xxkfz"

# 创建备份目录
mkdir -p "$backup_directory"

echo   -e "\033[36m MYSQL数据库正在备份,请稍等......  \033[0m"

# 执行备份命令
mysqldump -h "$mysql_host" -u "$mysql_user" -p"$mysql_password" "$mysql_database" > "$backup_directory/$backup_filename"


# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo -e "\033[33m "MySQL数据库备份成功:$backup_directory/$backup_filename" \033[0m"
else
  echo -e "\033[35m 数据库备份失败 \033[0m"
fi

将以上程序代码保存为xk_mysql_backup.sh文件,并且执行以下命令给予执行的权限:

chmod +x xk_mysql.sh

测试

输入./xk_mysql.sh或者sh xk_mysql.sh执行脚本

image.png

数据库备份成功,查询备份的sql文件:
image.png

image.png

编写Java代码执行Shell脚本

   /**
    * 实现简单的数据库备份
   */
public void dbBackup() {
   
   
        log.debug("开始执行数据库备份......");
        long l = System.currentTimeMillis();
        try {
   
   
            String command = "sh xk_mysql.sh";
            // 
            Process process = Runtime.getRuntime().exec(command, null, new File("/root/xxkfz/service/shell"));
            // 获取Shell脚本输出结果
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
   
   
                log.debug("result = {}", line);
            }
        } catch (Exception ex) {
   
   
            log.error("数据库备份失败:{}", ex.getMessage());
        }
        long l1 = System.currentTimeMillis();
        log.debug("数据库备份完成,耗时:{}", l1 - l);
    }

我们可以通过定时任务的方式调用上面dbBackup方法,来实现每天的MySQL数据库的备份。

下面通过一个简单的定时任务进行测试:配置cron表达式每隔两小时进行备份一次。

ScheduledService.java

@Component
@Slf4j
public class ScheduledService {
   
   


    /**
     * 实现简单的数据库备份
     * 每隔2小时执行一次
     */
    @Scheduled(cron = "0 0 */2 * * ?")
    public void dbBackup() {
   
   
        log.error("开始执行数据库备份......");
        long l = System.currentTimeMillis();
        try {
   
   
            String command = "sh xk_mysql.sh";
            Process process = Runtime.getRuntime().exec(command, null, new File("/root/xxkfz/service/shell"));
            // 获取Shell脚本输出结果
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
   
   
                log.error("result = {}", line);
            }
        } catch (Exception ex) {
   
   
            log.error("数据库备份失败:{}", ex.getMessage());
        }
        long l1 = System.currentTimeMillis();
        log.error("数据库备份完成,耗时:{}", l1 - l);
    }
}

在项目测试环境中进行效果展示:

image.png

相关文章
|
5天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
14 1
|
1天前
|
SQL 关系型数据库 开发工具
Beekeeper Studio是一个多功能的数据库管理和开发工具
【5月更文挑战第19天】Beekeeper Studio是一个多功能的数据库管理和开发工具
13 5
|
5天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
14 1
|
5天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
5天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
30 5
|
5天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
5天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
16 3
|
5天前
|
存储 前端开发 搜索推荐
13:Session机制实现用户登录与注销功能-Java Web
13:Session机制实现用户登录与注销功能-Java Web
32 3