| 維度 | mysqldump (邏輯備份) | 直接複製檔案 (物理備份) |
|---|---|---|
| 運作模式 | 透過 Server 協議導出 SQL | 繞過 Server 直接拷貝資料檔 |
| 一致性保障 | 配合 --single-transaction / --lock-tables | 必須鎖表或停服務 |
| 速度 | 較慢 | 極快(受限於磁碟 I/O) |
| 可移植性 | 跨版本、跨架構、跨儲存引擎 | 僅限相同版本、相同架構、MyISAM 表 |
| 輸出格式 | SQL 文本(可編輯、可壓縮) | 二進制資料/索引檔 |
# 全庫備份(推薦生產參數)
mysqldump --opt --single-transaction --master-data=2 -u root -p db_name > backup.sql
# 壓縮輸出
mysqldump --opt db_name | gzip > backup.sql.gz
# 指定表備份
mysqldump db_name tbl1 tbl2 > partial.sql
# 遷移至遠端 Server(管道流,無中間檔)
mysqldump --opt db_name | mysql -h remote_host -u user -p db_name
--opt = --quick --add-drop-table --add-locks --extended-insert --lock-tables(綜合最佳化)。--single-transaction:InnoDB 熱備份關鍵,配合 MVCC 取得一致性視圖,不阻塞寫入。--master-data=2:在輸出中以註釋記錄 Binlog 座標,利於建立 Slave。--quick:逐行串流輸出,避免大結果集佔滿記憶體。--compress:跨網路傳輸時壓縮協議資料。操作範例:
# 停服務
systemctl stop mysql
# 複製整個資料庫目錄
cp -r /var/lib/mysql/db_name /backup/mysql/
# 啟動服務
systemctl start mysql
log-bin + expire_logs_days,支援時間點恢復 (PITR)。db_name.YYYY-MM-DD.sql.gz,一眼可識別。同版本遷移:mysqldump | mysql -h new_host 管道直連。
跨版本遷移:導出 SQL → 目標版本 mysql_upgrade → 匯入 → 驗證。