Bootstrap

mysql binlog日志信息查看

本文为学习binlog日志信息查看的个人操作流程。

mysql环境为本地。

mysql版本 8.0.21

表结构

CREATE TABLE `t` (
  `id` int NOT NULL,
  `a` int DEFAULT NULL,
  `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `a` (`a`),
  KEY `t_modified` (`t_modified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

测试数据信息

insert into t values(1,1,'2018-11-13');
insert into t values(2,2,'2018-11-12');
insert into t values(3,3,'2018-11-11');
insert into t values(4,4,'2018-11-10');
insert into t values(5,5,'2018-11-09');

最后执行sql

ROW类型会记录执行sql的具体数据信息(方便对数据库数据进行恢复)

由于我们的binlog日志类型为ROW,event_type 类型中

  • table_map 用于说明接下来需要操作的表

  • delete_rows 用于说明操作类型为删除数据

  • update_rows 用于说明操作类型为更新数据

如果我们想看到详细的数据新需要借助mysqlbinlog工具

ps: 执行命令前需要设置mysqlbinlog环境变量和确认日志文件位置。

使用 -vv可以解析出各个字段的值(比如@1=1,@2=1,@3=1542038400)

--start-postion=2985 是从pos=2985位置开始查询

C:\ProgramData\MySQL\MySQL Server 8.0\Data>mysqlbinlog -vv LAPTOP-4JD0NCM3-bin.000065 --start-position=2985
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 156
#211014  0:19:11 server id 1  end_log_pos 125 CRC32 0x6a473648  Start: binlog v 4, server v 8.0.21 created 211014  0:19:11 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
/wZnYQ8BAAAAeQAAAH0AAAABAAQAOC4wLjIxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD/BmdhEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBSDZHag==
'/*!*/;
# at 2985
#211019 11:17:20 server id 1  end_log_pos 3035 CRC32 0xc11fd154         Table_map: `test`.`t` mapped to number 104
# at 3035
#211019 11:17:20 server id 1  end_log_pos 3149 CRC32 0x6a42ea93         Update_rows: table id 104 flags: STMT_END_F

BINLOG '
wDhuYRMBAAAAMgAAANsLAAAAAGgAAAAAAAEABHRlc3QAAXQAAwMDEQEAAgEBAFTRH8E=
wDhuYR8BAAAAcgAAAE0MAAAAAGgAAAAAAAEAAgAD//8AAQAAAAEAAABb6aOAAAEAAAAJAAAAW+mj
gAACAAAAAgAAAFvoUgAAAgAAAAkAAABb6FIAAAMAAAADAAAAW+cAgAADAAAACQAAAFvnAICT6kJq
'/*!*/;
### UPDATE `test`.`t`
### WHERE
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2=1 /* INT meta=0 nullable=1 is_null=0 */
###   @3=1542038400 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2=9 /* INT meta=0 nullable=1 is_null=0 */
###   @3=1542038400 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### UPDATE `test`.`t`
### WHERE
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2=2 /* INT meta=0 nullable=1 is_null=0 */
###   @3=1541952000 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2=9 /* INT meta=0 nullable=1 is_null=0 */
###   @3=1541952000 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### UPDATE `test`.`t`
### WHERE
###   @1=3 /* INT meta=0 nullable=0 is_null=0 */
###   @2=3 /* INT meta=0 nullable=1 is_null=0 */
###   @3=1541865600 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
###   @1=3 /* INT meta=0 nullable=0 is_null=0 */
###   @2=9 /* INT meta=0 nullable=1 is_null=0 */
###   @3=1541865600 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
# at 3149
#211019 11:17:20 server id 1  end_log_pos 3180 CRC32 0xcdf03b71         Xid = 359
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*/;

ROW优缺点

优点:不会有主备数据不一致问题,最重要的是恢复数据方便。

缺点:占用空间(需要把每条数据修改记录),写入binlog时耗费IO资源。