关于MySQL-binlog 追查操作数据库IP的过程

关于MySQL-binlog 追查操作数据库IP的过程

思路

​ 找到binlog中大致时间段的日志段,可视化模式解析日志后查询关键字,拿到thread-id,去processlist查询该线程的连接IP(当然,需要该IP连接保持存活状态)

一、查询MySQL binlog目录

1.首先,看看binlog是否开启。

show variables like 'log_bin';

如果结果是“ON”,则是开启状态,然后继续下面操作。

2.查询binlog存储位置,一般来说,my.cnf(默认在/etc/my.cnf)或my.ini文件中配置了binlog的目录地址。如果没有,可以在/var/lib/mysql 里找找,如果是宝塔配置的数据库,默认的binlog目录在/www/server/data/。

3.找到binlog后,用以下命令解析二进制文件为可读文件到某一目录下的sql文件。

root@root:/www/server/mysql/bin/mysqlbinlog --no-defaults --database=xxx  --base64-output=decode-rows -v --start-datetime='2022-01-24 13:10:00' --stop-datetime='2022-01-24 23:50:00'  /www/server/data/mysql-bin.000020>/www/binlog20220124131000-20220124230001.sql

4.找到关键字对应的地方,拿到thread-id:1311175。

#220124 13:50:09 server id 1  end_log_pos 208617021 CRC32 0x73007804 	Query	thread_id=1311175	exec_time=0	error_code=0
SET TIMESTAMP=1643003409/*!*/;
BEGIN
/*!*/;
# at 208617021
#220124 13:50:09 server id 1  end_log_pos 208617128 CRC32 0xf43e7a1d 	Table_map: `xxx`.`pkt_campaign` mapped to number 30329
# at 208617128
#220124 13:50:09 server id 1  end_log_pos 208617475 CRC32 0x09bb8981 	Update_rows: table id 30329 flags: STMT_END_F
### UPDATE `jtgj`.`pkt_campaign`
### WHERE
###   @1=3
###   @2='这是一个好活动'
###   @3=198056653885441
###   @4='elt'
###   @5=''
###   @6='hasEnded'
###   @7=''
###   @8=1642642655
###   @9=1644456707
###   @10='97'
###   @11='86,22'
###   @12='{"allUsers":1,"memberGrade":["vip"]}'
###   @13='totalBudget'
###   @14=999
###   @15='eachCouponOnce'
###   @16=0
###   @17=0
###   @18=1642995537
###   @19=946656000
###   @20=946656000

5.拿到线程ID后,去processlist查询该线程对应的信息。

select * from  information_schema.processlist where Id=1311175
posted @ 2022-01-24 18:14  mcbbss  阅读(2394)  评论(0编辑  收藏  举报