| 參數 | 功能 | 適用場景 |
|---|---|---|
--add-drop-table | 每表前加 DROP TABLE IF EXISTS | 還原時避免衝突 |
--add-locks | INSERT 前後加 LOCK/UNLOCK TABLE | 防併發干擾,加速匯入 |
-c / --complete-insert | INSERT 含完整欄位名 | 跨版本/跨庫遷移 |
--delayed-insert | 使用 INSERT DELAYED | 降低主庫鎖競爭 |
-F / --flush-logs | 備份前刷新 binlog | 配合增量備份策略 |
-f / --force | 忽略錯誤繼續匯出 | 損壞表搶救資料 |
--full | CREATE TABLE 含完整屬性 | 需完整還原表屬性時 |
-l / --lock-tables | 備份期間鎖定所有表 | MyISAM 必須;InnoDB 建議用 --single-transaction |
-t / --no-create-info | 不輸出 CREATE TABLE | 僅備份資料 |
-d / --no-data | 不輸出 INSERT | 僅備份結構 |
--opt | 啟用 --add-drop-table --add-locks --create-options --quick --extended-insert --lock-tables --set-charset --disable-keys | 預設開啟,最常用 |
-q / --quick | 不緩存全表,逐行寫檔 | 大表防止 OOM |
-T / --tab=path | 產生 .sql (結構) + .txt (資料) | 需 LOAD DATA INFILE 還原 |
-w "WHERE" | 依條件篩選匯出 | 增量/分區匯出 |
# 1. 完整備份(生產環境建議)
mysqldump --single-transaction --master-data=2 --flush-logs --routines --triggers --events --databases db1 db2 | gzip > full_$(date +%F).sql.gz
# 2. 僅結構備份
mysqldump --no-data --databases db1 db2 > schema_$(date +%F).sql
# 3. 指定表備份
mysqldump --opt db1 tbl1 tbl2 > tbls.sql
# 4. 依條件匯出(近 30 天訂單)
mysqldump -w "created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)" db1 orders > recent_orders.sql
# 5. 產生 tab 分隔檔(配合 LOAD DATA)
mysqldump --tab=/export --fields-terminated-by=',' --fields-enclosed-by='"' db1 tbl1
# 一般還原
mysql -u root -p dbname < backup.sql
# 壓縮檔管道還原(不佔磁碟空間)
gunzip -c backup.sql.gz | mysql -u root -p dbname
# 並行還原大檔案(需 mydumper/myloader 或自行拆分)
# 範例:拆分單表檔案並行導入
Schema:以資料定義語言(DDL)表示的一組語句集,完整描述資料庫結構(表、索引、視圖、觸發器等)。
SELECT ... INTO OUTFILE:匯出文字檔,支援自定義分隔符。LOAD DATA INFILE:高速匯入,比 INSERT 快 20 倍以上。FIELDS TERMINATED BY、LINES TERMINATED BY、IGNORE LINES 等)。