开发者社区> 问答> 正文

mysql 8.0.15 和 canal 1.1.2 版本 同步数据总是error "Invalid

环境信息

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

展开
收起
古拉古拉 2023-05-08 13:33:18 131 0
2 条回答
写回答
取消 提交回答
  • 升级1.1.3版本,已经解决

    原回答者GitHub用户agapple

    2023-05-09 17:42:21
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    出现 "Invalid" 错误可能是因为 MySQL 和 Canal 之间的数据格式不一致导致的。可以尝试以下解决方案:

    确认 MySQL 和 Canal 的版本是否匹配,如果版本不一致可能会导致数据格式不一致。

    检查 MySQL 表结构是否与 Canal 配置文件中的 table_name、table_prefix、id_column 等参数匹配。

    确认 MySQL 数据库是否开启了 binlog,如果没有开启则无法获取增量数据。

    在 MySQL 数据库中查看是否有锁表语句,如果有则需要先解锁。

    在 Canal 配置文件中设置 log.slowThreshold=10000,10000 表示记录日志的时间阈值为 10s,如果同步数据较慢可以考虑增加该参数。

    如果以上方法都无法解决问题,可以尝试升级 MySQL 或 Canal 版本,或者联系相关技术支持人员进行咨询。

    2023-05-08 13:44:11
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像