最近还在搞databus binlog同步,之前针对databus搭建安装写过一篇行云流水的文章,那时候项目刚立项,前期调研了下,没想到后期会有这么多问题出现。
今天正好在家把那databus的第一个服务部署到了公司服务器上,开始同步测试数据库数据了,终于脱离了我的本地开发环境。也算告了一个小小的段落吧(还有几个棘手问题没有解决)。
下面是我的这几天的工作回顾感悟:
1.刚上线同步binlog时候,并不是从00001开始的(我们只保留了15天)。
binlog的点位计算,修改maxScn配置 (1234为当前binlog文件位置数)
1234 * (1<< 32) + 56789 = 5299989700053 (0x4D20000DDD5)
show master status; 可以查看主库的binlog信息 show binary logs 查看binlog信息 SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] 查看具体事件信息
2. 5.6后binlog crc32问题
show global variables like 'binlog_checksum'
show global variables like 'innodb_checksums';
改为binlog_checksum=null,目前crc32问题还没解决
3. 主从报 max_allowed_packet 问题(最好保持一致)
show variables like '%max_allow%';
set global max_allowed_packet = 32*1024*1024
4. 重置binlog(慎用,可能导致主从问题)
reset master;
5. databus重启,删除位置检测点,否则之前的binlog不同步
client > databus2-checkpoints
6. 时间戳问题:
timestamp
datetime
5.7 timestamp 0000-00-00 00:00:00问题
set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
这两个时间类型同步很麻烦,并且5.6向5.7同步还存在兼容性问题。关于这事件字段的解释,之前单独发了一篇文章,感兴趣可以看看。
事情远远没有结束,工作才刚刚开始. 一个新的技术体系,从懵懂到实现再到线上稳定运行,会踩到很多坑甚至是雷, 现实要求必须把问题扼杀在前期。把代码分享给其他人review, 把思路讲给别人听, 多看看成熟的设计方案。
接下来还有很多坑需要踩..希望大家持续关注哈。