总结 canal 使用过程中的几个问题,值得思考一下

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在给 canal 分配数据库权限的过程中,由于密码设置的比较简单,会报以下错误ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后,顿时产生了浓厚的兴趣。本着好记性不如烂笔头的原则,阿Q对 Canal 的原理进行了梳理、对环境进行了搭建,具体步骤见这篇文章:原理+配置+实战,Canal一套带走
今天我们抛开 canal 的原理和代码不谈,总结几个在使用过程中遇到的问题,当然,解决方案也一并呈上。
问题一
在给 canal 分配数据库权限的过程中,由于密码设置的比较简单,会报以下错误
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
复制代码
这是由 MySQL 的密码规范决定的,建议设置的密码要包含大小写字母、数字和特殊字符,具体的规范大家可以自行百度😃。
问题二
在通过命令./bin/startup.sh 启动 canal 服务后,发现在 logs 下没有生成 canal.log 日志,在进程命令中 ps -ef | grep canal 也查不到 canal 的进程。
通过查看目录 logs 下的文件 canal_stdout.log,发现了问题所在

报错信息提示内存不足,Java 运行时环境无法继续。更详细的错误日志在文件:/usr/local/bin/hs_err_pid25186.log 中。
既然是内存原因,那就检查一下自己的内存,执行命令free -h ,发现可用内存仅为 96M,应该是内存问题,解决方法如下:

杀死运行的一些进程;
增加虚拟机的内存;
修改 canal 启动时所需要的内存;

我就是用的第三种方法,首先用 vim 打开 startup.sh 修改内存参数,可以对照我的进行修改,按照自己服务器剩余内存进行修改,这里我将内存调整到了 80M。

改为 -server -Xms80m -Xmx80m -Xmn80m -XX:SurvivorRatio=2 -XX:PermSize=66m -XX:MaxPermSize=80m -Xss256k -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError
改完之后执行命令发现依旧报错:found canal.pid , Please run stop.sh first ,then startup.sh 意思是找到了 canal.pid,请先运行stop.sh

这是由于 canal 服务不正常退出服务导致的,比如说虚拟机强制重启。

执行 stop.sh 命令后重新启动,成功运行,成功运行后可以在 canal/logs 文件夹中生成 canal.log 日志。

问题三
在 canal 服务启动之后,想通过编写代码的方式来测试数据库变更之后触发 canal 输出数据的过程。结果无论怎样修改,控制台就是没有日志打出。
通过查看 canal /usr/local/logs/example下的 example.log 文件才发现问题所在

原因就是meta.dat中保存的位点信息和数据库的位点信息不一致导致 canal 抓取不到数据库的动作。
于是我找到 canal 的 conf/example/instance.properties 实例配置文件,发现没有将canal.instance.master.address=127.0.0.1:3306 设置成自己的数据库地址。
解决方案

先停止 canal 服务的运行;
删除meta.dat文件;
再重启canal,问题解决;

今天的内容到这里就结束了,希望对大家有所帮助,我们下期再见。跪求一键三连,期望靓仔在评论区打出“老铁666”,鼓励一下阿Q。
好看的皮囊千篇一律,有趣的灵魂万里挑一,让我们在冷漠的城市里相互温暖,我是阿Q,我们下期再见!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
12月前
|
canal SQL 关系型数据库
Canal报错总结(三)
Canal报错总结(三)
|
12月前
|
canal SQL 关系型数据库
|
4月前
|
canal 关系型数据库 MySQL
Canal数据同步工具
Canal数据同步工具
124 2
|
12月前
|
canal druid 关系型数据库
Canal报错总结(二)
Canal报错总结(二)
|
12月前
|
canal 消息中间件 关系型数据库
大数据同步工具Canal 1
大数据同步工具Canal
453 0
|
12月前
|
canal SQL 关系型数据库
大数据同步工具Canal 2
大数据同步工具Canal
324 0
|
canal 消息中间件 关系型数据库
canal同步binlog实战
canal同步binlog实战
|
canal 消息中间件 关系型数据库
使用阿里的增量日志解析工具canal
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
307 0
使用阿里的增量日志解析工具canal
|
canal SQL 关系型数据库
10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用
|
canal 关系型数据库 MySQL
9.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装
canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装
9.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装