mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name1 [db_name2 ...]
mysqldump [options] --all-databases
無表名 = 導出整庫;導出結果為可直接執行的 SQL 文本。
| 分類 | 參數 | 作用 | 建議 |
|---|---|---|---|
| 連接/認證 | -u, --user=name | 用戶名 | 必填 |
-p, --password[=pwd] | 密碼(不寫 = 交互輸入) | 生產用配置文件 [client] 段 | |
-h, --host=host | 主機(默認 localhost 走 socket) | 遠程必填 | |
-P, --port=port | 端口(默認 3306) | ||
-S, --socket=path | Socket 文件路徑 | 本地多實例必填 | |
--protocol={TCP|SOCKET|PIPE|MEMORY} | 強制協議 | ||
| 輸出控制 | --no-data, -d | 只導結構(無 INSERT) | 遷移審計常用 |
--no-create-info, -t | 只導數據(無 CREATE TABLE) | 數據同步常用 | |
--add-drop-table | 每表前加 DROP TABLE IF EXISTS | 重複導入安全 | |
--add-drop-database | 每庫前加 DROP DATABASE IF EXISTS | ||
--add-locks | INSERT 前後加 LOCK/UNLOCK TABLES | MyISAM 加速導入;InnoDB 單事務無效 | |
--extended-insert, -e | 多行 INSERT(默認開啟) | 大幅減小文件、加快導入 | |
--complete-insert, -c | INSERT 含列名(INSERT INTO t (a,b) VALUES...) | 跨表結構導入安全,文件變大 | |
--hex-blob | 二進制列十六進制導出(0x...) | 含 BLOB/BINARY 必加 | |
| 一致性/鎖 | --single-transaction | 啟動事務一致性導出(InnoDB 專用,**生產必加**) | 不鎖表,配合 --quick |
--lock-tables, -l | 鎖定所有表(MyISAM 一致性) | 與 --single-transaction 互斥 | |
--lock-all-tables, -x | 全局讀鎖(FLUSH TABLES WITH READ LOCK) | 阻塞寫入,慎用 | |
--master-data=[1|2] | 輸出 CHANGE MASTER TO 註釋(1=可執行,2=註釋) | 主從搭建/時間點恢復關鍵 | |
--flush-logs, -F | 導出前切換 binlog | 配合 --master-data 獲取精確位置 | |
--dump-slave=[1|2] | 從庫導出時記錄主庫 binlog 位置 | 從庫備份場景 | |
| 對象篩選 | --databases, -B | 後續參數視為库名(輸出 CREATE DATABASE) | |
--tables | 後續參數視為表名(跳過 -B) | 混合庫/表導出 | |
--where="condition", -w | 只導出滿足 WHERE 的行 | 大表分批、增量導出 | |
--ignore-table=db.tbl | 排除指定表 | 跳過大日志表等 | |
--routines, -R | 導出存儲過程/函數 | 建議常開 | |
--triggers | 導出觸發器(默認開啟) | ||
--events | 導出事件調度器 | ||
| 性能/輸出格式 | --quick, -q | 流式讀取不緩存結果集(**大表必加**) | 防 OOM |
--opt | 綁定 --quick --add-drop-table --add-locks --extended-insert --lock-tables --set-charset --disable-keys | 默認開啟,--skip-opt 關閉 | |
--compress, -C | 客戶端-服務器壓縮傳輸 | 遠程導出帶寬受限時 | |
--tab=path, -T | 生成 .sql(結構) + .txt(數據) 文件(需服務器同機、FILE 權限) | 配合 LOAD DATA 极速導入 | |
--fields-terminated-by=, 等 | 配合 -T 控制 .txt 格式 | 同 LOAD DATA 參數 | |
| 調試/其它 | --debug[=options] | 調試追蹤 | |
--verbose, -v | 詳細輸出 | ||
--version, -V | 版本信息 |
mysqldump -u backup -p --single-transaction --master-data=2 \
--routines --triggers --events --hex-blob \
--default-character-set=utf8mb4 \
--databases db1 db2 | gzip > /backup/full_$(date +%F).sql.gz
# 假設 id 1-1000000
mysqldump -u backup -p --single-transaction --where="id BETWEEN 1 AND 1000000" \
db big_table | gzip > /backup/big_table_1_1M.sql.gz
mysqldump -u backup -p --no-data --routines --triggers --events \
--default-character-set=utf8mb4 db > schema.sql
mysqldump -u backup -p --no-create-info --single-transaction \
--default-character-set=utf8mb4 db > data.sql
mysqldump -h src_host -u backup -p --single-transaction db | \
mysql -h dst_host -u root -p db
mysqldump -u backup -p --tab=/tmp/export --fields-terminated-by=, \
--fields-enclosed-by='"' --lines-terminated-by='\n' \
--single-transaction db tbl1 tbl2
# 生成 /tmp/export/tbl1.sql, /tmp/export/tbl1.txt 等
# 1. mysql 客戶端直接執行
mysql -u root -p db < backup.sql
# 或
mysql -u root -p -e "SOURCE /path/backup.sql;" db
# 2. 壓縮文件管道導入
zcat backup.sql.gz | mysql -u root -p db
# 3. 多線程並行導入(需工具)
# mydumper/myloader, mysqlpump (5.7+ 內置並行導出,導入仍單線程)
--default-character-set=utf8mb4。--compatible=mysql56 或手動修正 SQL。SET @@GLOBAL.GTID_PURGED=''; 或使用 --set-gtid-purged=OFF (5.7.18+/8.0)。