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

MySQL 資料庫備份與還原完整方案:mysqldump、直接拷貝、二進制日誌、LVM 快照與災難恢復

     編輯:MySQL 資料庫相關知識

備份是 DBA 核心職責。本文系統整理 MySQL 五大備份路徑、還原實操、備份策略制定與災難恢復 SOP,涵蓋邏輯備份、物理備份、增量備份與時間點恢復(PITR)。

一、備份方法對照

方法類型優點缺點適用場景
mysqldump邏輯跨版本/跨架構可遷移、可壓縮、可篩選表大庫慢、鎖表影響寫入中小庫、異構遷移、開發環境
直接拷貝檔案物理極快、無邏輯解析開銷需停庫/鎖表、僅限同架構/同版本、MyISAM 跨平台較易大庫、維護窗口、同架構叢集
SQL 語法 BACKUP/SELECT INTO OUTFILE邏輯/物理混合線上備份、可自定義格式不含索引、恢復慢、權限要求高特定表導出、異構數據交換
二進制日誌增量增量備份、PITR、可做從庫備份分攤壓力需啟用 binlog、恢復需全量基礎7x24 高可用、增量備份
LVM/ZFS 快照 + 物理備份物理+快照近零停機、瞬時一致性需檔案系統支援、快照空間管理大庫生產環境、雲端磁碟

二、mysqldump 核心參數與實戰範例

關鍵參數

  • --opt:預設開啟,等同 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
  • --single-transaction:InnoDB 熱備必加,配合 --quick 避免記憶體暴增
  • --master-data=1:輸出 CHANGE MASTER TO 陳述句,記錄 binlog 位置,支援從庫建立
  • --hex-blob:二進制欄位十六進制輸出,避免編碼問題
  • --routines / --triggers:包含儲存過程/觸發器
  • --compress:跨網路傳輸壓縮

MyISAM 備份範例

mysqldump -uuser -ppass --default-character-set=utf8 \
  --opt --extended-insert=false --triggers -R --hex-blob -x dbname > dbname.sql

InnoDB 熱備範例

mysqldump -uuser -ppass --default-character-set=utf8 \
  --opt --extended-insert=false --triggers -R --hex-blob \
  --single-transaction dbname > dbname.sql

增量備份基礎(配合 binlog)

mysqldump --master-data=1 --single-transaction --flush-logs dbname > full.sql
# 之後每小時 FLUSH LOGS 產生新 binlog,備份增量 binlog 即可

三、直接拷貝物理備份流程

# 1. 鎖表刷新
mysql> FLUSH TABLES WITH READ LOCK;
# 2. 另開終端拷貝資料目錄
cp -rp /var/lib/mysql /backup/mysql_$(date +%F)
# 3. 釋放鎖
mysql> UNLOCK TABLES;
# InnoDB 額外備份 ib_logfile* 以便崩潰恢復

四、二進制日誌增量備份與 PITR

  1. 啟用:server-id=1; log-bin=binlog; log-bin-index=binlog.index 重啟
  2. 備份:FLUSH LOGS; 切換 binlog → 拷貝舊 binlog 檔案
  3. 查看:mysqlbinlog /backup/binlog.000001 可篩選庫、時間範圍
  4. 恢復:mysqlbinlog binlog.000001 | mysql -uuser -ppass dbname

五、還原實操

備份類型還原指令
mysqldump SQLmysql -uuser -ppass dbname < dump.sql 或 SOURCE /path/dump.sql;
直接拷貝停服務 → 覆蓋 datadir → 啟動(InnoDB 需含 ib_logfile*)
BACKUP TABLERESTORE TABLE tbl FROM '/path/';
SELECT INTO OUTFILELOAD DATA INFILE '/path/tbl.txt' INTO TABLE tbl [REPLACE|IGNORE];
binlog 增量mysqlbinlog binlog.xxx | mysql -uuser -ppass dbname

六、備份策略制定

  • 中等業務:首次全量 → 每日增量 → 每週全量
  • 核心業務:每日全量 → 每小時增量 → 異地備份
  • 最佳架構:主從複制,從庫執行備份(零影響主庫)

七、災難恢復 SOP

  1. 確認故障範圍(單表/單庫/全例項/磁碟損壞)
  2. 嘗試 REPAIR TABLE/myisamchk 修復(MyISAM)
  3. InnoDB 啟用 innodb_force_recovery=1..6 嘗試啟動導出
  4. 依策略選擇最近全量備份 + 後續 binlog 恢復至故障前時間點
  5. 驗證資料完整性(CHECKSUM、關鍵業務對帳)
  6. 切換流量、事後複盤、優化備份策略

備份未恢複等於零;定期演練恢復流程,才是真正的資料安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved