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

mysqldump 完整使用指南:參數詳解、備份範例與效能優化

     編輯:MySQL 綜合教學

mysqldump 是 MySQL 官方提供的邏輯備份工具,支援完整備份、單表備份、壓縮輸出、跨伺服器遷移等豐富功能。本文系統整理核心參數、實戰範例與效能調優技巧。

基本語法

mysqldump [選項] 資料庫名稱 [資料表名稱...] > 備份檔案.sql

不指定資料表即備份整個資料庫;不指定資料庫名稱可使用 --all-databases 備份所有資料庫。

常用備份範例

完整備份並指定字符集

mysqldump -u root -p --default-character-set=cp932 --opt --extended-insert=false --hex-blob -R -x mysql > E:\mysql.sql

壓縮備份(管道輸出至 gzip)

mysqldump samp_db | gzip > /usr/archives/mysql/samp_db_$(date +%F).gz

備份指定資料表

mysqldump samp_db student score event absence > gradebook.sql

跨伺服器直接遷移

mysqldump samp_db | mysql -h remote.host.com samp_db

加入 DROP TABLE 避免還原衝突

mysqldump --add-drop-table samp_db | mysql -h remote.host.com samp_db

核心參數深度解析

參數說明建議場景
--opt綜合優化選項,等同 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset預設開啟,大多數備份場景推薦
--quick, -q逐行輸出,不將整個結果集載入記憶體大表備份必備,防止 OOM
--extended-insert使用多行 INSERT 語句,預設開啟提升還原速度,若遇 max_allowed_packet 限制可設為 false
--single-transaction啟動交易一致性備份(僅 InnoDB/BDB)線上熱備份首選,不鎖表
--lock-tables鎖定當前備份的資料表(MyISAM 適用)MyISAM 表備份確保一致性
--lock-all-tables, -x全域讀鎖定所有資料庫表需全域一致性時使用,會阻塞寫入
--flush-logs備份前刷新二進制日誌配合 binlog 做增量備份檢查點
--hex-blob二進制欄位以十六進制輸出含 BLOB/BINARY/VARBINARY 欄位必加
--routines, -R包含預存程序與函數完整備份必加
--triggers包含觸發器(預設開啟)完整備份保持開啟
--default-character-set指定匯出字符集非 latin1 資料庫必須指定,否則亂碼
--disable-keys匯入時暫停索引更新,最後重建MyISAM 大量匯入大幅加速
--compress壓縮網路傳輸資料跨網段遠端備份
--delayed-insert使用 INSERT DELAYED還原至線上資料庫減少鎖競爭
--no-create-info, -t僅匯出資料,不含 CREATE TABLE資料同步場景
--no-data, -d僅匯出結構,不含資料結構遷移、審計
--compatible=name相容指定 MySQL 版本或其他資料庫跨版本遷移、異構遷移

效能優化黃金法則

  1. 大表必加 --quick 或 --opt:避免記憶體耗盡
  2. InnoDB 熱備份首選 --single-transaction:不鎖表、不阻塞寫入
  3. MyISAM 需 --lock-tables:確保表級一致性
  4. 搭配 --flush-logs 做增量備份基準點:binlog 位置對應備份時間點
  5. 遠端備份加 --compress:降低頻寬佔用

還原操作

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

# 壓縮檔直接還原
gunzip < backup.sql.gz | mysql -u root -p dbname

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

避坑指南

  • 預設 --opt 會鎖表,高併發線上庫慎用,改用 --single-transaction
  • 大表還原極慢,考慮分表備份、平行還原或使用 Percona XtraBackup
  • 字符集不匹配是亂碼主因,匯出匯入務必明確指定 --default-character-set
  • 定期演練還原流程,驗證備份可用性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved