三大備份模式優劣對比
| 模式 | 工具/方式 | 優點 | 缺點 | 適用場景 |
| 邏輯備份 |
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),防單點故障。
- 定期演練還原,驗證備份可用性。