萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Linux 自動備份 MySQL Shell 腳本(含保留策略與壓縮)

腳本位置與排程

# 編輯 crontab (以 mysql 用戶或 root)
crontab -e

# 每日 01:01 執行
1 1 * * * /data/task/backupmysql.sh

腳本內容 /data/task/backupmysql.sh

#!/bin/bash
# MySQL 每日備份腳本,保留 7 天

BACKUP_DIR="/data/backup/mysql"
MYSQL_BIN_DIR="/usr/local/mysql/bin"
DB_USER="dbuser"
DB_PASS="dbpassword"
DB_NAME="dbname"

TIMESTAMP=$(date +%Y%m%d%H)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}-${TIMESTAMP}.sql.gz"

# 確保備份目錄存在
mkdir -p "${BACKUP_DIR}"

# 邏輯備份 + 即時壓縮
${MYSQL_BIN_DIR}/mysqldump \
  -u"${DB_USER}" -p"${DB_PASS}" \
  --single-transaction --quick --routines --triggers --events \
  "${DB_NAME}" | gzip > "${BACKUP_FILE}"

# 檢查備份檔案大小(防止空檔)
if [ ! -s "${BACKUP_FILE}" ]; then
    echo "$(date) ERROR: Backup file is empty!" >> "${BACKUP_DIR}/backup.log"
    exit 1
fi

# 刪除 7 天前備份
find "${BACKUP_DIR}" -name "${DB_NAME}-*.sql.gz" -type f -mtime +7 -delete

# 記錄日誌
echo "$(date) SUCCESS: ${BACKUP_FILE} ($(du -h ${BACKUP_FILE} | cut -f1))" >> "${BACKUP_DIR}/backup.log"

關鍵參數說明

  • --single-transaction:InnoDB 一致性快照,無鎖。
  • --quick:逐行讀取,避免大表佔用記憶體。
  • --routines --triggers --events:備份存儲過程、觸發器、事件。
  • gzip 管線壓縮,節省 70%~90% 空間。
  • find -mtime +7 -delete:保留 7 天,自動清理。

生產環境強化建議

  1. 密碼不落地:使用 ~/.my.cnf [client] 區塊存放密碼,腳本移除 -p 參數。
  2. 多庫支援:陣列迴圈遍歷 DB_LIST,每庫獨立檔案。
  3. 異地同步:備份完成後 rsync -avz --password-file=... ${BACKUP_DIR}/ user@backup-server::module/。
  4. 驗證機制:每週隨機抽取一份備份在測試環境還原,記錄 RTO。
  5. 監控告警:腳本回傳碼非 0 或備份檔大小異常(如 < 1MB)發送告警。
  6. 並行壓縮:大庫可用 pigz 替代 gzip,多核加速。

物理備份替代方案:Percona XtraBackup

# 完全備份
xtrabackup --backup --target-dir=/data/backup/full_$(date +%F) --user=root --password=xxx

# 增量備份
xtrabackup --backup --target-dir=/data/backup/inc_$(date +%F) \
  --incremental-basedir=/data/backup/full_2024-05-01 --user=root --password=xxx

# 還原準備
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full_2024-05-01
xtrabackup --prepare --target-dir=/data/backup/inc_2024-05-02 --incremental-dir=/data/backup/full_2024-05-01

XtraBackup 物理熱備、無鎖、速度快(流式複製)、支援增量,**大型生產庫首選**。

總結

一個健壯的備份腳本包含:**參數化配置、單交易無鎖導出、即時壓縮、自動清理、詳細日誌、非零退出碼、異地同步、定期演練**。小庫用 mysqldump 足矣,大庫請上 XtraBackup。

copyright © 萬盛學電腦網 all rights reserved