生產環境數據庫備份恢復演練是 DBA 必修課。本文基於 MySQL 5.6.28,完整演示 mysqldump 邏輯備份 + mysqlbinlog 增量恢復的「全量+增量」組合拳實戰流程,含關鍵參數解析、POS 節點定位、恢復驗證及避坑指南。
mysql -V
# mysql Ver 14.14 Distrib 5.6.28, for linux-glibc2.5 (x86_64) using EditLine wrapper
| 參數 | 短參 | 作用 | 推薦場景 |
|---|---|---|---|
--all-databases | -A | 備份所有庫 | 實例級遷移 |
--databases | -B | 指定庫(多庫空格分隔) | 業務庫備份 |
--single-transaction | InnoDB 熱備(一致性快照) | 生產必加 | |
--flush-logs | -F | 備份前滾動二進制日志 | 配合增量恢復 |
--master-data=2 | 輸出 CHANGE MASTER 註釋(含 POS) | 主從搭建/恢復定位 | |
--routines | 備份存儲過程/函數 | 完整邏輯備份 | |
--triggers | 備份觸發器 | 完整邏輯備份 | |
--events | 備份事件調度器 | 完整邏輯備份 |
CREATE DATABASE zxl;
USE zxl;
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `users` VALUES
(1,'小明'),(2,'小虎'),(3,'小花'),(4,'小花'),(5,'小花'),(6,'小虎');
mysqldump -uroot -p123456 \
--databases zxl \
--single-transaction \
--flush-logs \
--master-data=2 \
--routines --triggers --events \
> /tmp/zxl_users.sql
⚠️ 密碼安全:MySQL 5.6+ 命令行密碼報 Warning,生產建議使用 --defaults-extra-file 或 mysql_config_editor。
head -30 /tmp/zxl_users.sql
-- 關鍵輸出:
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000060', MASTER_LOG_POS=120;
記錄:File=master-bin.000060, Pos=120 — 此為全量備份完成時刻的二進制日志坐標。
INSERT INTO `users` VALUES (7,'bob'),(8,'tom'),(9,'lili');
-- 當前表共 9 行
DROP DATABASE zxl;
mysqlbinlog /usr/local/mysql/data/master-bin.000060 | grep -A5 -B5 "drop database zxl"
# 輸出示例:
# at 778
# 160120 14:25:42 server id 1 ... DROP DATABASE zxl
誤刪操作位於 Pos=778。
mysqlbinlog \
--start-position=120 \
--stop-position=778 \
/usr/local/mysql/data/master-bin.000060 \
> /tmp/big_log.sql
此文件包含:建庫建表、初始 6 條數據、後續 3 條插入 — 完整增量。
mysql -uroot -p < /tmp/zxl_users.sql
# 或進入客戶端
mysql -uroot -p
mysql> SET SESSION sql_log_bin=0; -- 關閉二進制日志,避免主從重複執行
mysql> SOURCE /tmp/zxl_users.sql;
驗證:表 users 僅 6 行(初始數據)。
mysql -uroot -p < /tmp/big_log.sql
# 驗證
SELECT * FROM zxl.users;
-- 9 行數據全部恢復:含 bob/tom/lili
mysql> SET SESSION sql_log_bin=1;
利用 InnoDB MVCC,啟動 `REPEATABLE READ` 事務,獲取一致性快照。僅適用於 InnoDB 表;MyISAM/MEMORY 仍會阻塞。
flush-logs:滾動生成新 binlog 文件,確保備份起點清晰master-data=2:輸出註釋形式的 `CHANGE MASTER`,含精確 File/Pos# my.cnf 臨時調整
[mysqld]
skip-networking # 禁止外部連接,專心恢复
innodb_flush_log_at_trx_commit=2 # 恢复期間犧牲持久性換速度
sync_binlog=0
mydumper/xtrabackup(物理熱備),速度提升 5-10 倍mysqldump | gpg --encrypt 或 xtrabackup --encrypt,滿足合規要求mysqldump --single-transaction --flush-logs --master-data=2 + mysqlbinlog --start/stop-position 構成了 MySQL 邏輯備份增量恢復的經典閉環。掌握 POS 節點定位、sql_log_bin 控制、恢復驗證全流程,是 DBA 從「會備份」進化到「敢恢復、能恢復、快恢復」的核心標誌。