使用 MySQL 進行資料庫備份,標準做法無非是 mysqldump 或啟用二進位日誌進行增量備份。但有沒有想過,MySQL 的資料本質上就是檔案系統上的目錄與檔案?若能直接複製資料目錄,不僅省去導出導入的時間,還能確保資料結構完整無損。本文將實測這種「非官方」的檔案級備份方法,並對比官方推薦的 mysqldump 方案,幫助你根據場景選擇最適合的策略。
data 目錄為例data 資料夾(例如 C:\MySQL\data)。C:\MySQL\data\TestA。TestA 目錄複製到 hostB 的 data 目錄下,確保檔案結構完全一致。MySQL 的資料庫確實可以透過檔案系統層面的複製來完成備份與還原。只要將對應的資料庫目錄還原至相同版本、相同架構的 MySQL data 目錄下,即可直接使用,無需額外工具。但這屬於「非官方驗證」手段,僅建議在版本一致、儲存引擎相容、資料庫離線或鎖定狀態下使用,生產環境仍以官方工具為主。
mysqldump 完整指南mysqldump 是 MySQL 官方提供的邏輯備份工具,支援跨版本、跨平台、跨儲存引擎,是最通用、最安全的備份方式。
mysqldump [OPTIONS] database [tables]
若不指定資料表,將導出整個資料庫。執行 mysqldump --help 可查看當前版本支援的所有選項。
| 參數 | 說明 |
|---|---|
--opt | 綜合優化選項,等同於 --quick --add-drop-table --add-locks --extended-insert --lock-tables,能產生最快的導入檔案,是最常用的組合。 |
--quick, -q | 不緩衝查詢結果直接輸出,避免大資料庫導出時記憶體耗盡。 |
--add-drop-table | 每個 CREATE TABLE 前加上 DROP TABLE IF EXISTS,還原時不會因表已存在報錯。 |
--extended-insert, -e | 使用多行 INSERT 語法,大幅減小檔案體積並加快導入速度。 |
--lock-tables, -l | 備份前鎖定所有表,保證資料一致性(會阻塞寫入)。 |
--single-transaction | (InnoDB 專用)在單一交易中導出,無需鎖表,適合線上熱備份。 |
--flush-logs, -F | 導出前刷新二進位日誌,配合備份時間點建立恢復檢查點。 |
--compress, -C | 客戶端與伺服器支援壓縮時啟用,減少網路傳輸量。 |
--where, -w | 只導出符合條件的記錄,例如 -w "id>1000"。 |
--no-data, -d | 只導出結構(DDL),不導出資料。 |
--no-create-info, -t | 只導出資料(DML),不包含 CREATE TABLE。 |
mysqldump --opt db_name > backup.sqlmysqldump --opt db_name | mysql --host=remote_host -C db_namemysqldump --no-data db_name > schema.sqlmysqldump --opt db_name | gzip > backup.sql.gzmysqladmin create target_db
mysql target_db < backup.sql
| 維度 | 檔案級複製 | mysqldump 邏輯備份 |
|---|---|---|
| 速度 | 極快(僅受限於磁碟 I/O) | 較慢(需解析 SQL、建立索引) |
| 跨版本/平台 | 不支援(需相同版本、相同架構、相同儲存引擎) | 完美支援 |
| 線上熱備份 | 不可(必須停庫或全域鎖定) | 可(搭配 --single-transaction) |
| 資料一致性 | 依賴檔案系統快照或離線狀態 | 交易層面保證 |
| 適用場景 | 同版本叢集節點同步、離線維護窗口、大量資料快速佈署 | 日常備份、異構遷移、時間點恢復、開發測試環境建立 |
mysqldump --single-transaction --opt,配合二進位日誌實現時間點恢復(PITR)。備份的核心價值在於「可恢復」,而非「備份動作本身」。選對工具、驗證流程、落實異地備份,才是資料安全的真正保障。