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 應該替換為你實際的備份腳本所在的路徑。

保存并退出編輯器,這樣就設置好了定時任務。這個任務將會在每天凌晨一點執行你的備份腳本

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714283.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714283.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714283.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構-----反射

文章目錄 反射1.定義2 用途(了解)3 反射基本信息4 反射相關的類(重要)4.1 Class類(反射機制的起源 )4.1.1 Class類中的相關方法(方法的使用方法在后邊的示例當中) 4.2 反射示例4.2.1 獲得Class對象的三種方式4.2.2 反射的使用 5、反射優點和缺點6 重點總…

雙周回顧#005 - 零

一件悲傷的事實,這兩周,成長值為零~~ 從大數據部門臨時抽調到互聯網部門,支援重構的“配置下單”項目。 一個變種的低代碼架構設計,唯一比較有意思的是它的業務組件的設計與校驗設計,算是學習…

怎么把人物從圖中摳出?分享幾種好用的摳圖方法

在日常生活中,我們時常需要將人物從繁雜的背景中優雅地提取出來,無論是為了制作一張精美的證件照,還是為了設計一幅引人注目的海報或宣傳畫。然而,對于許多非專業人士來說,這仿佛是一場與細節的捉迷藏游戲,…

MySQL深入——23

主機內存只有100G,現在對一個200G的大表進行掃描,會不會把數據庫的內存用完。 對大表做全表掃描對Sever層的影響 假設現對一個200G的InnoDB表db1,做一個全表掃描,當然要把掃描結果保存到客戶端。 InnoDB的數據時保存在主鍵索引…

數據結構從入門到精通——順序表

順序表 前言一、線性表二、順序表2.1概念及結構2.2 接口實現2.3 數組相關面試題2.4 順序表的問題及思考 三、順序表具體實現代碼順序表的初始化順序表的銷毀順序表的打印順序表的增容順序表的頭部/尾部插入順序表的頭部/尾部刪除指定位置之前插入數據和刪除指定位置數據順序表元…

Linux如何查看端口是否占用

在Linux中,有多種方法可以用來檢查端口是否被占用。以下是一些常用的命令: netstat:這是一個非常通用的命令,可以用來查看所有端口的使用情況。如果你想查找特定的端口是否被占用,可以使用netstat命令配合grep。例如&…

【MySQL】DQL

DQL(數據查詢語言)用于在MySQL數據庫中執行數據查詢操作。它主要包括SELECT語句,用于從表中檢索數據。 0. 基本語法 SELECT 字段列表 FROM 表名列表 WHERE 條件列表 GROUP BY 分組字段列表 HAVING 分組后條件列表 ORDER BY 排序字段列表 …

未來醫療技術的發展方向在Python中的重要性

未來醫療技術的發展方向在Python中的重要性體現在以下幾個方面: 數據分析和人工智能:Python作為一種強大的數據分析語言,可以進行大規模的數據處理、分析和挖掘。在醫療領域,大量的醫療數據可以通過Python進行分析,幫助…

【市工信】2024年青島市綠色工廠、綠色工業園區等綠色制造示范申報

科大睿智小編從青島市工信局了解到&#xff0c;為深入貫徹綠色發展理念&#xff0c;牢固樹立綠色低碳發展導向&#xff0c;進一步完善綠色制造體系&#xff0c;培育綠色制造先進典型&#xff0c;根據《工業和信息化部關于印發<綠色工廠梯度培育及管理暫行辦法>的通知》&a…

springcloud:3.1介紹雪崩和Resilience4j

災難性雪崩效應 簡介 服務與服務之間的依賴性,故障會傳播,造成連鎖反應,會對整個微服務系統造成災難性的嚴重后果,這就是服務故障的“雪崩”效應。 原因 1.服務提供者不可用(硬件故障、程序bug、緩存擊穿、用戶大量請求) 2.重試加大流量(用戶重試,代碼邏輯重試) 3.服…

在golang中使用protoc

【Golang】proto生成go的相關文件 推薦個人主頁&#xff1a;席萬里的個人空間 文章目錄 【Golang】proto生成go的相關文件1、查看proto的版本號2、安裝protoc-gen-go和protoc-gen-go-grpc3、生成protobuff以及grpc的文件 1、查看proto的版本號 protoc --version2、安裝protoc-…

Acwing 周賽132 解題報告 | 珂學家 | 并查集 + floyd尋路

前言 整體評價 A. 大小寫轉換 Q: 把字符串s統一成小寫字母形態 題型&#xff1a;簽到 知識點: 考察字符串的API題 c可以借助transform函數&#xff0c;進行轉化 #include <bits/stdc.h>using namespace std;int main() {string s;cin >> s;// 把自己轉化為小寫…

10-Java裝飾器模式 ( Decorator Pattern )

Java裝飾器模式 摘要實現范例 裝飾器模式&#xff08;Decorator Pattern&#xff09;允許向一個現有的對象添加新的功能&#xff0c;同時又不改變其結構 裝飾器模式創建了一個裝飾類&#xff0c;用來包裝原有的類&#xff0c;并在保持類方法簽名完整性的前提下&#xff0c;提供…

代購程序api接口采集商品信息接入演示示例

以下是一個使用Java編寫的簡單示例&#xff0c;演示如何通過API接口采集商品信息并接入到代購程序中&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; impor…

vue使用swiper(輪播圖)-真實項目使用

一、安裝 我直接安裝的vue-awesome-swiper": "^3.1.3"指定版本 npm install vue-awesome-swiper3.1.3 swiper --save二、vue頁面使用&#xff0c;寫了一個小demo <template><div class"vue-swiper"><h1>{{ msg }}</h1><…

陶瓷工業5G智能制造工廠數字孿生可視化平臺,推進行業數字化轉型

陶瓷工業5G智能制造工廠數字孿生可視化平臺&#xff0c;推進行業數字化轉型。在陶瓷工業領域&#xff0c;5G智能制造工廠數字孿生可視化平臺的應用正在改變著行業的傳統生產模式&#xff0c;推動著數字化轉型的進程。本文將圍繞這一主題展開探討&#xff0c;分析數字孿生可視化…

Unity GC + C# GC + Lua GC原理

Unity垃圾回收原理 參考文章&#xff1a;垃圾回收 (計算機科學) - 維基百科&#xff0c;自由的百科全書 (wikipedia.org) 在計算機科學中&#xff0c;垃圾回收&#xff08;英語&#xff1a;Garbage Collection&#xff0c;縮寫為GC&#xff09;是指一種自動的存儲器管理機制。…

配置之道:深入研究Netty中的Option選項

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 配置之道&#xff1a;深入研究Netty中的Option選項 前言Option的基礎概念ChannelOption與Bootstrap Option常見的ChannelOption類型ChannelConfig的使用Option的生命周期不同傳輸協議的Option 前言 在…

Linux下檢查端口占用

很多網站都給出方法檢查出端口占用的進程&#xff0c;直接就kill掉&#xff0c;并不檢查占用進程的詳細情況&#xff0c;如&#xff1a;https://www.runoob.com/w3cnote/linux-check-port-usage.html 正常情況下&#xff0c;需要對進程進行檢查 ls /proc/進程ID -l

Tomcat部署Web服務器及基礎功能配置

前言 Tomcat作為一款網站服務器&#xff0c;目前市面上Java程序使用的比較多&#xff0c;作為運維工人&#xff0c;有必要了解一款如何去運行Java環境的網站服務。 目錄 一、Java相關介紹 1. Java歷史 2. Java跨平臺服務 3. Java實現動態網頁功能 3.1 servelt 3.2 jsp …