萬盛學電腦網

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

MySQL 數據庫備份與恢復全攻略:mysqldump、物理備份、PITR 實戰詳解

構建可靠的數據保護體系:從備份策略到災難恢復演練

數據庫備份是 DBA 的底線工程。本文系統梳理邏輯備份、物理備份、二進制日志配合的完整體系,並給出生產環境可落地的操作規範。

兩大備份路線對比

維度mysqldump (邏輯備份)物理備份 (文件拷貝/xtrabackup)
原理通過 SQL 協議導出 DDL+DML直接拷貝數據文件(.ibd/.frm/.MYD/.MYI)
一致性保證單線程 --single-transaction (InnoDB) / 鎖表 (MyISAM)需停庫或使用 LVM 快照/xtrabackup 熱備
可移植性跨版本、跨架構、跨存儲引擎同版本、同架構、同引擎(MyISAM 更嚴格)
速度慢(受限於 SQL 解析/網絡)快(接近磁盤順序讀寫速度)
恢復靈活性可選庫/表/行恢復、異構導入通常整庫恢復,部分恢復需導入後再導出
佔用資源CPU 高、網絡佔用I/O 高、磁盤佔用

mysqldump 生產級參數模板

mysqldump \
  --host=127.0.0.1 --port=3306 \
  --user=backup_user --password='xxx' \
  --single-transaction --master-data=2 --flush-logs \
  --routines --triggers --events \
  --hex-blob --default-character-set=utf8mb4 \
  --databases db1 db2 \
  --result-file=/backup/db_full_$(date +%F_%H%M).sql

# 關鍵參數解讀:
# --single-transaction: InnoDB 一致性快照,無需鎖表
# --master-data=2: 輸出 CHANGE MASTER TO 註釋,記錄 Binlog 位置,用於主從搭建/PITR
# --flush-logs: 切換 Binlog,配合增量備份劃定邊界

物理熱備:Percona XtraBackup

# 全量備份
xtrabackup --backup --target-dir=/backup/full_$(date +%F) \
  --user=backup_user --password='xxx' --parallel=4 --compress

# 增量備份 (基於上一次全量/增量的 LSN)
xtrabackup --backup --target-dir=/backup/inc_$(date +%F_%H%M) \
  --incremental-basedir=/backup/full_2024-01-15 --parallel=4 --compress

# 準備/恢復
xtrabackup --prepare --target-dir=/backup/full_2024-01-15
xtrabackup --prepare --apply-log-only --target-dir=/backup/full_2024-01-15 \
  --incremental-dir=/backup/inc_2024-01-15_0600
# 複製回數據目錄或使用 --copy-back

二進制日志與 PITR (Point-In-Time Recovery)

  • 啟用 log_bin、binlog_format=ROW、expire_logs_days=7(配合備份周期)。
  • 恢復流程:
    1. 恢復最近一次全量備份(邏輯/物理)
    2. mysqlbinlog --start-position=XXX --stop-position=YYY binlog.xxx | mysql 重放增量日志
    3. 或指定時間點:--start-datetime="2024-01-15 10:00:00" --stop-datetime="2024-01-15 10:30:00"

備份管理鐵律

  1. 3-2-1 原則:3 份副本、2 種介質、1 份異地(異區/雲存儲)。
  2. 命名規範:{db}_{type}_{YYYYMMDD_HHMM}.{sql|xb.gz},如 order_full_20240115_0200.sql.gz。
  3. 壓縮加密:gzip -9 / zstd -19 + openssl enc -aes-256-gcm。
  4. 定期驗證:每月至少 1 次全量恢復演練,記錄 RTO/RPO,納入 KPI。
  5. 監控告警:備份任務成功/失敗、備份文件大小異常、磁盤剩餘空間、Binlog 積壓。

避坑指南

  • 不要用 cp/tar 直接拷貝運行中實例的數據目錄 → 數據不一致。
  • 不要依賴單一備份介質(如僅本地磁盤)。
  • 不要忽略 mysql.upgrade、mysql.sock、auto.cnf (server_uuid) 等關鍵文件。
  • 不要在主庫直接運行耗時 CHECK TABLE/OPTIMIZE TABLE,改在從庫執行。

備份的價值在於「可恢復」。只有經過驗證的備份,才是真正的備份。

copyright © 萬盛學電腦網 all rights reserved