1.什么是canal

canal 的原理相对比较简单:
- canal 模拟 mysql slave 的交互协议,伪装自己为mysql slave,向 mysql master发送 dump 协议
- mysql master 收到 dump 请求,开始推送 binary log 给 slave (也就是 canal)
- canal 解析 binary log 对象(原始为 byte 流)
2.服务器端的配置
2.1.配置MySQL
2.1.1.修改配置文件
打开 MySQL 根目录,修改 my-default.ini 文件。

添加如下内容至文件中
1 2 3
| log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
|
添加结果如图所示:

2.1.2.新建一个名为 canal 的用户,赋予其相应的权限
SQL 语句如下:
1 2 3 4
| CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'localhost'; -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'localhost' ; FLUSH PRIVILEGES;
|
语句中的 localhost 在实际应用中需要改成 canal 服务器的 ip 地址。如果你和我一样使用本机进行配置,使用 localhost 即可。
2.2.下载 canal
下载地址:https://github.com/alibaba/canal/releases
我们下载下图中标红的两个文件。

在你喜欢的位置(我的是D:\WOrkSapce\)建立一个名为 canal 的文件夹,将这两个压缩包放到里面,然后分别解压到各自的文件夹即可。
2.3.修改 canal 配置文件
进入 D:\WorkSpace\canal\canal.deployer-1.0.24\conf\example 目录下

找到 instance.properties 文件,将数据库参数修改成你自己的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| ################################################# ## mysql serverId canal.instance.mysql.slaveId = 1234 # 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.standby.address = #canal.instance.standby.journal.name = #canal.instance.standby.position = #canal.instance.standby.timestamp = # username/password canal.instance.dbUsername = canal canal.instance.dbPassword = canal canal.instance.defaultDatabaseName = test canal.instance.connectionCharset = UTF-8 # table regex canal.instance.filter.regex = .*\\..* # table black regex canal.instance.filter.black.regex = #################################################
|
2.4.启动 canal 服务端
进入 D:\WorkSpace\canal\canal.deployer-1.0.24\bin 目录下,输入:
启动 canal 服务端,得到结果如下图所示:

3.客户端的配置
3.1.导入 maven 项目
打开 eclipse,【File】->【Import】

选择 【Maven】 -> 【Existing Maven Projects】

找到你刚才下载解压的 canal-canal-1.0.24 ,确定

你会发现这些项目已经导入进来了

3.2.打开并运行 example
打开 canal.example ,找到 ClusterCanalClientTest ,运行

3.3.更新数据库并测试
打开 MySQL 终端,输入:
1 2
| use test create table table0(id int);
|

这时查看 ClusterCanalClientTest 的终端,发现 binlog 信息已经被解析出来了

4.参考链接
alibaba/canal 项目介绍:
https://github.com/alibaba/canal/wiki
5.操作系统:Windows10