首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

mysqldump 參數詳解與實戰備份/還原指南:從基礎到進階全覆蓋

     編輯:MySQL 綜合教學

前言

mysqldump 是 MySQL 官方邏輯備份工具,支援全庫、單表、條件導出、壓縮、主從同步座標等豐富功能。本文系統整理核心參數、常用場景與最佳實踐。

核心語法結構

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db1 [db2 ...]
mysqldump [options] --all-databases

高頻參數分類速查

類別參數說明建議場景
輸出控制--no-create-info (-t)僅導出資料,不含 CREATE TABLE資料遷移、增量同步
--no-data (-d)僅導出結構Schema 比對、建表腳本
--compact精簡輸出(抑制註釋、鎖表等)大表導出加速
--result-file (-r)指定輸出檔(Windows 必備,避免換行符轉換)跨平台備份
效能優化--opt啟用 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset(預設開啟)通用備份
--quick (-q)逐行讀取,不緩衝整個結果集大表必加
--extended-insert (-e)多值 INSERT,縮小檔案、加快還原預設開啟
--disable-keys (-K)導出時暫停非唯一索引更新(MyISAM)大量匯入前
--single-transactionInnoDB 一致性熱備份核心,配合 --quick線上熱備份
一致性與鎖--lock-tables (-l)鎖定所有表(READ LOCAL)MyISAM 靜態備份
--lock-all-tables (-x)全域讀鎖(FLUSH TABLES WITH READ LOCK)多庫一致性備份
--master-data=[1|2]輸出 CHANGE MASTER TO(1=可執行,2=註釋),含 binlog 座標主從搭建、PITR
--flush-logs (-F)備份前切換 binlog配合 --master-data
過濾與格式--where (-w)WHERE 條件導出子集分表、歸檔
--tables覆蓋 --databases,後續參數視為表名指定多表
--tab (-T)產生 .sql (DDL) + .txt (資料) 兩檔,需 FILE 權限大量載入

實戰場景範例

1. 線上熱備份(InnoDB,生產環境標準)

mysqldump --single-transaction --quick --master-data=2 --flush-logs \
  --routines --triggers --events \
  --databases db1 db2 > /backup/full_$(date +%F).sql

2. 僅導出結構(Schema 比對)

mysqldump --no-data --databases db1 > schema_db1.sql

3. 條件導出(歸檔歷史資料)

mysqldump --where="created_at < '2023-01-01'" db1 logs > archive_logs_2022.sql

4. 壓縮備份(節省空間)

mysqldump --opt db1 | gzip > db1_$(date +%F).sql.gz

5. 還原

# 完整還原
mysql -u root -p db1 < backup.sql

# 壓縮檔還原
gunzip -c backup.sql.gz | mysql -u root -p db1

# 指定字符集還原(防亂碼)
mysql --default-character-set=utf8mb4 -u root -p db1 < backup.sql

進階技巧

  • 並行匯入:將 --tab 導出的 .txt 搭配 mysqlimport --use-threads=4 並行載入。
  • GTID 支援:MySQL 5.6+ 加 --set-gtid-purged=ON 保留 GTID 資訊。
  • 排除特定表:--ignore-table=db.tbl。
  • 遠端備份:mysqldump -h remote_host -u user -p db1 | mysql -h local_host -u user -p db1 直接跨實例同步。

常見坑點提醒

  1. 未加 --single-transaction 導致 InnoDB 備份不一致。
  2. 大表未加 --quick 導致記憶體暴漲 OOM。
  3. Windows 下未用 -r 導致換行符錯誤。
  4. 版本不匹配:高版本導出低版本導入失敗,加 --compatible=mysql40 或手動調整 SQL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved