基本語法
mysqldump [OPTIONS] database [tables...]
# 不指定 tables 則導出整庫
核心參數分類速查
| 參數 | 短參數 | 功能說明 |
--add-locks | | 每表導出前後加 LOCK/UNLOCK TABLES,加速匯入 |
--add-drop-table | | CREATE 前加 DROP TABLE IF EXISTS |
--allow-keywords | | 允許關鍵字作欄位名(加表名前綴) |
--complete-insert | -c | INSERT 含欄位名,利於跨庫匯入 |
--compress | -C | 客戶端/伺服器協定壓縮 |
--delayed-insert | | 使用 INSERT DELAYED |
--extended-insert | -e | 多行 INSERT 語法,檔案更小、匯入更快 |
--flush-logs | -F | 導出前刷新 Binlog |
--force | -f | 遇錯誤繼續導出 |
--host | -h | 指定遠端主機 |
--lock-tables | -l | 導出前鎖定所有表 |
--no-create-info | -t | 不輸出 CREATE TABLE(僅資料) |
--no-data | -d | 不輸出資料(僅結構) |
--opt | | 啟用 --quick --add-drop-table --add-locks --extended-insert --lock-tables 組合(推薦生產備份) |
--password | -p | 指定密碼(-ppwd 無空格) |
--port | -P | TCP 埠號 |
--quick | -q | 逐行輸出不緩衝,適合大表 |
--socket | -S | Unix Socket 路徑 |
--tab=路徑 | -T | 產生 .sql(結構) + .txt(資料) 兩檔,需同機運行 |
--user | -u | 連線用戶 |
--verbose | -v | 詳細輸出 |
--where | -w | WHERE 條件過濾(必須加引號) |
實戰範例集
1. 標準完整備份(生產環境推薦)
mysqldump --opt --single-transaction --master-data=2 -u root -p db_name > backup_$(date +%F).sql
--single-transaction:InnoDB 一致性熱備份(不鎖表)
--master-data=2:輸出 CHANGE MASTER TO 註解(含 Binlog 位置),利於主從搭建
2. 僅結構備份(Schema 遷移)
mysqldump -d -u root -p db_name > schema.sql
3. 僅資料備份(重建測試環境)
mysqldump -t -u root -p db_name > data.sql
4. 條件式導出(歷史資料歸檔)
mysqldump -w "created_at < '2023-01-01'" -u root -p db_name orders > orders_2022.sql
5. CSV 格式導出(給 Excel/BI 工具)
mysqldump -T /tmp/export --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by='\n' -u root -p db_name tbl_name
6. 遠端備份並直接導入另一伺服器
mysqldump --opt -h src_host -u root -p db_name | mysql -h dst_host -u root -p db_name
7. 還原備份
mysqladmin -u root -p create target_db
mysql -u root -p target_db < backup.sql
大型資料庫備份策略建議
- 分庫/分表並行導出(
& 背景執行)
- 搭配
--single-transaction 避免長時間鎖表
- 定期驗證還原可行性(
CHECKSUM TABLE、抽樣查詢)
- 備份檔異地加密儲存(GPG、S3 SSE)