官方邏輯備份工具,導出 SQL 文本文件,支持跨版本遷移、異構引擎、部分恢復。不適用於超大庫 (TB 級) 物理備份場景。
# 單庫備份 (含結構+數據)
mysqldump -uroot -p db_name > db_backup.sql
# 指定表備份
mysqldump -uroot -p db_name table1 table2 > tables_backup.sql
# 全庫備份
mysqldump -uroot -p --all-databases > full_backup.sql
mysqldump -uroot -p \
--single-transaction \ # 一致性快照 (InnoDB 必須)
--routines --triggers --events \ # 存儲過程/觸發器/事件
--master-data=2 \ # 記錄 binlog 位置 (CHANGE MASTER TO 註釋)
--hex-blob \ # 二進制字段十六進制導出
--quick \ # 流式導出,不緩存全表
--set-gtid-purged=OFF \ # GTID 場景避免污染
db_name > prod_backup.sql
--opt 默認開啟:--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset。
# 只結構
mysqldump -uroot -p --no-data db_name > schema.sql
# 只數據 (不含建表語句)
mysqldump -uroot -p --no-create-info db_name > data_only.sql
# 源庫 -> 目標庫 (目標庫需預創建)
mysqldump -h source_host -uroot -p --single-transaction db_name | \
mysql -h target_host -uroot -p -C target_db
# -C 啟用壓縮傳輸
mysql -uroot -p db_name < backup.sql
# 或
mysql -uroot -p -e "SOURCE /path/backup.sql;" db_name
mysql -uroot -p target_db --one-database < full_backup.sql
#!/bin/bash
# /backup/auto_backup.sh
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F_%H%M)
USER="backup_user"
PASS="BackupPass123!"
mkdir -p $BACKUP_DIR
mysqldump -u$USER -p$PASS \
--single-transaction --routines --triggers --events \
--master-data=2 --all-databases | gzip > $BACKUP_DIR/full_$DATE.sql.gz
# 保留 7 天
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
# crontab -e
30 2 * * * /backup/auto_backup.sh > /dev/null 2>&1
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1
expire_logs_days=7
max_binlog_size=1G
mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > full_backup.sql
# 生成新 binlog 文件 (如 mysql-bin.000003),增量從此開始
# 1. 恢復全量備份 (到備份時間點)
mysql -uroot -p < full_backup.sql
# 2. 恢復增量 binlog (從備份點到故障點)
mysqlbinlog mysql-bin.000003 | mysql -uroot -p
# 3. 指定時間點恢復 (跳過誤操作)
mysqlbinlog --stop-datetime="2023-10-01 10:00:00" mysql-bin.000003 | mysql -uroot -p
# 4. 指定位置恢復 (更精準)
mysqlbinlog --start-position=368315 mysql-bin.000003 | mysql -uroot -p
| 參數 | 用途 |
|---|---|
| --start-datetime / --stop-datetime | 按時間範圍 |
| --start-position / --stop-position | 按位置偏移 (最精準) |
| --database | 只處理指定庫 |
| --verbose | 輸出可讀 SQL (審查用) |
mysqldump 是 MySQL 邏輯備份基石。掌握 生產級參數組合、定時腳本、全量增量聯動恢復、mysqlbinlog 精準時間/位置恢復 四大核心能力,構建企業級備份體系。記住:備份未驗證等於沒備份。