為什麼需要導出資料?
- 災難備份:資料價值高昂,定期備份是防止遺失的唯一保障。
- 資料共享與遷移:跨環境、跨版本、跨平台移轉資料的標準格式。
mysqldump 核心優勢
- 將整個資料庫(結構+資料)轉為單一純文字 SQL 檔案,包含
CREATE TABLE(DDL)與 INSERT(DML)。
- 支援單表、多表、甚至帶
WHERE 條件的部分資料導出。
- 輸出檔可直接用
mysql 客戶端或批次腳本還原,極度通用。
常用語法範例
# 導出整個資料庫
mysqldump -u root -p Meet_A_Geek > MeetAGeek_Dump_File.txt
# 導出單一資料表
mysqldump -u root -p Meet_A_Geek Orders > MeetAGeek_Orders.txt
# 條件導出(僅導出 Order_ID > 2000 的記錄)
mysqldump -u root -p --where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
關鍵參數對照表
| 參數 | 作用 | 適用場景 |
--add-drop-table | 每張表前加 DROP TABLE IF EXISTS | 還原時避免「表已存在」報錯 |
--add-locks | INSERT 前後加 LOCK/UNLOCK TABLES | 防止還原期間其他連線干擾,加速大量寫入 |
-c / --complete-insert | INSERT 語句包含完整欄位名 | 跨資料庫/結構不完全相同時遷移更安全 |
--delayed-insert | 使用 INSERT DELAYED | 降低還原對線上服務衝擊 |
-F / --flush-logs | 導出前刷新 Binlog | 配合增量備份策略 |
-f / --force | 忽略錯誤繼續導出 | 損壞資料庫搶救 |
-t / --no-create-info | 僅導出資料,不含 DDL | 同結構不同資料的環境同步 |
-d / --no-data | 僅導出結構,不含資料 | 建立空資料庫架構 |
-l / --lock-tables | 導出期間鎖定表(讀鎖) | 確保備份一致性(預設開啟) |
--single-transaction | InnoDB 專用:單一交易快照 | 線上熱備份不阻塞寫入(需 InnoDB) |
進階技巧
- 壓縮輸出:
mysqldump ... | gzip > dump.sql.gz 節省磁碟空間。
- 排除特定表:
--ignore-table=db.tbl。
- 主從同步初始化:
--master-data=2 在輸出檔頭記錄 Binlog 位置。
還原操作
# 進入 mysql 客戶端後
SOURCE /path/to/dump.sql;
# 或直接命令列
mysql -u root -p TargetDB < dump.sql