一、版本介绍
MariaDB:10.5.17-MariaDB
MySQL:mysql-5.7.42
Canal:canal.deployer-1.1.7-SNAPSHOT、canal.adapter-1.1.7-SNAPSHOT
二、原理
Canal.deployer作为Canal服务端,伪装成MySQL从数据库,通过配置直接监听MariaDB数据库binlog文件,然后可以拿到MariaDB所有的数据操作SQL,再根据deployer自身配置的实例,进行定向的binlog文件SQL筛选,再通过adapter连接MySQL进行SQL解析,从而实现多库同步。
三、步骤
配置MariaDB
在/etc/my.cnf.d/server.cnf文件中的[mysqld]下添加如下两行
log-bin=mysql-bin
binlog_format=ROW
配置Canal.deployer
在解压路径下找到conf/canal.properties文件
记录其中canal.destinations = example 属性,这是canal的连接实例,要进行多个库同时自动同步数据,这里需要配置多个实例,配置方式如下:
canal.destinations = example,example1,example2
用英文逗号隔开即可配置多个实例,实例配置完成之后在conf/canal.properties文件的同级目录需要创建以每个实例名为名的文件夹,在每个文件夹下创建一个instance.properties配置文件。
然后对每个实例进行配置:
/conf/example /conf/example1
配置Canal.adapter
编辑conf/application.yml
具体配置:这里主要是配置多个数据源,以及多个目标数据库,因为在rdb文件夹中要为每一个实例创建一个配置文件,这个配置文件中就会用到这里配置的数据源及目标数据库
配置rdb文件夹下的配置文件:
conf/rdb/
example.yml
example1.yml
MySQL配置
在/etc/my.cnf中的[mysqld]下添加如下配置
log-bin=mysql-bin # [必须]启用二进制日志
server-id=123 #服务id 一般取IP最后一段
binlog_format=ROW
四、重启
按顺序重启MariaDB->canal.deployer->canal.adapter->MySQL
其中canal.deployer和canal.adapter在conf路径同级目录下的bin路径中有启动文件
五、演示
六、总结
1、Canal可配置多个实例,此篇文章配置的是多个实例指定同一个IP地址及端口,实现的是从同一个数据库同步数据,因为每个实例可以指定主数据库的IP地址及端口号,从而实现获取多台服务器的binlog文件,那么就意味着可以解析不同服务器上面MySQL的数据
2、在adapter中的配置文件可以指定多个数据源(但是这个数据源只能和实例的数据源一致)能指定数据源,那么就可以实现不同数据库(服务器都可以不一致,因为配了IP地址的)的数据获取
3、目标数据库可以根据canalAdapters的instance来配置多个,也就是说adapter有能力将数据分发到多个目标数据库,因为目标数据库需要指定IP地址,所以分发到的多个数据库可以位于不同服务器。
七、疑问
Canal可以配置不同的实例,也可以配置不同的数据源和不同的目标数据库,那么是不是可以将Canal作为中转站,来同步不同数据库之间的数据了呢?类似Canal以外数据可以随意配置同步,以Canal为中心即可。