mysqldump 基礎語法
mysqldump [選項] 資料庫名 [表名...]
若不指定表名,將導出整個資料庫。執行 mysqldump --help 可查看完整支援選項。
核心選項分類
效能與記憶體優化
- -q, --quick:不緩衝查詢結果,直接串流輸出至 stdout,大表導出必備。
- --opt:綜合優化選項,等同
--quick --add-drop-table --add-locks --extended-insert --lock-tables,產生最快導入速度的 SQL。
資料完整性與結構
- --add-drop-table:建表前加 DROP TABLE。
- --add-locks:導出時鎖表,加速導入。
- -c, --complete-insert:完整 INSERT(含欄位名)。
- -e, --extended-insert:多行 INSERT,縮減檔案體積。
- -t, --no-create-info:僅導出資料,不含建表語句。
- -d, --no-data:僅導出結構(Schema)。
連線與安全
- -h, --host:指定主機(預設 localhost)。
- -u, --user:使用者名稱。
- -p, --password[=密碼]:密碼(建議互動式輸入)。
- -P, --port:TCP 連接埠。
- -S, --socket:Unix Socket 路徑。
- -C, --compress:啟用壓縮傳輸。
進階過濾
- -w, --where='條件':只導出符合 WHERE 條件的資料(需加引號)。
- --ignore-table:排除特定表。
常見實戰範例
完整備份(含結構與資料)
mysqldump --opt -u root -p mydb > backup_full.sql
僅備份結構
mysqldump --no-data -u root -p mydb > schema_only.sql
遠端資料庫直接遷移
mysqldump --opt -u root -p mydb | mysql -h remote_host -u root -p target_db
導入 SQL 檔案
mysqladmin -u root -p create target_db
mysql -u root -p target_db < backup_full.sql
大型資料庫注意事項
導出大型資料庫時,務必加上 --quick 或 --opt,否則 mysqldump 會嘗試將整個結果集載入記憶體,導致 OOM 錯誤。搭配 gzip 或 bzip2 管線壓縮可節省磁碟空間。