一、相關變數檢視
是否開啟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...