萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

mysqldump 參數詳解與備份還原進階實戰

mysqldump 核心參數完整表

參數功能適用場景
--add-drop-table每表前加 DROP TABLE IF EXISTS還原時避免衝突
--add-locksINSERT 前後加 LOCK/UNLOCK TABLE防併發干擾,加速匯入
-c / --complete-insertINSERT 含完整欄位名跨版本/跨庫遷移
--delayed-insert使用 INSERT DELAYED降低主庫鎖競爭
-F / --flush-logs備份前刷新 binlog配合增量備份策略
-f / --force忽略錯誤繼續匯出損壞表搶救資料
--fullCREATE 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 定義

Schema:以資料定義語言(DDL)表示的一組語句集,完整描述資料庫結構(表、索引、視圖、觸發器等)。

SELECT INTO OUTFILE / LOAD DATA INFILE 互補

  • SELECT ... INTO OUTFILE:匯出文字檔,支援自定義分隔符。
  • LOAD DATA INFILE:高速匯入,比 INSERT 快 20 倍以上。
  • 兩者選項幾乎對稱(FIELDS TERMINATED BY、LINES TERMINATED BY、IGNORE LINES 等)。
copyright © 萬盛學電腦網 all rights reserved