环境信息
canal version 1.1.2 mysql version 8.0.15
问题描述
发现同步数据时总是提示: Caused by: java.lang.IllegalArgumentException: Invalid charset id: 255 at com.taobao.tddl.dbsync.binlog.CharsetConversion.getEntry(CharsetConversion.java:41) at com.taobao.tddl.dbsync.binlog.CharsetConversion.getJavaCharset(CharsetConversion.java:299) at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.(QueryLogEvent.java:503) at com.taobao.tddl.dbsync.binlog.LogDecoder.decode(LogDecoder.java:168) at com.taobao.tddl.dbsync.binlog.LogDecoder.decode(LogDecoder.java:111) at com.alibaba.otter.canal.parse.inbound.mysql.MysqlMultiStageCoprocessor$SimpleParserStage.onEvent(MysqlMultiStageCoprocessor.java:264) at com.alibaba.otter.canal.parse.inbound.mysql.MysqlMultiStageCoprocessor$SimpleParserStage.onEvent(MysqlMultiStageCoprocessor.java:246) at com.lmax.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:168) at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:125) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
查看com.taobao.tddl.dbsync.binlog.CharsetConversion类下的所有charsetId 范围是1~243对应mysql数据库的Collections表 254单独配置为utf-8
我尝试修改数据库,表和字段的charset的配置为utf-8,客户端连接配置也是utf-8 但是clientCharset = buffer.getUint16();依然返回255.
代码如下: com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.unpackVariables(line:630) clientCharset = buffer.getUint16();
这是否是我的配置问题?
原提问者GitHub用户wade009
出现 "Invalid" 错误可能是因为 MySQL 和 Canal 之间的数据格式不一致导致的。可以尝试以下解决方案:
确认 MySQL 和 Canal 的版本是否匹配,如果版本不一致可能会导致数据格式不一致。
检查 MySQL 表结构是否与 Canal 配置文件中的 table_name、table_prefix、id_column 等参数匹配。
确认 MySQL 数据库是否开启了 binlog,如果没有开启则无法获取增量数据。
在 MySQL 数据库中查看是否有锁表语句,如果有则需要先解锁。
在 Canal 配置文件中设置 log.slowThreshold=10000,10000 表示记录日志的时间阈值为 10s,如果同步数据较慢可以考虑增加该参数。
如果以上方法都无法解决问题,可以尝试升级 MySQL 或 Canal 版本,或者联系相关技术支持人员进行咨询。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。