mariadb10.3.35備份腳本

一、創建備份用戶

[(none)]> create user 'buser'@'localhost' identified by 'tmrQ';[(none)]> GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'buser'@'localhost';[(none)]> flush privileges;

二、腳本

# cat mysql_bask.sh 
#!/bin/bash
# MariaDB 10.3.35 Backup Script
# 支持全量備份 + 增量備份 + 自動清理
# 使用前請配置以下變量# ===== 配置區域 =====
MYSQL_USER="buser"         # 備份專用數據庫賬號
MYSQL_PASSWORD="tmrQ"   # 備份賬號密碼
BACKUP_DIR="/opt/mysql_backup"     # 備份存儲目錄
FULL_BACKUP_INTERVAL=7           # 全量備份間隔(天)
RETENTION_DAYS=30                # 備份保留天數
LOG_FILE="/var/log/mariadb_backup.log"  # 日志文件路徑
# ===================# 創建必要目錄
mkdir -p ${BACKUP_DIR}/{full,incr} &> /dev/null# 日志記錄函數
log() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}# 數據庫連接檢查
check_db_connection() {if ! mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SHOW STATUS;" &> /dev/null; thenlog "錯誤:無法連接到MariaDB服務器!"exit 1fi
}# 全量備份函數
full_backup() {local backup_name="full-$(date +%Y%m%d_%H%M%S)"local target_dir="${BACKUP_DIR}/full/${backup_name}"log "開始全量備份: ${backup_name}"mariabackup --backup \--user=${MYSQL_USER} \--password=${MYSQL_PASSWORD} \--target-dir=${target_dir} 2>> $LOG_FILEif [ $? -eq 0 ]; thenlog "全量備份成功: ${backup_name}"echo "${target_dir}" > ${BACKUP_DIR}/last_full_backupelselog "全量備份失敗!"rm -rf ${target_dir}exit 1fi
}# 增量備份函數
incremental_backup() {local base_dir=$(cat ${BACKUP_DIR}/last_full_backup)if [ -z "$base_dir" ]; thenlog "未找到基準備份,執行全量備份..."full_backupreturnfilocal backup_name="incr-$(date +%Y%m%d_%H%M%S)"local target_dir="${BACKUP_DIR}/incr/${backup_name}"log "開始增量備份: ${backup_name}"log "基準備份: $(basename ${base_dir})"mariabackup --backup \--user=${MYSQL_USER} \--password=${MYSQL_PASSWORD} \--target-dir=${target_dir} \--incremental-basedir=${base_dir} 2>> $LOG_FILEif [ $? -eq 0 ]; thenlog "增量備份成功: ${backup_name}"elselog "增量備份失敗!"rm -rf ${target_dir}exit 1fi
}# 清理舊備份
clean_old_backups() {log "清理超過${RETENTION_DAYS}天的備份..."find ${BACKUP_DIR}/full -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} +find ${BACKUP_DIR}/incr -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} +
}# 主執行邏輯
main() {log "===== 備份開始 ====="check_db_connection# 檢查是否需要全量備份if [ ! -f "${BACKUP_DIR}/last_full_backup" ] || \[ $(find "${BACKUP_DIR}/last_full_backup" -mtime +${FULL_BACKUP_INTERVAL}) ]; thenfull_backupelseincremental_backupficlean_old_backupslog "===== 備份完成 ====="
}# 執行主函數
main

三、添加執行權限

# chmode +x mysql_bask.sh

四、配置任務計劃

# crontab -l
0 4 * * * /usr/bin/sh /opt/scripts/mysql_bask.sh

五、恢復步驟

5.1 全量備份恢復

mariabackup --copy-back --target-dir=/backup/mariadb/full/full-YYYYMMDD_HHMMSS

5.2 增量備份恢復

# 先恢復全量備份
mariabackup --copy-back --target-dir=/backup/mariadb/full/base_backup# 再應用增量備份
mariabackup --copy-back --target-dir=/backup/mariadb/full/base_backup \--incremental-dir=/backup/mariadb/incr/incr_backup_dir

六、腳本說明

  1. 備份類型

    • 全量備份:每?FULL_BACKUP_INTERVAL?天執行一次

    • 增量備份:基于上次全量備份進行增量備份

  2. 自動清理

    • 自動刪除超過?RETENTION_DAYS?天的舊備份

  3. 日志記錄

    • 詳細記錄備份過程到日志文件

    • 控制臺和文件雙重輸出

  4. 安全機制

    • 數據庫連接檢查

    • 備份失敗自動清理殘留文件

    • 錯誤退出機制

?七、配置腳本

  • 修改腳本頂部的配置參數(用戶名、密碼、目錄等)

  • 設置合適的備份保留策略

八、首次備份后的目錄結構

?

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

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

相關文章

W3D引擎游戲開發----從入門到精通【22】

配置完成基本DT物體項后,在這個DT物體項中開始添加這個玩家的動畫信息,如下所示。UseAnim設置是否使用動畫功能,這里開啟。AnimTypeN設置總共的動畫類型數,當前只有一個待機動畫,因此設置為1。AnimType1FrameN設置1號動…

在我國申請注冊的商標在國外可以用不!

近日一個網友找到普推知產商標老楊,問在我國申請注冊商標在新加坡和歐盟可以用不,當然用不成,根據商標法的地域性原則,商標權保護限于注冊地,馳名商標享有部分跨國保護,但是這個要有所在國相關法律證據。如…

在開發板上畫出一個2048棋盤的矩陣

#include “head.h"int* p lcd NULL; //顯示屏內存映射的起始地址int g lcd width; //LCD顯示屏的寬度int g lcd high ; //LCD顯示屏的高度int g lcd bpp; //每個像素點所占的比特位//int x:屏的X軸(寬度、列)坐標//int y:屏幕y軸(高度、…

開源軟件與文化:從嬉皮士精神到數字時代的協同創新

開源軟件與文化:從嬉皮士精神到數字時代的協同創新 本文章由筆者使用提示詞驅動AI創作,并進行審閱。 文章目錄開源軟件與文化:從嬉皮士精神到數字時代的協同創新一、引言:開源的文化基因與技術革命二、開源軟件的文化根源&#x…

sigfillset 函數詳解

sigfillset 函數詳解 一、函數概念 sigfillset() 是 POSIX 信號處理中的核心函數,用于初始化并填充一個信號集,使其包含當前系統支持的所有信號。它是操作信號屏蔽字(signal mask)的基礎工具,常與 sigprocmask()、sigs…

Redis實戰(8) -- 分布式鎖Redission底層機制

介紹Redisson 是基于 Redis 實現的 Java 駐內存數據網格(In-Memory Data Grid),提供了分布式和可擴展的 Java 數據結構,如分布式鎖、分布式集合等。【注意】如果需要重新實現redission,需要重新設置RedissionClient配置…

Linux基礎測試

linux基礎測試 一、環境準備 基礎環境信息 登錄用戶:root(初始密碼:redhat) 虛擬機啟動:登錄后執行 virt-manager,右鍵啟動 node1 和 node2 虛擬機 node1 信息:root 密碼為 redhat&#xf…

Linux中Docker Swarm實踐

一、部署前后分離使用你自己的自定義鏡像部署多個副本所有副本使用相同的配置和邏輯Nginx 做反向代理統一入口外部訪問形式如:http://your-domain/api/xxx1.1 建立私庫鏡像已構建并推送到可訪問的鏡像倉庫啟動 Docker Registry 容器docker run -d -p 5000:5000 --re…

Dash 中的 dcc.Clipboard 組件詳解:實現一鍵復制功能

dcc.Clipboard 是 Dash 核心組件庫中的一個實用工具,允許用戶將指定內容一鍵復制到系統剪貼板,極大提升用戶體驗。本文將深入解析該組件的用法、特性和實際應用場景。 一、組件核心功能與價值 dcc.Clipboard 解決了 Web 應用中的關鍵痛點: 簡…

初識C++類的6個默認成員函數

目錄 一、初始化和清理 二、拷貝復制 三、取地址重載 四、重要說明 五、注意事項 六、示例代碼 在C中,當一個類沒有顯式定義某些成員函數時,編譯器會自動生成6個默認成員函數。這些函數可以分為以下幾類: 一、初始化和清理 1、構造函數…

Spring事務失效場景?

題目詳細答案Spring事務失效的場景主要有以下幾種。非public方法使用Transactional場景描述:Spring事務管理是基于AOP實現的,而AOP對于JDK動態代理或CGLib動態代理只會代理public方法。如果事務方法的訪問修飾符為非public,SpringAOP無法正確…

1.電動汽車動力電池系統技術介紹與分類

1.電動汽車動力電池系統技術介紹與分類 1.1 電動汽車發展的三個 “黃金時代” 第一個黃金時代(19 世紀末 - 20 世紀初) 技術基礎:鉛酸蓄電池發明(1859 年),推動電動三輪車(1873 年)、…

調用阿里云-阿里云百煉 AI

相關文檔:大模型服務平臺百煉控制臺 多輪對話:通義千問模型的多輪對話_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 創建知識庫:大模型服務平臺百煉控制臺 創建智能體:大模型服務平臺百煉控制臺 點擊智能體發布后&#x…

Apache Flink:從實時數據分析到實時AI

引言歡迎踏上這段深入了解 Apache Flink 演進歷程的旅程,Apache Flink 是一項重新定義了實時數據處理的技術。本博客文章基于王峰(阿里云開放數據平臺負責人、Apache Flink Committer)在 2025 年 Flink Forward Asia 新加坡大會上的演講內容編…

oelove奧壹新版v11.7旗艦版婚戀系統微信原生小程序源碼上架容易遇到的幾個坑,避免遺漏參數白屏顯示等問題

oelove和 金媒我都用過一段時間,其中oelove 用的時間較多,也比較了解這個系統,這個系統比較不錯的就是小程序是原生的(完全遵循微信開發者平臺規則非Uniapp)開發的,原生小程序的特點就是兼容性好&#xff0…

行為模式-模板方法模式

定義:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.(定義一個操作中的算法的框架&a…

Java集合遍歷練習題

以下是10道難度遞增的集合遍歷練習題,涵蓋List、Set、Map的各種遍歷方式,包含解題思路、代碼實現和輸出結果: 練習題1:基礎遍歷 - ArrayList的for-each遍歷 題目:創建一個存儲5個字符串的ArrayList(元素為&…

深度學習·ZegclipClip-RC

Zegclip 獲取圖像的特殊編碼:使用prompt tuning的技術,目的是減少過擬合和計算量。調整文本編碼:使用RD關系描述符,將每一個文本對應的[cls] token和圖像對應的[cls] token作哈密頓積,最后文本[cls]token形式化任務 文…

Taro 擴展 API 深度解析與實戰指南

Taro 擴展 API 深度解析與實戰指南 Taro 作為一款優秀的多端開發框架,提供了一系列強大的擴展 API,這些 API 極大地提升了開發效率和應用的可維護性。本文將深入解析 Taro 的擴展 API,并根據其功能特性進行分類講解,幫助開發者更…

容器之王--Docker的部署及基本操作演練

1.2 部署docker 1.2.1 容器工作方法1.2.2 部署第一個容器 官方站點:https://docs.docker.com/ 1.2.2.1 配置軟件倉庫 ]# cd /etc/yum.repos.d ]# vim docker.repo [docker] name docker-ce baseurl https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/sta…