Canal报错总结(三)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: Canal报错总结(三)

Field error in object 'target' on field 'esMapping': rejected value [];

这是配置文件问题,检查es下的配置yml文件,特别是sql语句的语法是否有问题

java.util.NoSuchElementException

没有找到对应字段导致 检查下canal配置文件中的字段是否在es mapping中有对应的,大小写是否一致,是否有遗漏 因为我的操作是mysql同步至es,所以这里说明几项容易出错的地方: 1、canal配置文件中的sql中是否大小写一致,canal是区分大小写的 2、sql中设置的别名是否与es mappings中的名称一致,允许es中的部分字段为空,但是不允许sql中查询出来的字段在es mappings中找不到对应的字段 3、canal配置文件中的dataSourceKey是否正确,其对应到canal application.yml配置文件中的数据库是否正确 application.yml 4、canal配置文件中的排版是否正确,特别注意_index,_type等属性要放在esMappings下 5、sql查询出来的字段类型与es mappings中的字段数据类型是否一致

adapter日志中没有报错,但是没有读取binlog | Could not find first log file name in binary log index file

adapter日志中没有报错信息,于是去查看deployer日志,这里的example是你配置的实例

会发现报错 解决: 1、既然问题是没有找到数据库的binglog文件位置,那么就查看一下现在的binlog文件位置,登陆mysql执行 2.1 如果你是做增量同步,那么查询当前binlog位置

修改conf/example/instance.properties文件

2.2 如果你要做全量同步,查询binlog文件

3、重启deployer和adapter

CanalParseException: parse row data failed. | column size is not match for table

deployser日志报错:

解决: 1、可以看到报错中已经给出明确提示了 2、该错误官方中有解释 官方文档 TableMetaTSDB 在instance.properties中设置

3、一般将这个开启就解决了,但是我这里即时将其开启还是报错,查阅相关资料有说将canal.instance.tsdb.enable设置为false后重启解决的,但是我这里将其设置为false后依旧没有解决 实在没有其他办法了,查阅官方github,导致这个问题发生的原因是因为表结构发生过变化,但是binlog中读取到的与现在的表结构不一致导致。 于是直接跳过该binlog checkpoint,也就是将binlog的读取位置设置为当前的最新binlog位置 (1)查阅当前binlog最新位置,mysql中执行 (2)将读取位置该为最新,修改deployer conf/example/instance.properties

3)重启deployer , adapter (4)因为读取的是最新的binlog。为了把当前的数据同步进来,将需要同步的表或库导出,然后再导入一遍。问题解决(注意:这里的解决方案要谨慎,生产环境因为时时刻刻在产生数据,可行性很低,所以看要么设置一个停机维护来进行实操)

use gtid and TableMeta TSDB should be config timestamp > 0

在instance.properties中设置时间戳

RuntimeException: com.alibaba.fastjson.JSONException: unclosed string

该错误是因为sql中使用了group_concat函数,但是该函数默认长度是1024,超过的会被截取,导致出现了json格式的数据格式不正确,没有正确的关闭json

解决: 1、修改my.cnf,扩大group_concat_max_len 2、重启mysql

MySQLSyntaxErrorException: Unknown column '_v._id' in 'where clause'

sql中没有_id字段导致,使用as将id命名别名:select id as _id

adapter中有同步日志打印,但es中数据未同步

我这里出现这个问题是在canal1.1.6版本中,原因是es7文件夹中的.yml文件中书写的sql里使用了``将表名括起来,导致未识别,如下所示

解决: 将``去掉即可


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
canal SQL 关系型数据库
|
canal 关系型数据库 MySQL
Canal服务搭建
Canal服务搭建
1485 1
Canal服务搭建
Doris动态分区表
Doris动态分区表 Doris动态分区表传参
|
canal 关系型数据库 MySQL
使用Canal同步mysql数据到es(上)
使用Canal同步mysql数据到es
|
canal 监控 关系型数据库
Canal使用和安装总结
Canal使用和安装总结
1254 2
|
消息中间件 Kafka
Kafka生产者和消费者相关命令行操作
Kafka生产者和消费者相关命令行操作
490 1
|
canal 关系型数据库 MySQL
Canal 中启用了 GTID 功能
Canal 中启用了 GTID 功能
2436 1
|
消息中间件 容器
RabbitMQ异常重启,部分消费队列不消费问题
RabbitMQ异常重启,部分消费队列不消费问题
899 0
|
canal 关系型数据库 MySQL
Canal需要执行 `show master status` 命令来获取主库的binlog文件名和位置
Canal需要执行 `show master status` 命令来获取主库的binlog文件名和位置
903 1