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

本文介绍了如何使用Java编写代码执行Bash脚本来备份MySQL数据库,包括创建Shell脚本、设置备份参数,以及通过`Runtime.exec`调用脚本并处理结果。还展示了如何在SpringBoot应用中使用`@Scheduled`定时任务每两小时自动备份。
摘要由CSDN通过智能技术生成

本篇文章主要介绍怎样使用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执行脚本

在这里插入图片描述

数据库备份成功,查询备份的sql文件:
在这里插入图片描述
83%25BD.assets%2Fimage-20240106200408075-17045426501954.png&pos_id=img-DUMkbVtl-1704600361426)

在这里插入图片描述

编写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);
    }
}

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

在这里插入图片描述

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小Java开发者

“是一种鼓励,你懂的”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值