canal环境搭建及出现问题解决

一、canal作用

1.canal介绍
Canal 是阿里开源的一个项目,官方主页:https://github.com/alibaba/canal。
它通过模拟 MySOL 主从复制的交互协议,把自己伪装成一个 MySOL 的从节
点,向 MySOL 主节点发送 dump 请求。MySOL 收到请求后,就会向 Canal 开始
推送 Binlog,Canal 解析 Binlog 字节流之后,将其转换为便于读取的结构化数据,
供下游程序订阅使用
项目中使用canal一般希望借助canal实现mysql数据库的同步(比如将mysql中的数据更新redis保证缓存和数据库数据的一致性)

二、环境搭建

安装环境:操作系统 Windows10,MySQL 8.0.19,canal1.1.6.
因为canal是模拟mysql的从节点工作,所以先安装mysql,并且让mysql按照主从节点的主节点配置就可以。
1.配置mysql
1.1 先开启binlog写入功能

show variables like "%log_bin%"

在这里插入图片描述
1.2 配置 binlog-format 为 ROW 模式

show variables like "%binlog_format%";

canal环境搭建及出现问题解决_第1张图片
1.3 mysql的server_id

show variables like "%server_id%";

在这里插入图片描述
如果本机的 MySQL 的配置与上述不符合,可以修改 MySQL 的配置文件并重
启 MySQL,一般来说是 my.ini,如果自己不清楚放在哪里可以直接在电脑上搜索一下。
2.配置canal同步账号密码
2.1既然是将 Canal 模拟 MySQL 从节点,自然还要给 Canal 设置一个用来复制数
据的 MySQL 账号,我们这里设定这个用户名为 canal,密码 canal

-- 创建用户
CREATE USER canal IDENTIFIED BY 'canal'; 
-- 给用户设置权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

此时mysql库的user表中就有了canal用户,且拥有查询和复制的权限。

select * from mysql.`user`;

在这里插入图片描述
2.2找到binlog的进度,让从节点复制使用

show master status;

在这里插入图片描述
3.canal服务端
3.1canal服务点直接可以从canal官网下载压缩包,解压压缩包如下

canal环境搭建及出现问题解决_第2张图片
3.2配置
进入 conf 目录,修改 canal.properties 文件,比较关键的是 canal.destinations
在这里插入图片描述
这个canal.destinations 配置指向具体需要加载配置所在的文件夹。我这里新建test为例(实际项目中新建一个文件夹即可)。

3.3 具体目录下的配置
从example目录下拷贝一个instance.properties文件,修改其中内容
3.3.1修改其中的连接信息,和binlog名称以及同步位置
canal环境搭建及出现问题解决_第3张图片
3.3.2修改连接的用户名、密码
在这里插入图片描述
3.3.3指定需要监视的表名称
在这里插入图片描述
配置完成后,进入 bin 目录,执行 startup.bat 即可。

三、搭建过程中遇到的问题:

1.cannal连接mysql报错
1.1报错信息
canal caching_sha2_password Auth failed
1.2原因
mysql版本8.0创建用户时默认的密码加密方式为caching_sha2_password,而cannal连接mysql默认用的密码加密方式是mysql_native_password
1.3解决方案
修改mysql的cannal用户密码方式为mysql_native_password ,操作步骤如下
连接mysql查看用户的密码使用的什么加密方式

select host, user, authentication_string, plugin from mysql.user;

果然canal用户的加密方式使用的是caching_sha2_password,直接修改canal用户密码加密方式

-- 更新一下用户密码
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal';
-- 刷新权限
FLUSH PRIVILEGES;

刷新之后再次查看,发现canal用户加密方式已经修改过来了。
canal环境搭建及出现问题解决_第4张图片
2 cannal同步报错,找不到位置信息
2.1.报错信息如下
ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address 172.16.0.20:3306 has an error, retrying. caused by
com.alibaba.otter.canal.parse.exception.PositionNotFoundException: can’t find start position for example

2.2.原因
meta.dat 中保存的位点信息和数据库的位点信息不一致;导致canal抓取不到数据库的动作;

2.3.解决方案
单机
删除meta.dat文件,重启canal,问题解决;

(redis启动报错是本地很久没有启动之后,这次启动时报了错,顺便解决)
3.Redis 启动报错
3.1报错信息:
QForkMasterInit: system error caught. error code=0x000005af, message=VirtualAllocEx failed.: unknow
3.2原因
redis没有指定启动内存
3.3解决方案
Redis 的 conf 文件设置参数 maxheap 和 maxmemory
maxmemory 120MB
maxheap 180MB
启动是命令如下:

redis-server.exe redis.windows.conf

你可能感兴趣的:(canal,数据库,问题处理,mysql,数据库,java)