龙空技术网

实时数仓之Maxwell读取MySQL binlog日志

若泽大数据 231

前言:

现时我们对“mysql新增字段 会有binlog日志吗”大致比较着重,兄弟们都需要学习一些“mysql新增字段 会有binlog日志吗”的相关资讯。那么小编在网络上汇集了一些有关“mysql新增字段 会有binlog日志吗””的相关文章,希望兄弟们能喜欢,你们快快来学习一下吧!

下载maxwell解压maxwell修改MySQL的配置文件my.cnf

PS:binlogformat必须设为ROW模式,如果设为其他模式,比如binlogformat = STATEMENT,启动maxwell时会报错
启动MySQL创建maxwell的数据库和用户在MySQL中创建一个测试数据库和表启动maxwell进程,首先使用stdout模式测试一下向测试表中insert一条数据查看maxwell控制台再insert一条数据,查看下binlog日志内容

首先使用show binlog events的方式查看

从解析的binlog中可以看出row模式下,DML操作会记录为:TABLEMAPEVENT+ROWLOGEVENT(包括WRITEROWSEVENT ,UPDATEROWSEVENT,DELETEROWSEVENT).

为什么一个update在ROW模式下需要分解成两个event: 一个Tablemap,一个Updaterows。我们想象一下,一个update如果更新了10000条数据,那么对应的表结构信息是否需要记录10000次?其实是对同一个表的操作,所以这里binlog只是记录了一个Tablemap用于记录表结构相关信息,而后面的Updaterows记录了更新数据的行信息,注意此表中的table_id是会变化的。

然后使用/usr/local/mysql/bin目录下的mysqlbinlog工具解析binlog日志

完全看不懂,这时需要添加参数(--base64-output=decode-rows -v)对输出结果解码

可以看到Mysql每次列的修改(update)都需要记录表中所有列的值。这样就存在一个问题,如果表中包含很多的大字段,表的单行长度就会非常长,这样每次update就会导致大量的 binlog空间生成。针对这个问题,在mysql 5.6中进行了改进,复制支持”row image control” ,只记录修改的列而不是行中所有的列,这对一些包含 BLOGs 字段的数据来说可以节省很大的处理能力,因此此项改进不仅节省了磁盘空间,同时也提升了性能。

当数据库的binlog format 是statement 模式时,查看下binlog日志

标签: #mysql新增字段 会有binlog日志吗