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