解析binlog查看,先看下统计中,这个删除在不在这个binlog中,确认确实是在这个binlog日志中
=====================根据binlog统计ddl dml
mysqlbinlog --no-defaults --base64-output=decode-rows -v -v relay.000010 | awk ‘/###/{if($0~/UPDATE|INSERT|DELETE/)count[NF]++}END{for(i in count)print i,"\t",count[i]}’|column -t|sort -k3nr
mysqlbinlog --no-defaults --base64-output=decode-rows -v -v binlog.000007 --start-datetime=“2022-08-29 18:50:00” --stop-datetime=“2022-08-29 19:07:00”
======================也可以根据这个解析出sql来确认出具体pos位置
[root@VM-0-9-centos binlog]# mysqlbinlog --start-position=1709 --stop-position=1740 -v mysql-bin.000013
mysqlbinlog -v mysql-bin.000013 > /tmp/sql
=====================将delete_row event 改成write_row event (回滚)
mysqlbinlog --base64-output=DECODE-ROWS -vv mysql-bin.000013 | sed -n ‘/###/p’ | sed ‘s/### //g;s//*./,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;’ |sed -r 's/(@17.),/\1;/g’ | sed ‘s/@[1-9]=//g’ | sed ‘s/@[1-1][0-7]=//g’
#mysqlbinlog --no-defaults --base64-output=decode-rows -v -v binlog.000487 --start-datetime=“2022-08-29 18:50:00” --stop-datetime=“2022-08-29 19:07:00” | awk ‘/###/{if($0~/UPDATE|INSERT|DELETE/)count[NF]++}END{for(i in count)print i,"\t",count[i]}’|column -t|sort -k3nr
UPDATE gorm.t_dev_list 79
INSERT gorm.t_online_log 40
INSERT dash.frpslog 10
UPDATE dash.frps 10
查看位置:select @@log_bin_basename;
查看是否开启:select @@log_bin;
二进制内置查看命令:
查看当前有几个日志文件,一般mysql只用最新的日志文件:show binary logs;
查看当前在用的日志文件:show master status;
手动触发滚动日志:flush logs;
查看事件内容:show binlog events in ‘myql-bin.000002’; (当前在用的),使用频率较高
配合linux命令行使用:
mysql -uroot -p123456 -e “show binlog events in ‘mysql-bin.000002’” |grep DROP
还可以对其进行进一步过滤,比如:
grep -B0 -A27 -w ‘DELETE FROM kdb.t_diag_reportinfo’ mydiag.sql >diagreportinfo.sql
B即before,A即after,意思是取目标行前后多少行
临时关闭binlog记录:
set sql_log_bin=0;
source /tmp/bin.sql
set sql_log_bin=1;




