canal
简介
阿里巴巴旗下的一款开源项目,纯java开发, 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

mysql主从复制原理:
- master将改变记录到二进制日志(binary log)中
- slave将master的binary log events拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变反映它自己的数据
canal原理:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
准备
- mysql主数据库:地址、账密、建表
- mysql从数据库:地址、账密、建表
- canal-developer下载:服务器,
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz - canal-adapter下载:客户端,
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.5.tar.gz
mysql修改
- 开启binlog功能,
vi /etc/my.cnf增加以下代码
log_bin=mysql-bin
binlog_format=ROW
# 服务编号,与其它节点不冲突就可以
server-id=1
# 每次执行操作都与磁盘进行同步
sync-binlog=1

- 重启mysql,
systemctl restart mysqld - 查看是否开启
[root@CompoCloud ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 71
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)
- 创建mysql canal用户并授权
mysql> create user canal identified by 'Canal@123';
Query OK, 0 rows affected (1.02 sec)
mysql> grant select, replication slave, replication client on *.* to 'canal'@'%' ;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
注意测试是否该账密是否能成功连接,保证账密无误
canal-deployer安装配置
- 解压,
tar -zxvf canal.deployer-1.1.5.tar.gz -C /opt/canal/canal-deployer - 修改
canal-deployer/canal.properties,去掉canal.instance.parser.parallelBufferSize前的注释
采坑:没有修改此处导致日志报错数据库连接不成功
# parallel parser config
canal.instance.parser.parallel = true
## concurrent thread number, default 60% available processors, suggest not to exceed Runtime.getRuntime().availableProcessors()
canal.instance.parser.parallelThreadSize = 16
## disruptor ringbuffer size, must be power of 2
canal.instance.parser.parallelBufferSize = 256
- 修改
canal-deployer/conf/example/instance.properties

本文详细介绍了MySQL主从复制的工作原理,并重点讲解了开源项目Canal的使用,包括其部署、配置和问题排查。在MySQL中开启binlog,创建Canal用户并授权,然后配置Canal-deployer和Canal-adapter,实现数据的实时同步。在过程中遇到了caching_sha2_password认证失败的问题,通过修改用户认证方式解决。最后,文章提供了测试步骤和可能遇到的问题,确保主从数据库同步的正确性。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



