mysql的binlog日志是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录。主要用于数据库的主从复制以及增量恢复。
mysqlbinlog是mysql自带的binlog解析工具,可以将mysql的binlog日志转换成Mysql语句,默认情况下binlog日志是二进制文件,无法直接查看。
mysqlbinlog提供的参数支持两种维度解析binglog日志:
1)--start-position--stop-position 按照指定位置精确解析binlog日志,如不提供--stop-positiion参数则一直解析binlog日志结尾
2)--start-datetime--stop-datetime 按照指定时间解析binlog日志,如不提供--stop-datetime则一直解析到binlog日志结尾
mysqlbinlog虽然是mysql官方提供的日志解析工具,但是在实际使用中发现存在以下缺点:
1)对于启用了gtid模式的日志,不支持基于gtid范围的日志解析
2)工具提供的基于position的解析,只能指定binlog文件里面存在的精确的position值进行解析。而binlog文件中position的值是不连续的,所以要想使用基于position的解析,必须首先查看日志文件,并找到想要解析的日志段前后的具体postion值。对于一个比较大的日志文件,打开并查找想要解析的日志段前后的position值,是非常不方便的。
3)工具虽然对日志文件进行了解析,但是解析结果仍然是不易读的,并且包含很多无用信息,没有提供一个简单直观的数据库变动记录。
针对上面提到的mysqlbinlog工具存在的缺点,编写了一个新的日志解析工具binloParser,该工具使用shell编写,对原有的mysqlbinlog工具进行的封装优化,方便大家使用。该工具的使用方法和mysqlbinlog的使用方法类似,具体如下:
binlogParser.sh [options] binlogfile
options:
--database=name #指定数据库
--start-datetime="2016-01-01 12:00:00" #读取从该时间开始的日志
--stop-datetime="2016-01-02 12:00:00" #读取到该时间截止的日志
--start-position=1 #读取从该位置开始的日志
--stop-position=100 #读取到该位置截止的日志
--start-gtid=1 #读取从该gtid开始的日志
--stop-gtid=100 #读取到该gtid截止的日志
友情提示:使用时只能选择基于时间、位置、gtid中的一组参数。