前言
bin log 相关
呵呵 记得之前是做过基于 binlog 的数据同步到的, 这里 可以来了解一下 binlog 的产生, 以及 相关更加详细的信息
说不定 之后也可以 做一个 binlog 的解析工具
这里 来看一下 各个常见的 binlog event 的相关格式
open-replicator 解析binlog失败 available: 4, event type: 19
关于mysql 的binlog相关的几个问题
测试数据表如下
CREATE TABLE `tz_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`field1` varchar(128) DEFAULT NULL,
`field2` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `field_1_2` (`field1`,`field2`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
测试数据如下
配置信息如下, 这里 binlog 格式使用的是 ROW
Query_log_event – ROW
这个是 在 master 上面的任何 更新都会记录 Query_log_event
记录 binlog 均是在操作之后记录的, 比如这里的 Query_log_event 的调用的地方是在这里
Query_log_event 写出数据如下
Query_log_event 日志格式如下
Table_map_log_event – ROW
这个是在每一个需要描述 表元数据的地方, 都需要写的 事件信息
比如这里是 写出了 Query_log_event 之后, 继续写出 Table_map_log_event
写出的方式如下, 四大主体
Table_map_log_event 日志格式如下
Update_rows_log_event – ROW
执行 sql 如下
“begin;
update tz_test set field1 = 'field28' where field2 = '2';
rollback;
”
向 Update_rows_log_event 中填充 更新之前的记录信息, 和 更新之后的记录信息
具体的拷贝 数据记录信息到 Update_rows_log_event 中, 直接 复制数据的 binary 到 Update_rows_log_event 中
写出 Update_rows_log_event 的地方在这里, 主要是 更新的处理之后
写出 Update_rows_log_event 同样是 这四个步骤, 子类会重写 对应的实际写出数据的函数
Update_rows_log_event 日志格式如下
Write_rows_log_event – ROW
执行 sql 如下
“begin;
INSERT INTO `test`.`tz_test`(`field1`, `field2`) VALUES ('field11', '11');
rollback;
”
将待新增记录信息 添加到 Write_rows_log_event 中
记录 binlog 是在 sql 执行之后
Write_rows_log_event 日志格式如下
Delete_rows_log_event – ROW
执行 sql 如下
“begin;
delete from tz_test where id = 2;
rollback;
”
记录 binlog 是在 sql 执行之后
Delete_rows_log_event 日志格式如下
更新 binlog 格式为 statement
Update_rows_log_event – STATEMENT
statement binlog 记录是基于 Query_log_event 的
当前 binlog 日志输出信息如下
Write_rows_log_event – STATEMENT
同上
当前 binlog 日志输出信息如下
Delete_rows_log_event – STATEMENT
同上
当前 binlog 日志输出信息如下
完