首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 每日 MySQL 自動備份腳本:輪轉歸檔、壓縮、異地同步生產級實現

     編輯:MySQL 資料庫相關知識

Linux 環境下 Shell 腳本 + cron 實現 MySQL 每日自動備份,保留 6 代歸檔壓縮,支持異地同步與監控通知。

核心腳本 /usr/local/bin/mysql_daily_backup.sh


#!/bin/bash
# ===== 配置區 =====
BACKUP_DIR="/backup/mysql/daily"
MYSQL_USER="backup_user"
MYSQL_PASS="StrongPass#2024"
MYSQL_HOST="localhost"
RETENTION_DAYS=6
COMPRESS_CMD="gzip -9"
REMOTE_SYNC="rsync -avz --delete $BACKUP_DIR/ backup-user@offsite-server:/offsite/mysql-backup/"
NOTIFY_WEBHOOK="https://hooks.slack.com/services/XXX/YYY/ZZZ"
# ===================

set -euo pipefail
mkdir -p "$BACKUP_DIR"
cd "$BACKUP_DIR"

# 1. 輪轉舊備份 (保留最近 N 天)
find . -name 'mysql_full_*.sql.gz' -mtime +$RETENTION_DAYS -delete

# 2. 執行備份 (單事務、含常規對象、流式讀取)
DATE_STAMP=$(date +%F_%H%M)
BACKUP_FILE="mysql_full_${DATE_STAMP}.sql"

mysqldump -h"$MYSQL_HOST" -u"$MYSQL_USER" -p"$MYSQL_PASS" \
  --all-databases \
  --single-transaction \
  --routines --triggers --events \
  --quick \
  --max_allowed_packet=1G \
  --hex-blob \
  > "$BACKUP_FILE"

# 3. 壓縮
$COMPRESS_CMD "$BACKUP_FILE"

# 4. 完整性校驗
if ! gzip -t "${BACKUP_FILE}.gz"; then
    echo "[ERROR] 備份文件壓縮校驗失敗" >&2
    curl -X POST -H 'Content-type: application/json' \
      --data "{\"text\":\"MySQL 備份校驗失敗: $(hostname) $DATE_STAMP\"}" \
      "$NOTIFY_WEBHOOK"
    exit 1
fi

# 5. 異地同步 (可選)
if [[ -n "$REMOTE_SYNC" ]]; then
    eval "$REMOTE_SYNC"
fi

# 6. 成功通知
BACKUP_SIZE=$(du -h "${BACKUP_FILE}.gz" | cut -f1)
curl -X POST -H 'Content-type: application/json' \
  --data "{\"text\":\"✅ MySQL 備份成功: $(hostname) $DATE_STAMP 大小: $BACKUP_SIZE\"}" \
  "$NOTIFY_WEBHOOK"

echo "[INFO] 備份完成: ${BACKUP_FILE}.gz ($BACKUP_SIZE)"

部署為 Cron 任務


# 編輯 root crontab
crontab -e

# 每天凌晨 2:30 執行 (低峰期)
30 2 * * * /usr/local/bin/mysql_daily_backup.sh >> /var/log/mysql_backup.log 2>&1

關鍵最佳實踐

維度建議
備份用戶最小權限GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, PROCESS ON *.* TO 'backup_user'@'localhost' IDENTIFIED BY 'pass';
密碼安全使用 --defaults-extra-file=/etc/mysql/backup.cnf (權限 600) 避免命令行洩露密碼
備份一致性驗證定期 CHECKSUM TABLE / pt-table-checksum 對比主備數據一致性
異地存儲最小 2 地域 (同城+異地),對象存儲 IA/Archive 級降低成本
恢複演練每季度在隔離環境全量恢複 + PITR 驗證,記錄 RTO/RPO
監控告警備份失敗/文件過小/耗時異常/異地同步失敗 → 即時通知 (Slack/釘釘/郵件/短信)

進階增強:邏輯 + 物理混合備份策略

  • 每日邏輯備份 (mysqldump) — 可移植、審計友好、單表恢複靈活
  • 每周物理備份 (XtraBackup) — 恢複極快 (RTO 分鐘級)、大庫必備
  • Binlog 實時增量同步 (Kafka/Flink/CDC) — 秒級 RPO、支持實時數倉
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved