otter执行sql server 到 mysql 吗

otter执行sql server 到 mysql 吗,第1张

有一点特别注意:目前canal支持mixed,row,statement多种日志协议的解析,但配合otter进行数据库同步,目前仅支持row协议的同步,使用时需要注意.

show variables like '%binlog_format%'

SET SESSION binlog_format = 'ROW'

SET GLOBAL binlog_format = 'ROW'

#SET SESSION binlog_format = 'STATEMENT'

#SET GLOBAL binlog_format = 'STATEMENT'

#SET SESSION binlog_format = 'MIXED'

#SET GLOBAL binlog_format = 'MIXED'

环境准备

1. *** 作系统

a. otter为纯java编写,windows/linux均可支持

b. jdk建议使用1.6.25以上的版本,稳定可靠,目前阿里巴巴使用基本为此版本

2. 整个otter同步由几部分组成,需要预先进行安装,后续会有专门的篇幅展开介绍

manager

node

3. otter node依赖于zookeeper进行分布式调度,需要安装一个zookeeper节点或者集群.

重要:考虑异地机房的地域性,node机器会优先选择就近的zookeeper节点进行访问,比如国际站会在杭州和美国各部署node,针对美国的node会选择美国的zookeeper进行访问,提升读效率. ps. 不同机房的zookeeper集群组成一个物理大集群,只不过是根据地域不同划分为不同逻辑集群,所有地域的node机器对zookeeper进行写 *** 作都会发到一个地域的zookeeper进行paoxs算法仲裁.

update类型的数据无法更新到目标库,通过追踪源码,发现同步源库的binlog日志中UPDATE类型的old参数为null,导致跳出更新程序,无法更新。

仔细检查了目标库的binlog是否开启,以及binlog的格式设置,以及binlog_row_image的设置,均满足官方要求。通过换服务器安装,换目标库等等的尝试发现都无果之后,走上了修改源码的道路。这里定位问题所在为源库MySQL的未知设置问题。

修改com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService类中的update方法如下。

第一种方式对binlog中的old参数值不进行判断,直接对所有字段值进行update *** 作;

第二种方式兼容原有逻辑,如果有old参数值按照原有逻辑进行,如果没有按照上述第一种方式进行;

把双方的mysql服务都停掉,直接把导出方的数据表文件(就是和数据库表名对应的.frm.myd.myi文件)拷到导入方(注意一个表有三个文件),然后改一下数据表文件名成你要导入的表名,然后启动mysql服务

,如果导入方原来的表有数据,可以把原来的数据用正常方式导出,然后在工具里面导入合并就可以了,

再有一个可行的方法就是自写代码一行一行的转移数据了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7303418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存