canal版本使用的master mysql5.6 canal adapter无法接收到ddl更新表结构数据,dml数据能接收到。
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(), 11111), "example", "canal", "canal"); ddl数据也无法获取
原提问者GitHub用户atjiucheng
adapter不会对ddl做处理,rdb配置为mirrorDB: true 可以同步库表,其它情况都需要手动修改映射配置
原回答者GitHub用户rewerma
如果Canal Adapter无法接收到DDL更新表结构数据,可能是因为以下原因:
Canal Connector订阅表结构变化的权限不足。在Canal的配置文件中,需要设置Canal Connector订阅表结构变化的权限,例如:
canal.instance.filter.regex = ... canal.instance.filter.table.regex = .*.test_table 其中,canal.instance.filter.regex指定了需要监控的数据库,canal.instance.filter.table.regex指定了需要监控的表,.*代表匹配所有表。如果没有正确地设置Canal Connector的订阅权限,就无法接收到DDL更新表结构数据。
Canal Server没有正确地解析DDL更新表结构数据。需要确保Canal Server的版本与MySQL数据库的版本兼容,并且Canal Server的配置文件中设置了正确的解析规则。
Canal Adapter没有正确地处理DDL更新表结构数据。需要确保Canal Adapter的版本与Canal Server的版本兼容,并且在Canal Adapter的配置文件中设置了正确的处理规则。
在排除以上原因后,您可以尝试使用Canal命令行工具直接订阅Canal Server,并手动执行DDL更新表结构语句,观察是否能够正确地接收到DDL更新表结构数据。例如,可以使用以下命令:
./bin/canal.sh subscribe -h localhost -p 11111 -u canal -P canal -c example -f ".*.test_table" 其中,-h指定Canal Server的地址,-p指定Canal Server的端口,-u指定Canal Server的用户名,-P指定Canal Server的密码,-c指定Canal Server的实例名,-f指定需要监控的表。执行该命令后,手动执行一条DDL更新表结构的语句,观察是否能够正确地接收到DDL更新表结构数据。如果能够接收到,就说明问题出在Canal Adapter中;如果无法接收到,就需要进一步排查Canal Server和Canal Connector的配置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。