Canal TCP模式部署
概览
canal 分两部分canal-server 服务端和canal-client 客户消费端。server负责去读取解析binlog;client客户端负责消费server读取到的解析好的记录。
部署环境
数据库:MySQL8.0
操作系统: Mac
canal-server版本:canal.deployer-1.1.4
canal-client版本:canal.client:1.1.4
准备
- 对于自建mysql,需要先开启binlong写入功能,配置binlog-format为row模式,my.cnf配置如下
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
-
- 注意:针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步
- my.cnf如果没有的话要自己新建一个,不禁要问,这是为什么,那是因为,软件版本的mysql并没有my.cnf
- 搜索全文查找命令:find / -name my.cnf
- 创建一个命令:sudo touch /etc/my.cnf
- 为什么是664,那是因为mysql.service会默认777是不安全的配置文件,会自动忽略掉命令:sudo chmod 664 /etc/my.cnf
- 新增如上配置内容命令:sudo vim /etc/my.cnf
- 系统偏好设置》》MYSQL》》重启mysql
- 创建可以读取mysql的binlog的用户
-- 使用命令登录:mysql -u root -p
-- 创建用户 用户名:canal 密码:Canal@123456
create user 'canal'@'%' identified by 'Canal@123456';
-- 授权 *.*表示所有库
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'Canal@123456';
-
系统偏好设置》》MYSQL》》重启mysql
-
验证mysql配置
-- 改了配置文件之后,重启MySQL,使用命令查看是否打开binlog模式: mysql> show variables like 'log_bin%'; +---------------------------------+---------------------------------------+ | Variable_name | Value | +---------------------------------+---------------------------------------+ | log_bin | ON | | log_bin_basename | /usr/local/mysql/data/mysql-bin | | log_bin_index | /usr/local/mysql/data/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+---------------------------------------+ 5 rows in set (0.01 sec) -- 查看binlog-format是否为row模式 mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec) -- 查看binlog日志文件列表: mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 177 | | mysql-bin.000002 | 38609 | +------------------+-----------+ 2 rows in set (0.00 sec) -- 查看mysql-bin.000002 最开始的位点为4 mysql> show binlog events in 'mysql-bin.000002' from 0 limit 2; +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | mysql-bin.000002 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.27-log, Binlog ver: 4 | | mysql-bin.000002 | 123 | Previous_gtids | 1 | 154 | | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 2 rows in set (0.00 sec)
Canal-server部署启动
-
下载canal.deployer-1.1.6.tar.gz,地址:https://github.com/alibaba/canal/releases
-
解压缩
mkdir /Users/xiaowu/SoftWare/canal/canal-server tar zxvf canal.deployer-1.1.6.tar.gz -C /Users/xiaowu/SoftWare/canal/canal-server
解压完成后,进入 /tmp/canal 目录,ls 看到如下结构
bin conf lib logs
-
修改instance配置文件,如下为需要修改的信息
vi conf/example/instance.properties
#position info,需要改成自己的数据库信息 canal.instance.master.address = 127.0.0.1:3306 #username/password,需要改成自己的数据库信息 canal.instance.dbUsername = canal canal.instance.dbPassword = Canal@123456 canal.instance.defaultDatabaseName =order_test canal.instance.connectionCharset = UTF-8 #table regex要监听的库表信息 canal.instance.filter.regex = order_test.order_base_item
- canal.instance.connectionCharset 代表数据库的编码方式对应到 java 中的编码类型,比如 UTF-8,GBK , ISO-8859-1
- 如果系统是1个 cpu,需要将 canal.instance.parser.parallel 设置为 false
-
修改server配置文件
vim conf/canal.properties
# tcp, kafka, RocketMQ canal.serverMode = tcp
-
替换bin下mysql-connector-java-5.1.47.jar 为mysql8.0版本jar为mysql-connector-java-8.0.18.jar
-
启动
sh bin/startup.sh
-
查看 server 日志
tail -100f logs/canal/canal.log
-
查看 instance 的日志,正常会出现如下日志
tail -100f logs/example/example.log
c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start successful....
-
关闭,切勿强制kill,强制关闭会影响canal对binlog消费位点的记录
sh bin/stop.sh
Canal-client客户端springboot部署可执行jar
- 新建springboot项目,git地址
https://github.com/YuGonge/canal-tcp
- 运行jar
nohup java -jar canal-tcp-1.0-SNAPSHOT.jar &
部署目录/logs 可查看日志