mysqldump 是 MySQL 官方邏輯備份核心工具,支援全庫、多庫、單表、條件導出,並提供豐富參數控制輸出格式、一致性、效能與相容性。本文系統整理常用場景、核心參數表與最佳實踐。
| 場景 | 命令範例 |
|---|---|
| 導出所有庫 | mysqldump -u root -p --all-databases > all.sql |
| 導入所有庫 | mysql -u root -p < all.sql 或 mysql> source all.sql; |
| 導出指定庫 | mysqldump -u root -p --databases db1 db2 > db1_db2.sql |
| 導出單庫 | mysqldump -u root -p db1 > db1.sql |
| 導入單庫 | mysql -u root -p db1 < db1.sql |
| 導出指定表 | mysqldump -u root -p db1 tbl1 tbl2 > tbls.sql |
| 指定字符集導出 | mysqldump -u root -p --default-character-set=gb2312 db1 tbl1 > tbl1.sql |
mysqldump [options] db_name [tables]
mysqldump [options] --databases db1 [db2 ...]
mysqldump [options] --all-databases
--single-transaction:InnoDB 熱備必備,啟動事務快照,不阻塞寫入(需配合 --quick)--lock-all-tables / -x:全局讀鎖,適用 MyISAM--lock-tables / -l:逐庫鎖表,無法保證跨庫一致性--master-data=[1|2]:記錄 Binlog 位置,支援 PITR(時間點恢復),1=CHANGE MASTER 語句,2=註釋形式--flush-logs:備份前切換 Binlog,配合 --master-data 使用--opt:預設開啟,等同 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset--extended-insert / -e:多行 INSERT,大幅縮小檔案體積並加速導入--quick / -q:流式讀取大表,不緩存全量結果集--disable-keys / -k:導入前禁用索引,導入後重建,MyISAM 大表加速神器--hex-blob:二進制欄位以十六進制輸出,避免編碼問題--complete-insert / -c:含欄位名的完整 INSERT,便於異構遷移--where='condition':條件導出,如 --where="id > 100"--compatible=mysql40|postgresql|oracle:輸出相容目標資料庫語法--no-create-db / -n:不輸出 CREATE DATABASE--no-create-info / -t:僅導出資料--no-data / -d:僅導出結構--routines / -r:導出存儲過程/函數(5.1.2+)--triggers:導出觸發器(預設開啟)
mysqldump --all-databases \
--single-transaction \
--master-data=2 \
--flush-logs \
--routines \
--triggers \
--hex-blob \
--quick \
--compress \
> full_backup_$(date +%F).sql
# 按主鍵範圍分批導出,避免長事務
mysqldump -u root -p --quick --where="id BETWEEN 1 AND 100000" db1 big_table > part1.sql
mysqldump -h src_host -u root -p --single-transaction db1 | mysql -h dst_host -u root -p db1
SET sql_log_bin=0;(需 SUPER 權限)--disable-keys 參數split -l 100000 backup.sql part_ 逐個 sourcemysql -e "source /path/backup.sql" db_name 非交互式導入