本文为学习 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
update t set a = 9 where id < 4;
首先查看自己 binlog 日志记录类型
show variables like 'binlog_format';
ROW 类型会记录执行 sql 的具体数据信息(方便对数据库数据进行恢复)
使用以下命令可以查看最新的 binlog 文件信息(获取 binlog 的文件名称)
show master status;
查看 binlog 日志内容
show binlog events in 'LAPTOP-4JD0NCM3-bin.000065';
由于我们的 binlog 日志类型为 ROW,event_type 类型中
如果我们想看到详细的数据新需要借助 mysqlbinlog 工具
查看 binlog 详细信息。
mysqlbinlog -vv LAPTOP-4JD0NCM3-bin.000065 --start-position=2985
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 资源。
评论