关于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