萬盛學電腦網

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

MySQL 自動備份策略選型:邏輯備份 vs 物理備份 vs 主從複制,含 Shell 腳本實戰

三大備份模式優劣對比

模式工具/方式優點缺點適用場景
邏輯備份 mysqldump 輸出 SQL 跨平台/版本可移植;線上熱備(加鎖讀);人工可讀、易修改 大資料量慢、鎖表影響寫入、單執行緒 中小型資料庫、異構遷移、需人工審核 SQL
物理備份 直接複製 datadir 檔案 速度極快、備份即時快照、不阻塞查詢(需停寫或加鎖) 通常需停機或全域鎖;難以跨架構/版本移植;InnoDB 需 ibdata、Redo Log 一致性 極大資料庫、同架構同版本快速克隆、檔案系統快照(LVM/ZFS)
主從複制/雙機熱備 Binary Log Replication 近即時備援、可分流讀查詢、無鎖表影響主庫寫入 架構複雜、需額外硬體、主從延遲、Split-brain 風險 高可用、大流量讀寫分離、跨 IDC 災備

本文採用策略:每日邏輯備份 + 保留 7 天

  • 備份時間:凌晨 05:00(低峰期,鎖表影響最小)。
  • 工具:/usr/bin/mysqldump。
  • 儲存路徑:/data/backdata/。
  • 保留策略:備份成功後刪除 7 天前舊檔。

自動化備份 Shell 腳本 (/root/mysqlback.sh)

#!/bin/bash
DB_NAME="your_db"
DB_USER="backup_user"
DB_PASS="strong_password"
BIN_DIR="/usr/bin"
BACK_DIR="/data/backdata"
DATE="mysql-$(date +'%Y%m%d-%H%M%S')"
LOG_FILE="${BACK_DIR}/dbbakup.log"
DUMP_FILE="${DATE}.sql"

# 1. 執行備份(--single-transaction 適用 InnoDB 熱備,--quick 避免記憶體暴漲)
${BIN_DIR}/mysqldump --opt --force --single-transaction --quick \
  -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACK_DIR}/${DUMP_FILE}

# 2. 記錄日誌
echo "----------------------- $(date +'%Y-%m-%d %H:%M:%S') -------------------" >> ${LOG_FILE}
echo "createFile: ${DUMP_FILE}" >> ${LOG_FILE}

# 3. 清理 7 天前舊備份
find "${BACK_DIR}" -ctime +7 -type f -name "*.sql" -print > deleted.txt
echo -e "delete files:\n" >> ${LOG_FILE}
while read LINE; do
    rm -rf "${LINE}"
    echo "${LINE}" >> ${LOG_FILE}
done < deleted.txt

echo "---------------------------------------------------------------" >> ${LOG_FILE}

排程設定

crontab -e
# 每天 05:00 執行
0 5 * * * /bin/bash /root/mysqlback.sh

進階建議

  • 生產環境建議改用 Percona XtraBackup(物理熱備、支援增量、不鎖表)。
  • 備份檔異地同步(rsync/s3/NFS),防單點故障。
  • 定期演練還原,驗證備份可用性。
copyright © 萬盛學電腦網 all rights reserved