首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 利用 Binlog 還原 MySQL 資料庫完整實戰:從誤操作到數據零損失恢復

     編輯:MySQL 資料庫相關知識

Binlog 核心價值

  • 記錄所有 DML(增刪改)操作及執行時間
  • 支援主從同步與時間點恢復(PITR)
  • 使用 mysqlbinlog 解析二進制日誌

開啟 Binlog

# /etc/my.cnf [mysqld]
log-bin = mysql-bin
# 重啟服務生效
service mysqld restart

# 驗證
SHOW BINARY LOGS;

mysqlbinlog 關鍵選項

選項用途範例值
--start-datetime起始時間點"2016-08-09 05:05:27"
--stop-datetime結束時間點"2016-08-09 05:30:00"
--start-position起始 Position2698
--stop-position結束 Position2795

實戰演練:模擬誤 UPDATE + DROP TABLE 後恢復

1. 建立測試資料並完整備份

CREATE DATABASE Test_DB;
USE Test_DB;
CREATE TABLE OneTb(id INT, name VARCHAR(20), age INT);
INSERT INTO OneTb VALUES (1,'user1',18),(2,'user2',19),(3,'user3',20);

# 完整備份
mysqldump -uroot -p Test_DB > /data/mysqlbackup/Test_DB_0809-1650.sql

2. 發生誤操作

UPDATE OneTb SET age = 15;           -- 全表年齡改錯
UPDATE OneTb SET name = 'user10';    -- 全表姓名改錯
DROP TABLE OneTb;                    -- 直接刪表

3. 利用 Binlog 精準恢復

檢視最新 binlog 找到誤操作前的 Position:

mysqlbinlog /var/lib/mysql/mysql-bin.000001
# 找到 INSERT 正常資料後的 position = 2698
# 之後才是 UPDATE name='user10' (pos 2795) 和 DROP TABLE

導出誤操作前的 SQL:

mysqlbinlog --stop-position=2698 /var/lib/mysql/mysql-bin.000001 > /data/recovery/Backup_1.sql

4. 執行恢復

# 刪除殘留庫(binlog 含 CREATE DATABASE)
mysql -uroot -p -e "DROP DATABASE Test_DB;"

# 匯入恢復 SQL
mysql -uroot -p < /data/recovery/Backup_1.sql

5. 驗證結果

SELECT * FROM Test_DB.OneTb;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
| 1  | user1 | 18   |
| 2  | user2 | 19   |
| 3  | user3 | 20   |
| 4  | user4 | 21   |
| 5  | user5 | 22   |
| 6  | user6 | 23   |
+----+-------+------+

數據完整恢復,零損失。

三種恢復策略對照

策略適用場景優點缺點
完整備份 + Binlog 增量生產環境標準恢復精確、資料零損失需維護 binlog 完整性
純 Binlog 重放開啟 binlog 後的全新庫無需額外備份binlog 過大重放慢
單純 mysqldump 恢復允許丟失備份後資料最簡單快速資料倒退

官方建議備份原則

  1. 安裝即開啟 log-bin,確保儲存介質安全
  2. 定期(每日/每週)完整 mysqldump 備份
  3. 定期 FLUSH LOGS 切割 binlog,便於增量備份與管理

生產環境注意事項

  • 恢復期間禁止業務寫入(關閉應用或設唯讀)
  • 主從架構下先停止從庫同步
  • 大庫恢復建議先在測試環境演練,驗證 Position 精準度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved