首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL定時自動備份Shell腳本實戰:邏輯備份、壓縮存儲與歷史清理

     編輯:MySQL 綜合教學

資料庫備份是災難恢復的最後防線。本文提供生產級MySQL定時備份Shell腳本,涵蓋mysqldump邏輯備份、tar.gz壓縮、歷史文件自動清理、錯誤處理與日誌記錄,可直接部署至cron定時執行。

腳本核心功能

  • 每日全量邏輯備份(mysqldump --single-transaction)
  • 備份文件壓縮存儲(tar.gz,節省90%+空間)
  • 自動清理N天前歷史備份(預設保留1天,可配置)
  • 備份目錄自動建立、執行日誌記錄、錯誤碼返回
  • 支援crontab定時任務部署

完整腳本代碼(mysql_backup.sh)

#!/bin/bash
# MySQL Auto Backup Script
# Author: liuzheng | Version: 1.0

# ===== 配置區 =====
DB_NAME="Bulletin_production"
DB_USER="root"
DB_PASS=""                    # 建議使用--defaults-extra-file避免明文密碼
BACKUP_PATH="/home/worker/mysql_backup/"
RETENTION_DAYS=1              # 保留天數

# ===== 變量衍生 =====
DATE_STR=$(date +%y%m%d)
TIME_STR=$(date +"%y-%m-%d %H:%M:%S")
NEW_FILE="${BACKUP_PATH}db${DATE_STR}.tar.gz"
DUMP_FILE="${BACKUP_PATH}db${DATE_STR}.sql"
OLD_FILE="${BACKUP_PATH}db$(date -d "${RETENTION_DAYS} days ago" +%y%m%d).tar.gz"
LOG_FILE="${BACKUP_PATH}backup.log"

# ===== 日誌函數 =====
log() { echo "[$TIME_STR] $1" | tee -a "$LOG_FILE"; }

# ===== 主流程 =====
log "---------------------------"
log "Backup started"

# 1. 確保備份目錄存在
mkdir -p "$BACKUP_PATH"

# 2. 清理舊備份
if [ -f "$OLD_FILE" ]; then
    rm -f "$OLD_FILE"
    log "[$OLD_FILE] Delete old file success"
else
    log "Old backup file not exist: $OLD_FILE"
fi

# 3. 檢查今日備份是否已存在
if [ -f "$NEW_FILE" ]; then
    log "[$NEW_FILE] Backup already exists, skip"
    exit 0
fi

# 4. 執行邏輯備份
log "Executing mysqldump..."
if mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers "$DB_NAME" > "$DUMP_FILE"; then
    log "mysqldump completed"
else
    log "ERROR: mysqldump failed"
    exit 1
fi

# 5. 壓縮備份文件
log "Compressing backup..."
if tar -czf "$NEW_FILE" -C "$BACKUP_PATH" "$(basename "$DUMP_FILE")"; then
    log "[$NEW_FILE] Compression success"
else
    log "ERROR: Compression failed"
    exit 1
fi

# 6. 清理臨時SQL文件
rm -f "$DUMP_FILE"

log "[$NEW_FILE] Backup completed successfully"
log "---------------------------"
exit 0

關鍵參數最佳實踐

參數建議值說明
--single-transaction必加InnoDB一致性備份不鎖表,需RELOAD/LOCK TABLES權限
--routines --triggers必加包含存儲過程/觸發器/事件
--master-data=2可選輸出CHANGE MASTER語句(註釋形式),利於從庫搭建
--defaults-extra-file推薦避免腳本明文密碼,指向[client]密碼配置文件

部署與驗證

  1. chmod +x mysql_backup.sh
  2. 測試執行:./mysql_backup.sh 檢查backup.log與生成文件
  3. 加入crontab:crontab -e → 0 2 * * * /path/mysql_backup.sh >/dev/null 2>&1(每日02:00執行)
  4. 驗證:次日檢查備份文件大小、日誌、解壓測試tar -tzf db240115.tar.gz

進階擴展方向

  • 異地備份:rsync/scp推送至遠端存儲/雲對象存儲
  • 增量備份:結合binlog或xtrabackup --incremental
  • 備份驗證:定期自動化恢複演練至測試環境
  • 監控告警:備份失敗/文件過小/磁碟空間不足觸發告警

「備份未測試等於無備份」,建立備份→驗證→演練閉環,才是真正的資料安全保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved