萬盛學電腦網

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

MySQL 備份與恢復工具全解析:從 mysqldump 到 XtraBackup

MySQL 備份工具體系概覽

數據備份是資料庫運維的生命線。MySQL 生態提供了豐富的備份工具鏈,覆蓋邏輯備份、物理備份、熱備、冷備等多種場景。本文系統梳理主流工具特點與適用場景,助你構建可靠的備份策略。

核心工具對比

工具 類型 熱備支持 備份速度 恢復速度 適用場景
mysqldump 邏輯備份 ✅ (需 --single-transaction) 慢 慢 小數據量、跨版本遷移、結構導出
Percona XtraBackup 物理備份 ✅ 完全熱備 快 快 大數據量生產環境、增量備份、PITR
MySQL Enterprise Backup 物理備份 ✅ 完全熱備 快 快 企業級付費支持、壓縮加密
LVM/ZFS 快照 文件系統級 ✅ 近乎零影響 極快 快 雲環境、虛擬化存儲、配合凍結 I/O
Replication (主從) 邏輯複製 ✅ 異步/半同步 實時 需重建 高可用架構、讀寫分離、異地災備

備份策略分類

按一致性級別

  • 熱備:業務不中斷,InnoDB 配合 --single-transaction 或 XtraBackup 實現
  • 溫備:僅阻塞寫入,如 FLUSH TABLES WITH READ LOCK + 拷貝文件
  • 冷備:停庫備份,最簡單但不可用於 7×24 系統

按備份內容

  • 完全備份:全庫所有數據,恢復最簡單但耗時最長
  • 增量備份:僅備份變更數據頁(XtraBackup 基於 LSN),大幅減少備份窗口
  • 差異備份:備份上次完全備份以來的所有變更

mysqldump 核心參數詳解

# 全庫備份(含存儲過程、觸發器、事件)
mysqldump -uroot -p --all-databases \
  --single-transaction --master-data=2 \
  --routines --triggers --events \
  > full_backup_$(date +%F).sql

# 指定庫備份,排除不需要的表
mysqldump -uroot -p --databases db1 db2 \
  --ignore-table=db1.log_table \
  --single-transaction \
  > partial_backup.sql

# 只導出結構,不含數據
mysqldump -uroot -p --no-data --all-databases > schema_only.sql

關鍵參數說明

  • --single-transaction:InnoDB 熱備必須,開啟可重複讀事務保證一致性視圖
  • --master-data=2:輸出 CHANGE MASTER 註釋,記錄 Binlog 位置,便於從庫搭建
  • --lock-tables:MyISAM 專用,InnoDB 下請勿使用
  • --quick:流式導出,避免大結果集佔用客戶端內存

XtraBackup 實戰:完全備份 + 增量備份

# 1. 完全備份
xtrabackup --backup --target-dir=/backup/full_20240101 \
  --user=root --password=xxx --datadir=/var/lib/mysql

# 2. 準備備份(應用日志,使數據文件一致)
xtrabackup --prepare --target-dir=/backup/full_20240101

# 3. 增量備份(基於上次完全備份的 LSN)
xtrabackup --backup --target-dir=/backup/inc_20240102 \
  --incremental-basedir=/backup/full_20240101

# 4. 合併增量到完全備份
xtrabackup --prepare --apply-log-only --target-dir=/backup/full_20240101
xtrabackup --prepare --target-dir=/backup/full_20240101 \
  --incremental-dir=/backup/inc_20240102

# 5. 恢復:停止 MySQL,清空 datadir,拷回文件
systemctl stop mysql
rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/backup/full_20240101
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql

最佳實踐建議

  1. 分層備份:每日全備 + 每小時增備 + Binlog 歸檔,實現 RPO < 1 小時,RTO < 30 分鐘
  2. 異地存儲:備份文件同步至異地對象存儲(S3/OSS/COS),防單點故障
  3. 定期演練:每季度至少一次全量恢復演練,驗證備份可用性
  4. 監控告警:監控備份耗時、文件大小、Binlog 積壓,異常即時告警

提示:InnoDB 表務必使用 --single-transaction 保證一致性;MyISAM 表無事務支持,只能鎖表備份或停庫冷備。

copyright © 萬盛學電腦網 all rights reserved