Canal报错总结(三)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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里使用了``将表名括起来,导致未识别,如下所示

解决: 将``去掉即可


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
canal SQL 关系型数据库
|
canal 关系型数据库 MySQL
Canal服务搭建
Canal服务搭建
1026 1
Canal服务搭建
|
canal 关系型数据库 MySQL
canal 组件介绍(1)
前言     首先,这个文章系列主要是讲canal的,毫无疑问,对吧。那么在开始阅读这个系列之前,我希望真正有兴趣的同学一定要先去阅读canal的官方文档,没有什么比这个更权威了。
2302 0
|
15天前
|
canal SQL 关系型数据库
Canal入门
Canal入门
57 1
|
8月前
|
canal druid 关系型数据库
Canal报错总结(二)
Canal报错总结(二)
|
10月前
|
canal 消息中间件 关系型数据库
canal同步binlog实战
canal同步binlog实战
|
11月前
|
canal 关系型数据库 MySQL
Canal
Canal是一个用于MySQL数据增量订阅和消费的开源组件,支持多种数据订阅方式,包括基于GTID位点的订阅。
824 0
|
canal Java 中间件
总结 canal 使用过程中的几个问题,值得思考一下
在给 canal 分配数据库权限的过程中,由于密码设置的比较简单,会报以下错误 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
179 0
|
canal 关系型数据库 MySQL
9.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装
canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装
9.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装
|
canal SQL 关系型数据库
10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用