MySQL 備份分為「物理冷備份」(文件級)與「邏輯熱備份」(mysqldump)兩大流派。本文實測對比兩者優劣與適用場景。
FLUSH TABLES WITH READ LOCK 確保一致性)。datadir 下目標資料庫目錄(如 C:\mysql\data\TestA)至備份位置。datadir,啟動服務。優點: 極速、無 SQL 解析開銷。
缺點: 必須停服務、版本/架構/配置必須完全一致、無法跨引擎/跨版本遷移、InnoDB 需同步複製 ibdata/ib_logfile。
mysqldump [options] db_name [tbl_name ...] > backup.sql
# 還原
mysql -u root -p db_name < backup.sql
| 選項 | 作用 |
|---|---|
--add-locks | 每表前加 LOCK TABLES,後加 UNLOCK TABLES,加速匯入 |
--add-drop-table | 每 CREATE TABLE 前加 DROP TABLE IF EXISTS |
--allow-keywords | 允許關鍵字作欄位名(自動加反引號) |
-c, --complete-insert | 完整 INSERT 含欄位名,兼容性最好 |
-C, --compress | 客戶端/伺服器雙支援壓縮時啟用 |
--delayed-insert | 使用 INSERT DELAYED(MyISAM 有效) |
-e, --extended-insert | 多行 INSERT,體積更小、匯入更快 |
--flush-logs | 備份前輪轉 Binlog,利於增量備份定位 |
--force | 遇錯誤繼續執行 |
--master-data=2 | 輸出 CHANGE MASTER TO 註解,記錄 Binlog 位置(主從搭建必備) |
--single-transaction | InnoDB 熱備份核心:啟動事務一致性快照,不鎖表 |
--quick | 串流讀取,不將結果集全載入記憶體(大表必加) |
--routines | 備份預存程序/函數 |
--triggers | 備份觸發器 |
--events | 備份事件調度器 |
-d, --no-data | 僅導出結構 |
-t, --no-create-info | 僅導出資料 |
-T, --tab=path | 導出純文字檔(每表產生 .sql 結構檔 + .txt 資料檔) |
# 生產環境標準熱備份(InnoDB)
mysqldump --single-transaction --master-data=2 --routines --triggers --events \
--quick --compress --extended-insert --add-drop-table \
-u backup_user -p --all-databases | gzip > /backup/full_$(date +%F).sql.gz
# 僅結構遷移
mysqldump -d -u root -p db_name > schema.sql
# 純文字檔導出(配合 LOAD DATA INFILE 极速匯入)
mysqldump -T /tmp/export -u root -p db_name tbl_name
--master-data 定位)選對工具、設好策略、練熟還原,才是資料安全的真正保障。