本文為墨天輪數據庫管理服務團隊第155期技術分享,內容原創,作者為技術顧問閆建,如需轉載請聯繫小墨(VX:modb666)並註明來源。如需查看更多文章可關注【墨天輪】公眾號。
腳本功能
此腳本是專門用於MySQL8.0全實例備份的mysqldump腳本,它包含了備份數據庫實例的所有對象(數據、結構、存儲過程、函數、事件、觸發器)的完整配置。
腳本內容
腳本名稱命名為 mysql\_full\_backup.sh
### mysql_full_backup.sh腳本內容如下:
#!/bin/bash
# MySQL 8.0 全實例自動備份腳本
# 功能:備份所有數據庫(包含存儲過程、函數、事件、觸發器)
# ====== 配置區 ======
# MySQL 連接配置
MYSQL_USER="root" # MySQL 用户名
MYSQL_PASS="your_password" # MySQL 密碼(建議使用配置文件免密)
MYSQL_HOST="localhost" # MySQL 主機
MYSQL_PORT="3306" # MySQL 端口
# 備份路徑配置
BACKUP_BASE_DIR="/data/mysql_backup" # 備份根目錄
DATE_STAMP=$(date +"%Y%m%d_%H%M%S") # 時間戳格式
BACKUP_DIR="${BACKUP_BASE_DIR}/full_${DATE_STAMP}" # 本次備份目錄
# 備份保留天數(自動清理舊備份)
RETENTION_DAYS=7
# 日誌文件
LOG_FILE="${BACKUP_BASE_DIR}/backup.log"
# ====== 函數定義 ======
# 記錄日誌函數
log_message() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> ${LOG_FILE}
}
# 檢查錯誤函數
check_error() {
if [ $? -ne 0 ]; then
log_message "錯誤: $1"
exit 1
fi
}
# ====== 主程序開始 ======
log_message "=== MySQL全量備份開始 ==="
# 1. 創建備份目錄
mkdir -p ${BACKUP_DIR}
check_error "創建備份目錄失敗"
# 2. 設置權限(保護備份文件)
chmod 750 ${BACKUP_DIR}
log_message "備份目錄創建成功: ${BACKUP_DIR}"
# 3. 執行全實例備份(關鍵參數説明)
log_message "開始執行mysqldump全實例備份..."
mysqldump --user=${MYSQL_USER} \
--password=${MYSQL_PASS} \
--host=${MYSQL_HOST} \
--port=${MYSQL_PORT} \
--all-databases \
--single-transaction \
--routines \
--events \
--triggers \
--flush-logs \
--source-data=2 \
--set-gtid-purged=OFF \
--default-character-set=utf8mb4 \
--max-allowed-packet=1G \
--hex-blob \
--result-file=${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql
check_error "mysqldump備份執行失敗"
log_message "MySQL全實例備份完成: ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql"
# 4. 備份MySQL配置文件(重要!)
cp /etc/my.cnf ${BACKUP_DIR}/my.cnf_backup_${DATE_STAMP} 2>/dev/null || log_message "警告: 未找到/etc/my.cnf,跳過配置文件備份"
# 5. 壓縮備份文件(節省空間)
log_message "開始壓縮備份文件..."
gzip ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql
check_error "備份文件壓縮失敗"
log_message "備份文件壓縮完成: ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql.gz"
# 6. 生成MD5校驗文件(驗證備份完整性)
md5sum ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql.gz > ${BACKUP_DIR}/backup.md5
log_message "生成MD5校驗文件"
# 7. 清理舊備份(按保留天數設置)
log_message "清理${RETENTION_DAYS}天前的舊備份..."
find ${BACKUP_BASE_DIR} -name "full_*" -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} \; 2>/dev/null
# 8. 輸出備份信息
BACKUP_SIZE=$(du -sh ${BACKUP_DIR} | cut -f1)
log_message "備份完成! 備份大小: ${BACKUP_SIZE}, 備份位置: ${BACKUP_DIR}"
# 9. 驗證備份文件完整性
log_message "驗證備份文件完整性..."
md5sum -c ${BACKUP_DIR}/backup.md5 >> ${LOG_FILE} 2>&1
if [ $? -eq 0 ]; then
log_message "備份文件完整性驗證通過"
else
log_message "警告: 備份文件完整性驗證失敗"
fi
log_message "=== MySQL全量備份結束 ==="
echo "備份已完成! 文件位置: ${BACKUP_DIR}/mysql_full_backup_${DATE_STAMP}.sql.gz"
🔧關鍵參數説明
核心備份選項:
1. --all-databases:備份所有數據庫(含系統庫)
2. --single-transaction:通過事務確保InnoDB表備份一致性(避免鎖表)
3. --routines:備份存儲過程和函數
4. --events:備份事件調度器
5. --triggers:備份觸發器
高級配置
--source-data=2:在備份中記錄二進制日誌位置(用於主從複製)
--set-gtid-purged=OFF:避免GTID相關衝突
--hex-blob:安全處理BLOB數據類型
使用方法
1. 保存腳本並賦予執行權限
chmod +x mysql_full_backup.sh
2. 配置MySQL免密認證(可選推薦,避免密碼明文)
在/root/.my.cnf中添加:
[client]
user=root
password=your_password
host=localhost
port=3306
然後設置權限:chmod 600 /root/.my.cnf
3. 手動執行備份
./mysql_full_backup.sh
4. 配置定時任務(每日凌晨2點執行)
# 編輯crontab:crontab -e 添加如下內容並保存
0 2 * * * /path/to/mysql_full_backup.sh
備份驗證與恢復
驗證備份完整性:
# 檢查備份文件
gunzip -c mysql_full_backup_20251020_143000.sql.gz | head -100
# 驗證MD5校驗和
md5sum -c backup.md5
恢復備份:
# 解壓備份文件
gunzip mysql_full_backup_20251020_143000.sql.gz
# 恢復到MySQL
mysql -u root -p < mysql_full_backup_20251020_143000.sql
總 結
該腳本提供了一個生產環境所需的完整功能,包括錯誤處理、日誌記錄、自動清理和完整性驗證。數據庫運維人員可以根據實際環境調整配置參數,特別是備份路徑和保留天數設置。
墨天輪從樂知樂享的數據庫技術社區蓄勢出發,全面升級,提供多類型數據庫管理服務。墨天輪數據庫管理服務旨在為用户構建信賴可託付的數據庫環境,併為數據庫廠商提供中立的生態支持。
墨天輪數據庫服務官網:https://www.modb.pro/service