首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL/MariaDB 資料備份與還原全策略:邏輯/物理、冷/熱、全量/增量、工具選型與實戰演練

     編輯:MySQL 資料庫相關知識

資料是核心資產,備份策略關乎業務生死。本文系統梳理備份分類、工具優劣、對象清單、策略制定與 mysqldump + binlog、LVM 快照 兩大主流方案的完整實戰流程,適用於 MySQL 5.6+ / MariaDB 10+ 環境。

備份分類速覽

維度類型特點
線上狀態冷備份離線,最安全但不可用
溫備份全域共享鎖,唯讀
熱備份線上不阻塞,InnoDB 依賴 MVCC
資料範圍完全備份整個資料庫
部分備份單表/子集
備份介面物理備份複製資料檔,大資料集快,跨平台差
邏輯備份導出 SQL 文本,通用慢,佔空間大
增量策略完全備份每次全量
增量備份僅備份上次完全後的變化
差異備份備份上次完全後所有變化

常用工具對比

工具類型適用場景備註
mysqldump邏輯/單執行緒<5GB 小資料庫支援 --single-transaction 熱備 InnoDB
mysqldumper邏輯/多執行緒多庫並行備份社群維護
xtrabackup物理/熱備大資料集、生產首選Percona 開源,支援增量、壓縮、流式
LVM 快照 + cp/tar物理/近熱備資料與日誌同卷需全域鎖瞬間凍結,快照建立後釋放
SELECT ... INTO OUTFILE邏輯/部分單表導出不含結構定義

備份對象清單(不可遺漏)

  1. 資料庫資料(核心)
  2. MySQL 設定檔(my.cnf)
  3. 程式碼物件:Stored Procedure、Function、Trigger、Event
  4. OS 層設定:crontab、備份腳本、網路配置
  5. 主從複資訊(master.info, relay-log.info)
  6. 二進位日誌(Binlog)

方案一:mysqldump + Binlog 完全恢復實戰

# 1. 完全備份(含結構、資料、例程、觸發器、binlog 位置)
mysqldump -uroot -p --databases hellodb \
  --single-transaction --flush-logs --master-data=2 \
  --routines --triggers --events > /root/hellodb.sql

# 2. 模擬業務寫入新資料
# 3. 刪除資料庫(模擬災難)
DROP DATABASE hellodb;

# 4. 從 binlog 擷取增量段落
mysqlbinlog --start-position=403 --stop-position=663 mysql-bin.000004 > /tmp/hellodb.inc.sql

# 5. 恢復:關閉 binlog → 還原完全備份 → 重放增量 → 開啟 binlog
SET SESSION sql_log_bin=0;
SOURCE /root/hellodb.sql;
SOURCE /tmp/hellodb.inc.sql;
SET SESSION sql_log_bin=1;

方案二:LVM 快照物理備份流程

  1. 確認資料目錄在 LVM 邏輯卷上(mount、lvs)。
  2. FLUSH TABLES WITH READ LOCK; FLUSH LOGS; SHOW MASTER STATUS; 記錄位置。
  3. lvcreate -L 100M -s -n mysql-snap /dev/vg/mysql 建立快照卷。
  4. UNLOCK TABLES; 釋放鎖(業務恢復寫入)。
  5. 掛載快照 mount -o ro /dev/vg/mysql-snap /mnt,tar/cp 複製資料目錄至備份儲存。
  6. umount /mnt; lvremove /dev/vg/mysql-snap 清理快照。

備份黃金法則

  • 備份與生產放在不同磁碟/機房/雲區域。
  • 定期(月/季)演練還原,驗證 RTO/RPO。
  • 災難恢復後立即執行一次完全備份建立新基準。
  • Binlog 與資料檔分盤,並定期備份 Binlog。
  • 根據資料量級訂製策略:<10GB 用 mysqldump,>100GB 必上 xtrabackup/LVM。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved