mysqlbinlog解析binlog

查看是否开启binlog

-- 查看 `log_bin`的配置`ON`
SHOW variables LIKE 'log_%'  

开启binlog

修改配置文件/etc/my.cnf,在[mysqld]节点下增加配置:

-- 主从复制-主
server-id=1
log_bin=/usr/local/mysql/mysql-bin.log
binlog_do_db=biz-kkt-test
-- binlog格式设置
binlog_format=row

使用mysql命令查看binlog

-- 获取binlog文件列表
show binary logs
 
-- 当前正在写入的log文件
show master status
 
-- 查看具体的log文件,部分信息如下表所示
show binlog events in 'mysql-bin.000007' 
 
Log_namePosEvent_typeServer_idEnd_log_posInfo
mysql-bin.000005660Query1740BEGIN
mysql-bin.000005740Table_map1850table_id: 115 (biz-sh-test.sys_common_log)
mysql-bin.000005850Write_rows11252table_id: 115 flags: STMT_END_F
mysql-bin.0000051252Xid11283COMMIT /xid=2325 */
  • Log_name:日志文件名
  • Pos:事件在文件中起始位置
  • Event_type:事件类型
  • Server_id:服务id,对应my.cnf文件中的设置
  • End_log_pos:事件在文件中结束位置
  • Info:详细信息

使用mysqlbinlog工具查看binlog

# 查看binlog文件位置(示例为/usr/local/mysql)
find / -name mysqlbinlog
 
# 解析row格式加密的行记录变化,待验证
mysqlbinlog -v mysql-bin.000805
 
 
# 位置信息见show binlog events in 'mysql-bin.000007';命令
# 基于开始位置660与结束位置1283查询详细信息,并将内容写入005.sql(>及之后内容表示输出到文件)
/usr/local/mysql/bin/mysqlbinlog -v --base64-output=decode-rows --start-position=660 --stop-position=1283 /usr/local/mysql/mysql-bin.000005 >/usr/local/005.sql

mysqlbinlog常用过滤参数:

  • 时间过滤 --start-datetime="Y-m-d H:i:s"--stop-datetime="Y-m-d H:i:s":如:—start-datetime=“2021-4-20 00:00:00”
  • 位置过滤 --start-position=the_position_integer--stop-position=the_position_integer
  • 数据库过滤 --database=the_database_name, 或者 -d the_database_name
  • 偏移量 --offset=N, -o N

mysqlbinlog输出控制:

  • --base64-output=decode-rows: base64-output,可以控制输出语句输出base64编码的BINLOG语句; decode-rows:选项将把基于行的事件解码成一个SQL语句
  • --version , -V: 显示版本号并退出
  • --verbose, -v: 重新组织行事件,并以sql注释的方式显示(Reconstruct row events and display them as commented SQL statements)