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

蚀纹析取
• 阅读 1019

前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——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,发现了问题所在

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

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

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

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

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

改为 -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 输出数据的过程。结果无论怎样修改,控制台就是没有日志打出。
通过查看 canal /usr/local/logs/example下的 example.log 文件才发现问题所在

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

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

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
MySQL如何实时同步数据到ES?试试这款阿里开源的神器
摘要mall项目中的商品搜索功能,一直都没有做实时数据同步。最近发现阿里巴巴开源的canal可以把MySQL中的数据实时同步到Elasticsearch中,能很好地解决数据同步问题。今天我们来讲讲canal的使用,希望对大家有所帮助!canal简介canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消
Stella981 Stella981
3年前
Canal简介及配置说明
1.简介canal是纯Java开发的,基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。原理相对比较简单:1.1.canal模拟mysqlslave的交互协议,伪装自己为mysqlslave,向mysqlmaster发送dump协议2.2.mysqlmaster收到dump请
Stella981 Stella981
3年前
Canal & Otter 的一些注意事项和最佳实践
1,canal和otter由于是java开发的,运行在windows和linux上都可以2,为了使用otter必须要canal的支持,otter作为canal的消费方,当然也可以单独使用canal,如果你有消费mysqlbinlog的需求3,canal有几种运行方式,生产环境中推荐使用zookeeper的持久化方式,对应的spring配置文件为:d
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL数据库InnoDB存储引擎Log漫游(1)
作者:宋利兵来源:MySQL代码研究(mysqlcode)0、导读本文介绍了InnoDB引擎如何利用UndoLog和RedoLog来保证事务的原子性、持久性原理,以及InnoDB引擎实现UndoLog和RedoLog的基本思路。00–UndoLogUndoLog是为了实现事务的原子性,
Stella981 Stella981
3年前
Canal 组件简介与 vivo 帐号实践
互联网应用随着业务的发展,部分单表数据体量越来越大,应对服务性能与稳定的考虑,有做分库分表、数据迁移的需要,本文介绍了vivo帐号应对以上需求的实践。一、前言Canal是阿里巴巴开源项目,关于什么是Canal?又能做什么?我会在后文为大家一一介绍。在本文您将可以了解到vivo帐号使用Canal解决了什么样的业务痛点,基于此希望