Skip to content

mysqlbinlog

Posted on:March 11, 2021 at 03:59 PM

如何读取mysql的binlog?

可以使用mysql默认的mysqlbinlog

重要的是需要加v 命令

mysqlbinlog   -v  mysql-bin.000006

你会看到具体的sql了,我这里的sql是

#210311 14:51:10 server id 1  end_log_pos 1606 CRC32 0x783f56ab 	Query	thread_id=64	exec_time=0	error_code=0
SET TIMESTAMP=1615445470/*!*/;
BEGIN
/*!*/;
# at 1606
#210311 14:51:10 server id 1  end_log_pos 1672 CRC32 0x52632df5 	Table_map: `user_db`.`tb_user` mapped to number 119
# at 1672
#210311 14:51:10 server id 1  end_log_pos 1783 CRC32 0xf565f574 	Update_rows: table id 119 flags: STMT_END_F

BINLOG '
3r1JYBMBAAAAQgAAAIgGAAAAAHcAAAAAAAEAB3VzZXJfZGIAB3RiX3VzZXIABgMPDw8BDwgUAEAA
FAAyADj1LWNS
3r1JYB8BAAAAbwAAAPcGAAAAAHcAAAAAAAEAAgAG///AYAAAAAI5NgYxMjM0NTYFOTk5OTcSD3po
YW5nc2FuQGJ1Zy5jbsBgAAAAATUGMTIzNDU2BTk5OTk3Eg96aGFuZ3NhbkBidWcuY2509WX1
'/*!*/;
### UPDATE `user_db`.`tb_user`
### WHERE
###   @1=96
###   @2='96'
###   @3='123456'
###   @4='99997'
###   @5=18
###   @6='zhangsan@bug.cn'
### SET
###   @1=96
###   @2='5'
###   @3='123456'
###   @4='99997'
###   @5=18
###   @6='zhangsan@bug.cn'
# at 1783
#210311 14:51:10 server id 1  end_log_pos 1814 CRC32 0xa90279ec 	Xid = 1794
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

协议流程

COM_BINLOG_DUMP -> com_binlog_dump

相关阅读

https://www.cnblogs.com/netsa/p/7350629.html https://dev.mysql.com/doc/internals/en/replication-protocol.html