binlog開啟及資料恢復

2021-10-13 21:55:34 字數 3655 閱讀 7363

一、相關變數檢視

是否開啟binlogshow variables like 'log_bin';binlog三種模式show variables like '%binlog_format%';

二、配置

配置my.conf

[mysqld]

server-id = 1

log-bin = /var/log/mysql/mysql-bin.log #設定log-bin檔案自動會開啟binlog

binlog_format = row #格式

expire-logs-days = 14 #14天內

max-binlog-size = 500m #每個binlog檔案最大值

重啟mysql

/var/log/mysql/ 資料夾下 mysql-bin.000001 日誌檔案 和 mysql-bin.index 索引檔案,binlog是二進位制檔案

三、日誌sql操作

檢視日誌檔案列表show master logs;產生新日誌檔案flush logs;清除日誌檔案reset master;

三、資料測試及備份

備份不是實時的,資料發生錯誤的恢復會有很多狀態

最新備份狀態

備份後到錯誤操作前

錯誤操作後的使用者正常操作

我們需要先恢復備份再通過binlog找回並跳過錯誤的操作

create

database test_binlog;

use test_binlog;

create

table t1 (

id int

unsigned

notnull

auto_increment

primary

key,

uname varchar(10

)not

null

default'')

;insert

into t1(uname)

values

('a');

flush logs;

insert

into t1(uname)

values

('b');

flush logs;

insert

into t1(uname)

values

('c');

flush logs;

# 此時binlog最新為mysql-bin.000004

# 備份資料庫 test_binlog,  模擬定時備份

mysqldump -uroot -p test_binlog > /tmp/backup.sql

# 備份後的資料修改

# 啊呀!沒帶條件把所有資料都改了,這是錯誤的!

update t1 set uname =

'哈哈哈'

# 使用者正常操作-刪除

delete

from t1 where id =2;

# 使用者正常操作-發現資料怎麼不讀,我自己改回去吧

五、備份恢復

1. 系統停止服務 show master status

; 得到最新日誌 mysql-bin.

000004

, position=

3099

2. 保護車禍現場,flush logs; 生成新的日誌檔案 mysql-bin.

000005 , 防止 mysql-bin.

000004 被修改

3. 登入sql,use test_binlog;

4. 恢復備份 source /tmp/

backup

.sql

;5. 我們測試只有最開始的小a。 如果是正常的話應該是大部分資料都回來了,好開心

6. 接下來就需要通過binlog恢復備份之後的資料了

檢視日誌show binlog events in 'mysql-bin.000004' ;找到回滾的語句

發現這樣並不好找,sql沒有暴露出來

提取並翻譯binlogmysqlbinlog --no-defaults --base64-output=decode-rows -v --start-datetime='2021-01-05 15:00:00' --stop-datetime='2021-01-05 15:25:00' /var/log/mysql/mysql-bin.000004 > /tmp/binlog.sql

-v執行

--start-datetime擷取開始時間

--stop-datetime擷取結束時間

檢視/tmp/binlog.sql

可以看到插入d的commit的position=570,接下來就是update 哈哈哈了。

我們按照點位恢復資料mysqlbinlog -v --stop-position=570 /var/log/mysql/mysql-bin.000004 | mysql -u root -p

此時,我們恢復的狀態是截止執行錯誤sql前的狀態,還需要執行錯誤sql之後的sql

執行mysqlbinlog -v --start-position=924 /var/log/mysql/mysql-bin.000004 | mysql -u root -p

至此,我們恢復到了相對正確的資料。因為你要不要考慮使用者為什麼刪除第二條呢? 諸如此類。

binlog恢復資料

記一次誤刪恢復資料 通過binlog日誌檔案生成時間和誤操作刪除資料的時間對比,分析出生成到哪個檔案中 兩種恢復方式 1 通過時間段 usr local mysql bin mysqlbinlog start datetime 2019 10 11 19 00 00 stop datetime 20...

binlog日誌恢復

檢視mysql是否開啟binlog 進mysql操作 mysql show variables like log bin 查詢binlog檔名 mysql show master status 進mysql操作 查mysqlbinlog工具的位置,每個人都不同自行變更 結果是mysql bin.例如...

mysql 資料恢復 通過binlog恢復資料

1 首先登入mysql 2 檢視是否開啟bin日誌 show variables like log bin 3 檢視正在被記錄的檔案 show master status 5 篩選出指定表的sql 例如表名為 address list grep address list 1sql basic.sql...