二进制日志和主从复制中从库的中继日志,都是以二进制的格式记录了数据库内容变更事件(insert, delete, update等)。二进制是给计算机读取的,而人类可读的是文本文件,此时我们可以借助mysqlbinlog工具查看日志的内容。
2、使用mysqlbinlog是MySQL官方软件,故而在安装MySQL服务器的时候默认自带了。
格式
mysqlbinlog [options] log_file
选项
| 选项 | 说明 |
|---|---|
| –base64-output | 使用base64算法处理并输出结果 |
| –bind-address | 指定网口连接MySQL服务器 |
| –binlog-row-event-max-size | 日志内最大事件大小 |
| –character-sets-dir | 字符集安装的目录 |
| –database | 指定仅仅处理该数据库的事件 |
| –include-gtids | 只展示指定的GTID下的组 |
| –no-defaults | 读取无选项的日志文件,my.cnf中添加default-character-set=utf8mb4,加此选项直接读才不会报错 |
| –offset | 指定读取的偏移位置 |
| –result-file | 输出结果指定到对应的文件 |
| –server-id | 指定仅仅处理该server id的事件 |
| –set-charset | 对输出内容设置字符集,会加上set names xxx字符集 |
| –skip-gtids | 忽略GTIDs |
| –start-datetime | 指定事件执行的起始时间,格式如:2021-10-24 11:00:00 |
| -stop-datetime | 指定事件执行的结束时间,格式如:2021-10-31 23:59:59 |
| –start-position | 指定起始的位置 |
| –stop-position | 指定结束的位置 |
| –verbose | 将行事件重构为SQL语句 |
| –idempotent | 使用幂等性,可以抑制duplicate-key的错误,仅仅作用域当前的mysqlbinlog会话 |
mysqlbinlog --no-defaults --base64-output=decode-rows -v --database=mall --start-datetime='2021-10-24 11:00:00' --stop-datetime='2021-10-24 23:59:59' /var/log/mysql/mysql-bin.0000023.2 以十六进制查看
# 执行命令 mysqlbinlog --hexdump mysql-bin.000001 # 结果 ; ; DELIMITER ; # at 4 #211018 12:41:50 server id 1 end_log_pos 123 CRC32 0xe6d14c62 # Position Timestamp Type Master ID Size Master Pos Flags # 4 8e 6b 6d 61 0f 01 00 00 00 77 00 00 00 7b 00 00 00 00 00 # 17 04 00 35 2e 37 2e 33 35 2d 6c 6f 67 00 00 00 00 |..5.7.35.log....| # 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| # 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| # 47 00 00 00 00 8e 6b 6d 61 13 38 0d 00 08 00 12 00 |.....kma.8......| # 57 04 04 04 04 12 00 00 5f 00 04 1a 08 00 00 00 08 |................| # 67 08 08 02 00 00 00 0a 0a 0a 2a 2a 00 12 34 00 01 |.............4..| # 77 62 4c d1 e6 |bL..| # Start: binlog v 4, server v 5.7.35-log created 211018 12:41:50 at startup ROLLBACK; '; # at 123 #211018 12:41:50 server id 1 end_log_pos 154 CRC32 0x5cf0cacd
结果字段说明:
- Position:日志文件中的字节位置
- Timestamp:事件发生的时间戳,需要十六进制转时间戳
- Type:事件类型
- Master ID:事件的server id
- Size:事件的大小
- Master Pos:下一个事件的位置
- Flags:事件标志值
本篇文章介绍了mysqlbinlog工具的常用选项,方便后期分析展示各种格式的binlog和redo log。



