关于后端:总结-canal-使用过程中的几个问题值得思考一下

6次阅读

共计 1645 个字符,预计需要花费 5 分钟才能阅读完成。

前几天在网上冲浪的时候发现了一个比拟成熟的开源中间件——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,咱们下期再见!

正文完
 0