1、用途
二进制日志和主从复制中从库的中继日志,都是以二进制的格式记录了数据库内容变更事件(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会话 |
3、实践
3.1 查看以base64解码和限制时间的方式查看
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.000002
3.2 以十六进制查看
# 执行命令
mysqlbinlog --hexdump mysql-bin.000001
# 结果
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
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:事件标志值
4、总结
本篇文章介绍了mysqlbinlog工具的常用选项,方便后期分析展示各种格式的binlog和redo log。