当前位置: 首页 > news >正文

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 {@Overridepublic 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 ]; thenmkdir -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数据库

记录在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…...

PMP考试之20240301

1、在回顾项目团队最新的绩效报告时,项目经理注意到他们的产出出现了重大下降。项目经理决定: A.增加每个团队成员在截止日期前完成任务的压力 B.增加状态报告和团队评审会议的频率 C.为表现最好的团队成员提供特别奖励 D.改善和促进团队成员之间的信任和凝聚力…...

什么是MAC地址? win10电脑查看MAC地址的多种方法

您是否知道连接到家庭网络的每件硬件都有自己的身份?正如每个设备都分配有自己的 IP 地址一样,每个硬件都有一个唯一的网络标识符。 该标识符称为MAC 地址。MAC 代表媒体访问控制。您可能需要 MAC 地址来解决网络问题或配置新设备。在 Windows 中查找您…...

vue3中的基本语法

目录 基础素材 vue3的优化 使用CompositionAPI理由 1. reactive() 函数 2. ref() 函数 2.1. ref的使用 2.2. 在 reactive 对象中访问 ref 创建的响应式数据 3. isRef() 函数 4. toRefs() 函数 5. computed() 5.1. 通过 set()、get()方法创建一个可读可写的计算属性 …...

Timeplus-proton流处理器调研

概念 Timeplus是一个流处理器。它提供强大的端到端功能,利用开源流引擎Proton来帮助数据团队快速直观地处理流数据和历史数据,可供各种规模和行业的组织使用。它使数据工程师和平台工程师能够使用 SQL 释放流数据价值。 Timeplus 控制台可以轻松连接到不…...

H3C防火墙安全授权导入

一、防火墙授权概述 前面我们已经了解了一些防火墙的基本概念,有讲过防火墙除了一些基本功能,还有一些高级安全防护,但是这些功能需要另外独立授权,不影响基本使用。这里以H3C防火墙为例进行大概了解下。 正常情况下,防…...

使用 OpenCV 通过 SIFT 算法进行对象跟踪

本文介绍如何使用 SIFT 算法跟踪对象 在当今世界,当涉及到对象检测和跟踪时,深度学习模型是最常用的,但有时传统的计算机视觉技术也可能有效。在本文中,我将尝试使用 SIFT 算法创建一个对象跟踪器。 为什么人们会选择使用传统的计…...

SHELL 脚本: 导出NEO4j DUMP并上传SFTP

前提 开通sftp账号 安装expect 示例 NEO4J_HOME/path/to/neo4j # neo4j 安装目录 DUMP_PATH/data/dump # DUMP本地保存目录 DUMP_FILEneo4j_$(date %F).dump #导出文件名称 UPLOAD_DIR/path/to/stfp/dump/ #上传目录 $NEO4J_HOME/bin/neo4j-admin dump --databaseneo4j --t…...

Vue 封装一个函数,小球原始高度不固定,弹起比例不固定、计算谈几次后,高度低于1米

## 简介 本文将介绍如何使用Vue封装一个函数&#xff0c;计算小球弹跳的次数&#xff0c;直到高度低于1米。函数的参数包括小球的原始高度和弹起比例。通过代码案例演示了如何使用Vue进行封装和调用。 ## 函数封装 vue <template> <div> <label for&qu…...

外地人能申请天津公租房吗?2024天津积分落户租房积分怎么加?

相关推荐&#xff1a;在天津工作的外地人可以申请天津公共租赁住房吗&#xff1f; 外地人可以申请天津公共租赁住房吗&#xff1f; 2024年定居天津租房如何加分&#xff1f; 根据《天津居住证积分指标及积分表》的规定&#xff0c;在天津租房也可以参加积分结算&#xff0c;每…...

毕业设计——基于springboot的聊天系统设计与实现(服务端 + 客户端 + web端)

整个工程包含三个部分&#xff1a; 1、聊天服务器 聊天服务器的职责一句话解释&#xff1a;负责接收所有用户发送的消息&#xff0c;并将消息转发给目标用户。 聊天服务器没有任何界面&#xff0c;但是却是IM中最重要的角色&#xff0c;为表达敬意&#xff0c;必须要给它放个…...

公告栏功能:自动弹出提醒,重要通知不再错过

发布查询时&#xff0c;您是否遇到这样的困扰&#xff1a; 1、查询发布时间未到&#xff0c;学生进入查询主页后发现未发布任何查询&#xff0c;不断进行咨询。 2、有些重要事项需要进入查询主页就进行强提醒&#xff0c;确保人人可见&#xff0c;用户需要反馈“我知道了”才能…...

网络编程学习

思维导图 代码练习 TCP实现通信 服务器端代码 #include <myhead.h> #define SER_IP "192.168.152.135" #define SER_PORT 8910 int main(int argc, const char *argv[]) {//&#xff11;创建用于监听的套接字int sfd -1;sfd socket(AF_INET,SOCK_STREAM,0)…...

centos物理电脑安装过程(2024年1月)

开机时&#xff1a;CtrlAltDelete键重启电脑 重启开始时&#xff1a;按F11&#xff0c;桌面弹出蓝色框&#xff0c;选择第二个SSK SFD142 1.00&#xff0c;回车 选择install centos7安装 选择后弹出选择安装选项&#xff0c;选择语言 连接无线网络 安装设置&#xff0c;选择磁…...

Web自动化测试平台开发---Automated_platform

一、项目简介 历时一个假期&#xff0c;Automated_platform 第一版完工&#xff0c;是一款基于po模式的自动化测试平台,采用后端技术为DjangoceleryRabbitMQmysql 配置mysql数据库&#xff0c;进行数据迁移后&#xff0c;运行项目后&#xff0c;即可成功访问http://127.0.0.1:8…...

mybatis-plus: 多租户隔离机制

文章目录 一、TenantLineHandler1、介绍2、包含的方法 二、简单实例三、实践1、实现TenantLineHandler接口 一、TenantLineHandler 1、介绍 TenantLineHandler 是 Mybatis-Plus 中用于处理多租户的接口&#xff0c;用于实现多租户数据隔离的具体逻辑。通过实现这个接口&#…...

用Socks5代理游戏,绕过“网络海关”去探险

1. 出海大冒险的开始 在游戏世界&#xff0c;就像在现实生活中一样&#xff0c;有时我们需要越过海洋去探索未知的世界。但是&#xff0c;网络上也有一些“海关”&#xff0c;限制我们访问某些网站或游戏服务器。这就是我们今天要克服的挑战&#xff01; 2. Socks5代理&#xf…...

SpringBoot整合rabbitmq-直连队列,没有交换机(一)

说明&#xff1a;本文章只是springboot和rabbitmq的直连整合&#xff0c;只使用队列生产和消费消息&#xff0c;最简单整合&#xff01; 工程图&#xff1a; A.总体pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://…...

CUDA C:查看GPU设备信息

相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 了解自己设备的性能是很有必要的&#xff0c;为此CUDA 运行时(runtime)API给用户也提供了一些查询设备信息的函数&#xff0c;下面的函数用于查看GPU设备的一切信息。 …...

深度学习如何入门?——从“小白”到“大牛”的深度学习之旅

大家好&#xff0c;今天我要和大家分享的主题是“深度学习如何入门”。深度学习作为人工智能领域的重要分支&#xff0c;已经取得了许多令人瞩目的成果。然而&#xff0c;对于初学者来说&#xff0c;深度学习可能显得有些神秘和难以入手。那么&#xff0c;如何才能快速入门深度…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...