赞
踩
bin log 相关
呵呵 记得之前是做过基于 binlog 的数据同步到的, 这里 可以来了解一下 binlog 的产生, 以及 相关更加详细的信息
说不定 之后也可以 做一个 binlog 的解析工具
这里 来看一下 各个常见的 binlog event 的相关格式
测试数据表如下
- 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
这个是 在 master 上面的任何 更新都会记录 Query_log_event
记录 binlog 均是在操作之后记录的, 比如这里的 Query_log_event 的调用的地方是在这里
Query_log_event 写出数据如下
Query_log_event 日志格式如下
这个是在每一个需要描述 表元数据的地方, 都需要写的 事件信息
比如这里是 写出了 Query_log_event 之后, 继续写出 Table_map_log_event
写出的方式如下, 四大主体
Table_map_log_event 日志格式如下
执行 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 日志格式如下
执行 sql 如下
“begin;
INSERT INTO `test`.`tz_test`(`field1`, `field2`) VALUES ('field11', '11');
rollback;
”
将待新增记录信息 添加到 Write_rows_log_event 中
记录 binlog 是在 sql 执行之后
Write_rows_log_event 日志格式如下
执行 sql 如下
“begin;
delete from tz_test where id = 2;
rollback;
”
记录 binlog 是在 sql 执行之后
Delete_rows_log_event 日志格式如下
statement binlog 记录是基于 Query_log_event 的
当前 binlog 日志输出信息如下
同上
当前 binlog 日志输出信息如下
同上
当前 binlog 日志输出信息如下
完
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。