canal 笔记
原文 http://weikeqin.com/2018/05/16/canal-notes/
使用canal前需要准备以下几个内容
1. 安装配置MySQL
1.1 安装 mysql,
1.2 配置 mysql binlog使用ROW模式
1.3 在MySQL添加对应的canal用户
1.4 检查canal用户生效
2. 下载canal并配置
2.1 下载canal
2.2 配置 canal
2.3 启动canal (需要JDK>=1.6.25)
(1) 配置MySQL
(1.1) 安装MySQL
参考 https://dev.mysql.com/doc/refman/5.7/en/installing.html
(1.2) 修改MySQL配置文件
canal的原理是基于mysql binlog技术,所以需要开启mysql的binlog写入功能,并且配置binlog模式为row.
(1.3) MySQL添加canal用户并授权
canal的原理是模拟自己为mysql slave,所以需要mysql slave的相关权限
<!--more-->
(1.4) 校验用户对应权限
1.
show master status ;
如果正常显示binlog,则没问题,如果提示
Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
,则没有对应 REPLICATION CLIENT 权限
>
2.
show slave status ;
如果提示
Access denied; you need (at least one of) the REPLICATION SLAVE privilege(s) for this operation
,则没有对应 REPLICATION SLAVE 权限
(2) 下载并启动canal
执行 ./bin/startup.sh
即可启动
(2.1) 下载canal
到 https://github.com/alibaba/canal/releases 选择合适的版本
下载 wget https://github.com/alibaba/canal/releases/download/canal-1.1.14/canal.deployer-1.1.14.tar.gz
(2.2) 修改配置
修改
conf/example/instance.properties
以下只列出比较重要的配置
(2.3) 启动canal
通过
sh bin/startup.sh
或者./bin/startup.sh
启动
启动后通过
jps -l
命令 可以看到com.alibaba.otter.canal.deployer.CanalLauncher
canal启动时canal.log
canal.deployer-1.0.24/logs/canal/canal.log
(2.2) canal正常启动时instance对应的日志
canal.deployer-1.0.24/logs/example/example.log
<br>
停止canal
sh stop.sh
或./bin/stop.sh
(4) 程序中使用
以下代码仅作为示例
(5) canal复制原理
复制如何工作,整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events复制到它的中继日志(relay log)中;
(3) slave读取中继日志中的事件,将其重放到备库数据之上。
下图描述了复制的过程:
(6) 遇到的问题
(6.1) Error When doing Client Authentication:ErrorPacket
原因 用户名密码不正确
(6.2) Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
用canal账户登录后发现可以查看对应数据库对应表的数据,但是
show master status
提示 Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
>
1、
instance.properties
配置文件里配置的用户没有REPLICATION权限2、canal instance.properties 配置错误
3、配置文件里用户名密码不正确
4、MySQL对应用户不存在
5、MySQL配置不对
给canal用户对应的replication权限
grant replication client on *.* to 'canal'@'%';
flush privileges
(6.3) Access denied; you need (at least one of) the REPLICATION SLAVE privilege(s) for this operation
Access denied 没权限 需要给对应账户授权
REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制。
并且"SHOW SLAVE HOSTS"这条命令和REPLICATION SLAVE权限有关,否则执行时会报错:
REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
在5.6.6版本以后,也可以使用"SHOW BINARY LOGS"。
GRANT REPLICATION SLAVE ON *.* TO 'canal'@'%'
flush privileges
(6.4) canal用了UseConcMarkSweepGC不能用JDK14
修改 bin/start.sh
文件,修改对应的JAVA路径
(6.5) com.alibaba.otter.canal.protocol.exception.CanalClientException: java.net.ConnectException: Connection refused
canal没启动 或者 canal挂了
配置被删了,检查对应
destination
和instance.properties
instance.properties
没配置
<br>
(7) canal-admin后台管理
canal-admin设计上是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作
简单来说,canal-admin是一个后台维护系统,简化了配置canal的工作,提高了效率,终于不用到服务器上一个一个配了
访问地址 http://127.0.0.1:8089/
(7.1) canal-admin的核心模型主要有
instance,对应canal-server里的instance,一个最小的订阅mysql的队列
server,对应canal-server,一个server里可以包含多个instance
集群,对应一组canal-server,组合在一起面向高可用HA的运维
References
[1] canal/wiki
[2] canal-AdminGuide
[3] ClientExample
[4] Canal-Admin-QuickStart
[5] Canal-Admin-Guide
[6] canal配置使用
[7] Mysql 普通账户授权replication client后登录失败问题
[8] REPLICATION SLAVE 与 REPLICATION CLIENT 权限
[9] 对replication slave,replication client的一点说明
[10] MySQL 5.6 Reference Manual – 6.2.1 Privileges Provided by MySQL
[11] SimpleCanalClientTest
[12] ClusterCanalClientTest
版权声明: 本文为 InfoQ 作者【wkq2786130】的原创文章。
原文链接:【http://xie.infoq.cn/article/ebf4b7d05242c8fd05e465313】。文章转载请联系作者。
评论