利用canal实现MySQL数据同步到redis(一)canal的搭建

1.什么是canal

canal 的原理相对比较简单:

  1. canal 模拟 mysql slave 的交互协议,伪装自己为mysql slave,向 mysql master发送 dump 协议
  2. mysql master 收到 dump 请求,开始推送 binary log 给 slave (也就是 canal)
  3. 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 目录下,输入:

1
startup.bat

启动 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