除了官方推薦的 mysqldump 邏輯備份,MySQL 還支援一種極簡的物理備份方式:直接複製資料目錄(data 目錄下對應資料庫的子目錄)。本文實測該方法在 Windows/MyISAM 環境下可完美實現跨主機遷移,適合中小型資料庫快速部署與測試場景。
TestA。FLUSH TABLES WITH READ LOCK 並停止 MySQL 服務(或確保無寫入操作)。C:\mysql\data\TestA 整個資料夾複製到 HostB 的 C:\mysql\data\ 下。TestA 已自動識別,查詢、修改操作均正常。結論:MyISAM 引擎下,資料庫即目錄、資料表即文件(.frm、.MYD、.MYI),物理複製等同於備份整個資料庫。無需匯出 SQL、無需重建索引,速度極快。
雖然物理複製快捷,但受限於儲存引擎、版本、架構差異,生產環境仍建議使用 mysqldump。核心語法:
mysqldump [OPTIONS] database [tables] > backup-file.sql
| 參數 | 作用 | 建議場景 |
|---|---|---|
--opt | 等同 --quick --add-drop-table --add-locks --extended-insert --lock-tables,最快匯出 | 常規全庫備份 |
--quick / -q | 不緩衝結果集直接輸出,避免大表 OOM | 大表/大庫備份必加 |
--single-transaction | InnoDB 熱備份,不鎖表,保證一致性視圖 | InnoDB 生產環境 |
--master-data=2 | 記錄 binlog 位點,便於主從搭建/增量恢復 | 主從架構 |
--routines --triggers --events | 包含存儲過程、觸發器、事件 | 完整遷移 |
--compress -C | 客戶端與服務端傳輸壓縮 | 跨網段備份 |
# 1. 全庫備份(含結構+資料,最快模式)
mysqldump --opt --single-transaction --master-data=2 -u root -p dbname > backup.sql
# 2. 僅備份結構
mysqldump --no-data -u root -p dbname > schema.sql
# 3. 僅備份資料
mysqldump --no-create-info -u root -p dbname > data.sql
# 4. 遠端直接導入另一實例
mysqldump --opt dbname | mysql --host=remote-host -C dbname
# 5. 還原
mysqladmin create target_db
mysql target_db < backup.sql
| 維度 | 物理複製 | mysqldump 邏輯備份 |
|---|---|---|
| 速度 | 極快(文件級複製) | 較慢(SQL 解析/執行) |
| 跨版本/跨平台 | 不支援(需同版本、同架構、同引擎) | 完美支援 |
| InnoDB 支援 | 需停庫 + 複製 ibdata/redo log,極易損壞 | 支援熱備份 (--single-transaction) |
| 一致性保證 | 需手動鎖表/停服務 | 可熱備份 |
| 適用場景 | 測試環境克隆、MyISAM 唯讀庫遷移、同版本快速擴容 | 生產環境常規備份、異構遷移、時間點恢復 |
總結:物理複製是 MyISAM 時代的「神奇捷徑」,但在 InnoDB 為主、高可用要求高的現代架構中,請堅持使用 mysqldump 或 XtraBackup 等專業工具,確保資料安全與可恢復性。