python Adopter是基于Canal写的python版本,主要开发的功能如下:
- 第一阶段:利用TCP和KAFKA做单表同步,且字段可以完全自我控制,只需要调整config文件下的mapConfig.json,设置是甚至字段默认值。
- 第二阶段:数据全量迁移,搭配增量可以做数据迁移。
- 第三阶段:做数据修复,用两个一个是基于kettle的比对修复和利用binlog重复消费的修复。
- 前三个阶段都一定是做完的。第四阶段的话会根据用户量选择完成,数据库统一检查方案,返回报告,帮助DBA去DEBUG数据库查询慢或者插入更新慢的问题。
目前已经在五六个项目上测试过了,如果有任何问题都会及时修改,不然我要死嘞。三个阶段都完成了。但针对二三阶段还没有形成文档。后续会补上
另外如果你有任何关于数据迁移方面的问题,都可以留言,我会尽快回复。
在pythonAdopter目录下执行以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirement.txt
linux pip替换成pip3
- 数据融合:python mainDataFusion.py。
- binlog数据修复:python mainDataRepair_binlog。
- 多任务数据融合:python mutliLineDataFusion.py。
优势在于:
-
无论是kafka模式还是TCP模式mysql的cursor和ACK位置和KAFKA坐标都是绝对绑定,即如果数据没有成功消费 一定不会告诉canal数据已经成功消费了,尽可能的在消费端保证数据不要出现数据丢失的情况
-
可以配置固定值,即如果目标表比源表字段多,你想要加入一个在本次数据传输中的固定值(不要问为什么有这个需求,因为 我遇到了)
-
如果你想要自定义自己的update insert和delete语句完全支持,你可以直接传入函参。
-
基于binlog的修复方案。你只需要给我一个binlog的timestamp或者position就可以让特定的目标数据库或是目标表重演这一部分操作,且也支持replace操作
- 目前kettle的自动生成数据修复方案已经完成大部分了,但现在先不放出来了。
- tableGroup ->定义哪些表需要检测
- findDiffernt(originHost="220.179.5.197",originPort=8689,originUser="root",originPassword="Zkxbx@2011",originDatabase="xex_plus", tableName=i,targetHost="220.179.5.197",targetPort=8689,targetUser="root",targetPassword="Zkxbx@2011",targetDatabase="civil_admin_aq") 定义源库和目标库的连接方式
-
targetHost="220.179.5.197", //目标库连接方式 targetPort=8689,//目标库port targetUser="root",//目标库账号 targetPassword="Zkxbx@2011", //目标库密码 targetDatabase="civil_admin_aq",//目标库名称 originHost="220.179.5.197", //源库链接方式 originPort=3306, //源库port originUser="root", //源库User originPassword="Zkxbx@2011", //源库密码 originDatabase="xex_plus", //源库名称 tables=["government_buys_services_apply"] //需要用到的表 </li>