mysqldump -u root -p123456 --databases db1 > db1_backup.sql
# 壓縮備份
mysqldump -u root -p123456 --databases db1 | gzip > db1_backup.sql.gz
mysqldump -u root -p123456 db1 > db1_data.sql
# 恢復到新庫
mysql -u root -p123456 new_db < db1_data.sql
# 普通恢復
mysql -u root -p123456 db1 < db1_backup.sql
# 直接解壓恢復
gzip -dc db1_backup.sql.gz | mysql -u root -p123456 db1
| 參數 | 說明 | 建議場景 |
|---|---|---|
--quick / -q | 逐行讀取表數據,不緩存整張表到記憶體(預設開啟) | 大表備份必開,防 OOM |
--opt | 綜合優化開關,含 --quick --add-drop-table --add-locks --extended-insert --lock-tables 等(預設開啟) | 常規備份無需顯式指定 |
--skip-opt | 關閉 --opt 全家桶 | 需精細控制行為時使用 |
--single-transaction | InnoDB 專用,啟動一致性快照,無需鎖表(需開啟 binlog) | 線上熱備份首選 |
--master-data=2 | 輸出 CHANGE MASTER TO 註釋,記錄備份時刻 binlog 位置 | 搭建從庫、PITR 基準點 |
--routines / -R | 導出存儲過程、函數、觸發器 | 應用依賴存儲邏輯時必加 |
--triggers | 導出觸發器(預設開啟) | 通常保持開啟 |
--events | 導出 Event 調度任務 | 使用定時任務時必加 |
--no-create-db | 不輸出 CREATE DATABASE | 異名恢復、多庫合併導入 |
--no-create-info | 不輸出 CREATE TABLE | 僅導數據,結構已存在 |
--no-data | 僅導結構 | 遷移結構、對比 Schema |
--compact | 精簡輸出,去除註釋、SET 變量等 | 生成可讀性強的 Schema 文檔 |
--skip-comments | 去除版本、時間等註釋行 | 版本控制存儲 SQL 文件 |
--databases / -B | 後續參數視為庫名,輸出含建庫語句 | 多庫備份 |
--tables | 後續參數視為表名 | 指定表備份 |
--where | 加 WHERE 條件導出子集 | 歷史數據歸檔、分表導出 |
mydumper 或自寫腳本按表並行 mysqldump,充分利用多核 CPU。--where="id BETWEEN 1 AND 1000000" 分批導出,避免單文件過大導入失敗。mysqldump ... | gzip -c | ssh target "gunzip | mysql ..." 跨機器直接遷移,落地不佔磁碟。DROP INDEX 非主鍵索引,導入後重建,大幅提升載入速度。CREATE TEMPORARY TABLE)mysqldump 不會 導出臨時表結構與數據。BLOB/TEXT、AUTO_INCREMENT、NULL 索引、範圍查詢(僅 = 和 <=>)。MAX_ROWS 防止佔滿內存;受 max_heap_table_size 限制。mysqldump 會導出結構與數據,恢復後數據重新載入內存。#!/bin/bash
# 每日全量 + 增量 binlog 備份
BACKUP_DIR="/backup/mysql/$(date +%F)"
mkdir -p "$BACKUP_DIR"
# 全量備份(InnoDB 熱備,含 binlog 位置)
mysqldump -uroot -p"$MYSQL_PWD" \
--single-transaction --master-data=2 --routines --triggers --events \
--databases $(mysql -uroot -p"$MYSQL_PWD" -N -e "SHOW DATABASES LIKE 'biz_%';" | tr '\n' ' ') \
| gzip > "$BACKUP_DIR/full_$(date +%H%M).sql.gz"
# 清理 7 天前備份
find /backup/mysql -type f -mtime +7 -name '*.gz' -delete
# 備份 binlog(需配置 log_bin 與 expire_logs_days)
rsync -av /var/lib/mysql/mysql-bin.* /backup/binlog/
-R 導致遷移後功能缺失。--default-character-set=utf8mb4,確保連線與導出字符集一致。--lock-all-tables 衝突:配合 --single-transaction 時不可同時使用 --lock-tables。RESET MASTER 或 SET GTID_PURGED,否則報錯。mysqldump 是 MySQL 生態最通用的邏輯備份工具,掌握核心參數組合、大表優化策略與自動化腳本編寫,是 DBA 交付穩定備份體系的基本功。記住:備份未驗證恢復,等於沒備份。