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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本篇文章主要介绍怎样使用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

相关文章
|
18天前
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
32 0
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
让PolarDB更了解您--PolarDB云原生数据库核心功能体验馆
让PolarDB更了解您——PolarDB云原生数据库核心功能体验馆,由阿里云数据库产品事业部负责人宋震分享。内容涵盖PolarDB技术布局、开源进展及体验馆三大部分。技术布局包括云计算加速数据库演进、数据处理需求带来的变革、软硬协同优化等;开源部分介绍了兼容MySQL和PostgreSQL的两款产品;体验馆则通过实际操作让用户直观感受Serverless、无感切换、SQL2Map等功能。
128 7
|
4天前
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
|
26天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
93 32
|
4天前
|
PHP 数据库
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
|
8天前
|
存储 NoSQL 关系型数据库
Apifox与Apipost数据库连接功能详细对比,让接口管理更高效!
Apipost 更加全面:无论是关系型还是非关系型数据库,它都为开发者提供了一站式解决方案,非常适合数据库架构复杂的大型项目。相对来说,Apifox偏重关系型分析和管理:若项目主要需求在于管理关系型数据库,而对非关系型的依赖较小,Apifox倒是可以应付。
39 2
|
11天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
78 1
|
1月前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
322 12
|
18天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
38 0
|
2月前
|
存储 Java 数据库连接
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
TDengine 3.3.5.0 版本正式发布,带来多项更新与优化。新特性包括提升 MQTT 稳定性和高并发性能、新增 taosX 增量备份与恢复、支持 JDBC 和 Rust 连接器 STMT2 接口、灵活配置 Grafana Dashboard 等。性能优化涵盖查询内存管控、多级存储迁移、强密码策略等,全面提升时序数据管理的效率和可靠性。欢迎下载体验并提出宝贵意见。
58 5

热门文章

最新文章