一、什么是canal
1.定位
Canal是阿里巴巴开源的一款基于mysql数据库binlog增量日志分析提供数据订阅和消费功能的组件
2.原理
- Canal模拟MySQL Slave协议,将自己伪装成MySQL Slave,将Master发送dump协议
- Master将binlog同步到Slave(这里是Canal)
- Canal解析binlog,可以做相关的后续操作,如同步发送到MQ,或同步到其他存储系统如ES
二、canal能做什么
- 数据库镜像
- 数据库实时备份
- 多级索引 (卖家和买家各自分库索引)
- search build
- 业务cache刷新
- 价格变化等重要业务消息
三、canal服务端安装
1.MySQL主节点配置
(1)开启binlog
修改mysql的配置文件,添加以下内容:
log-bin = mysql-bin
binlog-format = ROW
server-id = 1
- log-bin : 指定二进制日志文件的文件名,也是开启binlog的开关
- binlog-format : binlog的日志格式,必须设置成ROW
- server-id : 主节点的编号(不能与slave和canal的server-id相同)
修改配置后,请重启mysql
(2)为slave账户授权
通过mysql客户端连接到mysql服务器
- 创建用于复制的账号(设置账号和密码)
CREATE USER canal IDENTIFIED BY 'canal';
- 为创建的账号授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
- 刷新权限
FLUSH PRIVILEGES
2.下载源码
(1)下载二进制包
https://github.com/alibaba/canal/releases
下载最新的稳定包
(2)编译成二进制包
3.修改配置
修改实例配置conf/example/instance.properties
# position info
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
canal.instance.defaultDatabaseName =test
# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=
主要配置说明:
- 连接的master节点配置
- canal.instance.mysql.slaveId : 当前节点伪装成的slave的编号(1.0.26后自动生成,不用设置)
- canal.instance.master.address : 主节点的地址
- 账号设置
- canal.instance.dbUsername : 用于复制的账号的用户名
- canal.instance.dbPassword : 用于复制的账号的密码
- canal.instance.connectionCharset : 连接数据库编码设置
- 表设置
- canal.instance.filter.regex : 只关注的表(正则表达式),这里
.*\\..*
表示所有
- canal.instance.filter.regex : 只关注的表(正则表达式),这里
4.启动canal
bin/startup.sh
5.查看日志
- logs/canal/canal.log : 查看服务的日志
- logs/example/example.log : canal实例服务日志
- logs/example/meta.log : 数据变更日志(有数据后自动生成)
6.检测canal搭建是否成功
(1)通过客户端进入mysql服务器,查看binlog
- 查看主节点状态,获取二进制文件名称
show master status;
- 查找当前二进制日志的位置
show binlog events in 'mysql-bin.000009';
注:这上语句还可以添加以下参数:
- from : 起始的position位置
- limit : 读取的起始offset和limit条数
(2)打开数据变量日志文件
tail -200f logs/example/meta.log
(3)变更数据触发数据同步
通过客户端变更数据,如插入数据、修改数据或删除数据操作
查看前两个步骤的日志,比较两个position是否相同
7.canal其他操作
- bin/stop.sh : 关闭canal
- bin/restart.sh : 重启canal