springboot定时任务备份mysql数据库的实现示例

 更新时间:2024年03月03日 11:52:52   作者:小飞侠在吗  
为了防止数据库被清库或者误删数据库的情况,所以需要定时将mysql数据库中的数据进行备份,本文主要介绍了springboot定时任务备份mysql数据库的实现示例,需要的朋友们下面随着小编来一起学习学习吧

记录在Linux 系统上定时备份MySQL数据库

1、在代码中添加备份

package org.jeecg.modules.xczxhhr.job;

import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@Slf4j
public class SyncDatabaseBackupJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        String mysqlUser = "root";
        String mysqlPassword = "你的密码";
        String dbname = "你的数据库名字";
        String backupDir = "备份文件存储地址";

        int expireDays = 15;

        String backupTime = new SimpleDateFormat("yyyyMMddHHmm").format(new Date());
        String backupFileName = dbname + "-" + backupTime + ".sql";

        String[] command = new String[]{"mysqldump", "-u" + mysqlUser, "-B", dbname};

        ProcessBuilder processBuilder = new ProcessBuilder(command);
        processBuilder.environment().put("MYSQL_PWD", mysqlPassword);

        File backupFile = new File(backupDir, backupFileName);
        processBuilder.redirectOutput(backupFile);

        try {
            Process process = processBuilder.start();
            int exitStatus = process.waitFor();

            if (exitStatus == 0) {
                // 备份成功,可以继续实现删除过期备份的逻辑
                log.info("数据库备份成功");
                cleanupOldBackups(backupDir, expireDays);
            } else {
                // 备份失败,可以记录日志或者进行其他处理
                log.error("数据库备份失败:" + exitStatus);
                // 输出错误信息
                BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                String line;
                while ((line = errorReader.readLine()) != null) {
                    log.error(line);
                }
            }
        } catch (IOException | InterruptedException e) {
            // 异常处理
            e.printStackTrace();
            log.error("备份数据库出现异常:" + e.getMessage());
        }
    }

    private void cleanupOldBackups(String backupDir, int expireDays) {
        File dir = new File(backupDir);
        File[] files = dir.listFiles();

        if (files != null) {
            for (File file : files) {
                long diffInMillies = System.currentTimeMillis() - file.lastModified();
                long diffInDays = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);

                if (diffInDays > expireDays) {
                    if (file.delete()) {
                        log.info("已删除旧备份文件:" + file.getName());
                    } else {
                        log.info("未能删除旧备份文件:"+ file.getName());
                    }
                }
            }
        }
    }
}

2、也可以在Linux中执行备份脚本,backup_script.sh,内容如下:

#!/bin/bash
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysqlUser="root"
mysqlPassword="密码"
dbname='数据库名字'

# 备份文件存放地址(根据实际情况填写)
backup_dir=/data/depFile/bakdb

# 判断目录是不是已经存在,如果不存在则创建
if [ ! -d $backup_dir ]; then
  mkdir -p $backup_dir
fi
#===================================
# 是否删除过期数据
expire_backup_delete="ON"
expire_days=15
backup_time=$(date +%Y%m%d%H%M)
welcome_msg="Welcome to use MySQL backup tools!"
#===========================================
# 备份指定数据库中数据(此处假设数据库是mysql_backup_test)
mysqldump -u$mysqlUser -p$mysqlPassword -B $dbname >$backup_dir/$dbname-$backup_time.sql

#删除过期数据
if [ "$expire_backup_delete" == "ON" -a "$backup_dir" != "" ]; then
  # $(find $backup_dir/ -type f -mtime +$expire_days | xargs rm -rf)
  find $backup_dir/ -type f -mtime +$expire_days -exec rm -f {} \;
  echo "Expired backup data delete complete!"
fi

接下来,你需要设置一个定时任务,让这个脚本在每天凌晨一点执行。你可以使用 cron 来实现这一点。

首先,打开终端并输入以下命令来编辑 crontab 文件:

crontab -e

然后,在 crontab 文件中添加以下行来设置定时任务:

0 1 * * * /bin/bash /path/to/your/backup_script.sh

在这个例子中,/path/to/your/backup_script.sh 应该替换为你实际的备份脚本所在的路径。

保存并退出编辑器,这样就设置好了定时任务。这个任务将会在每天凌晨一点执行你的备份脚本

到此这篇关于springboot定时任务备份mysql数据库的实现示例的文章就介绍到这了,更多相关springboot定时备份mysql内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Calendar类的使用总结实例

    Java Calendar类的使用总结实例

    这篇文章主要介绍了Java Calendar类的使用总结实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Spring Boot构建系统安全层的步骤

    Spring Boot构建系统安全层的步骤

    这篇文章主要介绍了Spring Boot构建系统安全层的步骤,帮助大家更好的理解和学习使用Spring Boot框架,感兴趣的朋友可以了解下
    2021-04-04
  • Spring空值和特殊字符的注入方式

    Spring空值和特殊字符的注入方式

    文章介绍了如何通过创建类、配置文件和测试代码来实现空值和特殊字符注入,具体包括定义属性、生成set方法、配置对象创建和属性注入、以及编写测试代码进行验证
    2024-11-11
  • 一文教会你如何从0到1搭建一个SpringBoot项目

    一文教会你如何从0到1搭建一个SpringBoot项目

    今天刚好学习到SpringBoot,就顺便记录一下吧,下面这篇文章主要给大家介绍了关于如何从0到1搭建一个SpringBoot项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 关于Java跨域Json字符转类对象的方法示例

    关于Java跨域Json字符转类对象的方法示例

    这篇文章主要给大家介绍了关于Java跨域Json字符转类对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • SpringBoot整合Java DL4J实现情感分析系统

    SpringBoot整合Java DL4J实现情感分析系统

    在当今数字化时代,企业越来越重视用户的反馈,以不断改进产品和服务,自然语言处理技术为分析用户评价提供了强大的工具,本文将介绍如何使用 Spring Boot 整合 Java Deeplearning4j 构建一个情感分析系统,需要的朋友可以参考下
    2024-10-10
  • Java 十大排序算法之插入排序刨析

    Java 十大排序算法之插入排序刨析

    插入排序(InsertionSort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表
    2021-11-11
  • Linux centos7环境下jdk安装教程

    Linux centos7环境下jdk安装教程

    这篇文章主要为大家详细介绍了Linux centos7环境下jdk的安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Java多线程Semaphore工具的使用详解

    Java多线程Semaphore工具的使用详解

    Semaphore 是一种用于控制线程并发访问数的同步工具。它通过维护一定数量的许可证来限制对共享资源的访问,许可证的数量就是可以同时访问共享资源的线程数目,需要的朋友可以参考下
    2023-05-05
  • SpringBoot请求参数相关注解说明小结

    SpringBoot请求参数相关注解说明小结

    这篇文章主要介绍了SpringBoot请求参数相关注解说明,主要包括@PathVariable,@RequestHeader、@CookieValue、@RequestBody和@RequestParam,本文结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-05-05

最新评论