mysqldump -u username -p[password] [options] db_name [tbl_name ...] > dump.sql
注意: -p 後**無空格**直接跟密碼(不安全,建議省略讓終端提示輸入,或用 --defaults-extra-file)。
mysqldump -u root -p db_name > db_name_$(date +%F).sql
mysqldump -u root -p db_name table_name > table_name_$(date +%F).sql
mysqldump -u root -p --all-databases > all_dbs_$(date +%F).sql
mysqldump -u root -p \
--single-transaction \ # InnoDB 熱備份,不加鎖,保證一致性視圖
--master-data=2 \ # 輸出 CHANGE MASTER TO 註釋(含 Binlog 位點),便於搭建 Slave
--routines \ # 包含存儲過程/函數
--triggers \ # 包含觸發器
--events \ # 包含事件調度器
--hex-blob \ # 二進制數據用十六進制導出,避免編碼問題
--quick \ # 流式讀取,不緩存整個結果集到內存(大表必加)
--set-gtid-purged=OFF \ # GTID 模式下避免污染目標實例 GTID 執行集
db_name > db_name_$(date +%F_%H-%M).sql
| 參數 | 作用 | 建議 |
|---|---|---|
-h, --host | 指定主機 | 遠程備份必加 |
-P, --port | 指定端口 | 非 3306 必加 |
--default-character-set | 連接字符集 | 建議 utf8mb4 |
--no-data | 只導結構 | Schema 遷移/審計用 |
--no-create-info | 只導數據 | 數據遷移/同步用 |
--where | 導出條件過濾 | --where="id > 1000" 分批導出 |
--ignore-table | 忽略表 | --ignore-table=db.log_table |
--compress | 壓縮傳輸協議 | 跨網段備份減少帶寬 |
--lock-tables=false | 不鎖表(MyISAM 必須鎖表保一致性) | InnoDB 配合 --single-transaction 設 false |
--flush-logs | 備份前切換 Binlog | 配合增量備份策略 |
--delete-master-logs | 備份後刪除舊 Binlog | 慎用!需確認 Slave 已同步 |
mysql -u root -p db_name < dump.sql
# 或登錄後
SOURCE /path/to/dump.sql;
# 使用 sed/awk 提取單庫片段,或使用工具
sed -n '/^-- Current Database: `db_name`/,/^-- Current Database: `/p' all_dbs.sql > db_name.sql
mysqldump 單線程。大庫建議用 mydumper(多線程、一致性快照、壓縮、分文件)。mysqldump ... | gzip > dump.sql.gz(節省 70%+ 空間)。mysqldump ... | ssh user@backup "cat > /backup/dump.sql"(不佔用本地磁碟)。mysqldump 是 MySQL 邏輯備份基石。生產環境**必加 --single-transaction --master-data=2 --quick --hex-blob**。大數據量(>50GB)轉用 mydumper 或 XtraBackup 物理備份。備份腳本需納入:壓縮、加密、上傳異地、校驗、定期演練恢復 閉環。