首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysqldump 完整參考手冊:核心參數、備份策略、還原實戰與效能優化

     編輯:MySQL 資料庫相關知識

前言:mysqldump 是邏輯備份的瑞士刀

支援結構+資料、單表/多表/全庫、壓縮、遠程傳輸、一致性快照、多種格式輸出。掌握核心參數組合,能應對 99% 備份場景。

一、基礎語法

mysqldump [OPTIONS] database [tables...]
mysqldump [OPTIONS] --databases db1 [db2...]
mysqldump [OPTIONS] --all-databases

二、核心參數分類詳解

1. 輸出內容控制

參數短參作用
--no-create-info-t不輸出 CREATE TABLE (僅資料)
--no-data-d不輸出資料 (僅結構)
--add-drop-table每表前加 DROP TABLE IF EXISTS
--add-drop-database每庫前加 DROP DATABASE IF EXISTS
--complete-insert-cINSERT 含欄位名 (INSERT INTO t (a,b) VALUES...)
--extended-insert-e多行 INSERT (預設開啟,速度快、體積小)
--skip-extended-insert禁用多行 INSERT (便於 diff/合併衝突)
--hex-blob二進制欄位用十六進制輸出 (避免編碼問題)
--routines-R包含存儲程序/函數
--triggers包含觸發器 (預設開啟)
--events-E包含 Event 排程任務

2. 一致性與鎖控制

參數短參作用適用場景
--single-transaction啟動事務 + REPEATABLE READ,InnoDB 熱備不鎖表生產首選
--lock-tables-l鎖定所有表 (MyISAM 必須)MyISAM 混合庫
--lock-all-tables-x全庫鎖定 (FLUSH TABLES WITH READ LOCK)非事務引擎
--flush-logs-F備份前輪轉 Binlog (配合增量備份)PITR 恢複基點
--master-data=2輸出 CHANGE MASTER TO 註解 (含 Binlog 位置)主從搭建/遷移

3. 效能與網路

參數短參作用
--quick-q不緩衝結果集直接流式輸出 (大表必加)
--opt綜合優化:--quick --add-drop-table --add-locks --extended-insert --lock-tables (預設開啟)
--compress-C客戶端-服務端壓縮傳輸 (遠程備份)
--net_buffer_length網路緩衝區大小 (大行需調大)

4. 格式化輸出 (配合 -T 導出檔案)

--fields-terminated-by=, --fields-enclosed-by='"' --fields-escaped-by='\\'
--lines-terminated-by='\n' --tab=/path/to/dir
-- 產生 table.sql (結構) + table.txt (資料)

5. 連線與過濾

參數短參作用
--host-h遠程主機
--port-P端口
--user-u用戶名
--password-p密碼
--socket-SUnix socket 路徑
--where-wWHERE 條件過濾資料 (如 "-w id>100")
--ignore-table排除表 (可多次)

三、經典備份命令模板

1. 生產環境標準熱備 (InnoDB)

mysqldump -u backup_user -p \
  --single-transaction \
  --routines --triggers --events \
  --master-data=2 \
  --flush-logs \
  --hex-blob \
  --compress \
  dbname | gzip > /backup/dbname_$(date +%F_%H%M).sql.gz

2. 結構遷移 (無資料)

mysqldump -u root -p -d --routines --triggers --events dbname > schema.sql

3. 遠程同步到另一台 MySQL

mysqldump -u root -p --single-transaction --compress dbname \
  | mysql -h remote_host -u root -p -C dbname

4. 定時備份腳本 (cron 每日 02:00)

#!/bin/bash
BACKUP_DIR="/backup/mysql/$(date +%Y%m)"
mkdir -p "$BACKUP_DIR"
mysqldump -u backup -p'pass' \
  --single-transaction --routines --triggers --events \
  --master-data=2 --flush-logs --hex-blob \
  mydb | gzip > "$BACKUP_DIR/mydb_$(date +%F_%H%M).sql.gz"
# 保留 30 天
find "$BACKUP_DIR/.." -name '*.gz' -mtime +30 -delete

四、還原實戰

# 1. 建立目標庫
mysqladmin -u root -p create target_db

# 2. 還原 (解壓後管道導入)
gunzip < backup.sql.gz | mysql -u root -p target_db

# 3. 或分步
mysql -u root -p target_db < backup.sql

# 4. 部分還原 (單表)
gunzip < backup.sql.gz | sed -n '/CREATE TABLE `t1`/,/CREATE TABLE `/p' | head -n -1 | mysql -u root -p target_db

五、效能優化建議

  • 大表必加 --quick:避免客戶端記憶體 OOM。
  • --opt 預設開啟,若需關閉多行 INSERT 用 --skip-extended-insert。
  • 壓縮傳輸 --compress:遠程備份節省 70%+ 頻寬。
  • 並行備份:mydumper (多線程) 替代 mysqldump,速度提升 3-10 倍。
  • 物理熱備:xtrabackup (InnoDB) 秒級備份、不阻塞寫入,大庫首選。

六、常見陷阱避坑

現象原因對策
備份卡住/極慢大表無 --quick、MyISAM 鎖表、網路慢加 --quick、改 --single-transaction、本地備份再傳輸
還原報錯 Unknown collation版本不兼容 (8.0 → 5.7)sed 替換 collation 或用相容版本 mysqldump
備份檔過大含大量 BLOB/TEXT、未壓縮管道 gzip、排除大表單獨備份
主從同步位置錯誤未用 --master-data=2必加 --master-data=2 --flush-logs

結語

mysqldump 參數眾多,但核心就三組:內容控制 (-t/-d/-c/-e)、一致性鎖 (--single-transaction/-l/-x)、效能網路 (--quick/--compress/--opt)。記住「InnoDB 熱備必加 --single-transaction、遠程必加 --compress、大表必加 --quick、PITR 必加 --master-data=2 --flush-logs」,即可駕馭絕大多數備份場景。大庫請升級 mydumper/xtrabackup 進入物理/並行備份新時代。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved