基本語法
mysqldump -u用戶 -p密碼 -h主機 資料庫 [表] [選項] > 輸出檔.sql
常用場景與命令
1. 條件導出(--where / -w)
# 導出 id > 100 的資料
mysqldump -uroot -p123456 test test_data --where="id > 100" > /tmp/test.sql
# 複雜條件
mysqldump -h host -u user -p db tbl --where="unit_id >= 1 AND unit_id <= 10000" --skip-lock-tables > out.sql
2. 整庫導出
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
3. 僅導出結構(無資料)
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc > wcnc_db.sql
# -d: no-data
# --add-drop-table: 每個 CREATE 前加 DROP TABLE
4. 導出多個表
mysqldump -u root -p db_name table1 table2 table3 > tables.sql
5. 遠端導出並壓縮
mysqldump -h remote_host -u user -p db_name | gzip > db_$(date +%F).sql.gz
關鍵參數速查
| 參數 | 說明 |
-d, --no-data | 僅導出結構 |
-t, --no-create-info | 僅導出資料 |
--single-transaction | InnoDB 一致性備份(不鎖表) |
--lock-tables=false | 不鎖表(MyISAM 需配合) |
--routines | 包含存儲過程/函數 |
--triggers | 包含觸發器 |
--events | 包含事件 |
--hex-blob | 二進位欄位用十六進位 |
--master-data=2 | 附帶 CHANGE MASTER TO 註釋(主從同步用) |
導入對應命令
# 一般導入
mysql -u user -p db_name < backup.sql
# 壓縮檔直導
gunzip < backup.sql.gz | mysql -u user -p db_name
# 異步大檔導入(關閉索引、外鍵、唯一檢查)
mysql -u user -p db_name -e "SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET AUTOCOMMIT=0;"
cat backup.sql | mysql -u user -p db_name
mysql -u user -p db_name -e "SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT;"
避坑提醒
- 密碼含特殊字元請用單引號包裹或交互式輸入
- 導出大表建議加
--quick(預設開啟)避免記憶體暴漲
- 跨版本遷移加
--compatible=mysql40 等相容參數
- 定期驗證備份可還原:
mysql -u user -p test_db < backup.sql