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

相关文章
|
1天前
|
弹性计算 运维 监控
|
1天前
|
存储 弹性计算 运维
自动化收集员工信息的Shell脚本
【4月更文挑战第30天】
6 0
|
2天前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之DataWorks在调用java sdk的createFile功能时报错com.aliyuncs.exceptions.ClientException: 1201111000 如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
9 1
|
2天前
|
弹性计算 运维 Shell
使用shell 脚本打印图形3
【4月更文挑战第29天】
9 0
|
2天前
|
存储 弹性计算 运维
使用shell 脚本打印图形2
【4月更文挑战第29天】
9 0
|
2天前
|
弹性计算 运维 Shell
使用shell 脚本打印图形1
【4月更文挑战第29天】
9 0
|
2天前
|
存储 弹性计算 运维
调整虚拟机内存参数的shell 脚本
【4月更文挑战第29天】
8 0
|
3天前
|
弹性计算 运维 Shell
一键申请多个证书 shell 脚本
【4月更文挑战第29天】
9 1
|
3天前
|
弹性计算 运维 Shell
从shell脚本发送邮件
【4月更文挑战第29天】
9 0
|
3天前
|
弹性计算 运维 Shell
使用 shell 脚本打印图形
【4月更文挑战第29天】
10 1