MySQL 二進制日誌是時間點恢復的核心。本文系統講解 Binlog 啟用配置、日誌查看導出、按位置/時間恢復、腳本文件恢復、常用管理命令,構建完整的誤操作數據找回體系。
[mysqld]
log-bin = E:/logs/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
server-id = 1
重啟服務:
net stop mysql
net start mysql
驗證:SHOW VARIABLES LIKE 'log_bin'; → ON
mysqlbinlog E:/logs/mysql-bin.000001
# 單文件導出
mysqlbinlog E:/logs/mysql-bin.000001 > E:/logs/binlog_001.txt
# 多文件合併導出
mysqlbinlog E:/logs/mysql-bin.000001 > E:/logs/all_binlog.sql
mysqlbinlog E:/logs/mysql-bin.000002 >> E:/logs/all_binlog.sql
mysqlbinlog --start-position=185 --stop-position=338 E:/logs/mysql-bin.000001 > E:/logs/segment.sql
mysqlbinlog --start-datetime="2024-01-15 10:00:00" --stop-datetime="2024-01-15 11:00:00" \
E:/logs/mysql-bin.000001 > E:/logs/by_time.sql
mysqlbinlog E:/logs/mysql-bin.000001 | mysql -u root -p
mysqlbinlog --start-position=185 --stop-position=338 E:/logs/mysql-bin.000001 | mysql -u root -p
mysqlbinlog --start-datetime="2024-01-15 10:00:00" --stop-datetime="2024-01-15 11:00:00" \
E:/logs/mysql-bin.000001 | mysql -u root -p
mysql -u root -p -e "SOURCE E:/logs/all_binlog.sql"
| 操作 | 命令 | 說明 |
|---|---|---|
| 查看所有 Binlog 文件 | SHOW BINARY LOGS; | |
| 查看當前 Binlog 事件 | SHOW BINLOG EVENTS\G | 含位置、時間、事件類型 |
| 切換新 Binlog 文件 | FLUSH LOGS; | 產生新編號文件 |
| 刪除所有 Binlog 並重新開始 | RESET MASTER; | ⚠️ 極危險,僅限測試環境 |
| 刪除指定日期前 Binlog | PURGE BINARY LOGS BEFORE '2024-01-01'; | 安全清理 |
# 快速導出邏輯備份
mysqldump -u root -p --opt --quick my_database > E:/logs/mysqldump.sql
# 還原邏輯備份
mysql -u root -p -e "SOURCE E:/logs/mysqldump.sql"
假設 Binlog 顯示誤 UPDATE 事件位置 185-338:
# 1. 恢復誤操作前的所有事件
mysqlbinlog --stop-position=185 E:/logs/mysql-bin.000001 | mysql -u root -p
# 2. 跳過誤操作,恢復後續事件
mysqlbinlog --start-position=338 E:/logs/mysql-bin.000001 | mysql -u root -p
Binlog 恢復核心三步:**啟用 ROW 格式 Binlog → 分析事件定位錯誤位置 → mysqlbinlog 精準區間恢復**。生產環境必須:配置獨立磁碟存儲 Binlog、設置合理過期時間、定期全量備份做基線、**建立恢復演練機制**。記住:**位置恢復比時間恢復精準,ROW 格式比 STATEMENT 格式安全。**