下面是比较早的资料,仅供本人参考使用
0. MySQL准备
MySQL需要先开启 Binlog 写入功能
,配置 binlog-format 为ROW 模式
,my.cnf 中配置如下
[ mysqld]
log- bin= mysql- bin
binlog- format= ROW
server_id= 1
授权
canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
CREATE USER root IDENTIFIED BY '123456' ;
GRANT ALL PRIVILEGES ON * . * TO 'root' @'%' ;
FLUSH PRIVILEGES ;
1.Canal安装
重要版本更新说明:
以版本canal1.0.24安装为例
mkdir / export/ servers/ canal
tar - zxvf canal. deployer- 1.0 .24 . tar. gz - C / export/ servers/ canal/
解压完成后,进入 /export/servers/canal/ 目录,可以看到如下结构
drwxr- xr- x. 2 root root 4096 2 月 1 14 :07 bin
drwxr- xr- x. 4 root root 4096 2 月 1 14 :07 conf
drwxr- xr- x. 2 root root 4096 2 月 1 14 :07 lib
drwxrwxrwx. 2 root root 4096 4 月 1 2017 logs
canal server的conf下有几个配置文件
[ root@node1 canal]
conf/
├── canal. properties
├── example
│ └── instance. properties
├── logback. xml
└── spring
├── default - instance. xml
├── file - instance. xml
├── group - instance. xml
├── local - instance. xml
└── memory- instance. xml
先来看canal.properties的common属性前四个配置项:
canal.id是canal的编号,在集群环境下,不同canal的id不同,注意它和mysql的server_id不同。 ip这里不指定,默认为本机,比如上面是192.168.1.120,端口号是11111。zk用于canal cluster。
canal. id= 1
canal. ip=
canal. port= 11111
canal. zkServers=
再看下canal.properties下destinations相关的配置:
这里的canal.destinations = example可以设置多个,比如example1,example2, 则需要创建对应的两个文件夹,并且每个文件夹下都有一个instance.properties文件。
canal. destinations = example
canal. conf. dir = . . / conf
canal. auto. scan = true
canal. auto. scan. interval = 5
canal. instance. global . mode = spring
canal. instance. global . lazy = false
canal. instance. global . spring. xml = classpath:spring/ file - instance. xml
全局的canal实例管理用spring,这里的file-instance.xml最终会实例化所有的destinations instances:
比如canal.instance.destination等于example,就会加载example/instance.properties配置文件
< !
< bean class= "com.alibaba.otter.canal.instance.spring.support.PropertyPlaceholderConfigurer" lazy- init= "false" >
< property name= "ignoreResourceNotFound" value = "true" / >
< property name= "systemPropertiesModeName" value = "SYSTEM_PROPERTIES_MODE_OVERRIDE" / > < !
< property name= "locationNames" >
< list>
< value > classpath:canal. properties< / value > < value > classpath:${canal. instance. destination:}/ instance. properties< / value >
< / list>
< / property>
< / bean>
< bean id= "socketAddressEditor" class= "com.alibaba.otter.canal.instance.spring.support.SocketAddressEditor" / >
< bean class= "org.springframework.beans.factory.config.CustomEditorConfigurer" >
< property name= "propertyEditorRegistrars" >
< list>
< ref bean= "socketAddressEditor" / >
< / list>
< / property>
< / bean>
< bean id= "instance" class= "com.alibaba.otter.canal.instance.spring.CanalInstanceWithSpring" >
< property name= "destination" value = "${canal.instance.destination}" / >
< property name= "eventParser" >
< ref local = "eventParser" / >
< / property>
< property name= "eventSink" >
< ref local = "eventSink" / >
< / property>
< property name= "eventStore" >
< ref local = "eventStore" / >
< / property>
< property name= "metaManager" >
< ref local = "metaManager" / >
< / property>
< property name= "alarmHandler" >
< ref local = "alarmHandler" / >
< / property>
< / bean>
vim conf/ example/ instance. properties
canal. instance. mysql. slaveId = 1234
. . .
canal. instance. master. address= 192.168 .1 .120 :3306
. . .
canal. instance. dbUsername = root
canal. instance. dbPassword = 123456
sh bin/ startup. sh
vi logs/ canal/ canal. log
2013 - 02 - 05 22 :45 :27.967 [ main] INFO com. alibaba. otter. canal. deployer. CanalLauncher -
2013 - 02 - 05 22 :45 :28.113 [ main] INFO com. alibaba. otter. canal. deployer. CanalController -
2013 - 02 - 05 22 :45 :28.210 [ main] INFO com. alibaba. otter. canal. deployer. CanalLauncher -
vi logs/ example/ example. log
2013 - 02 - 05 22 :50 :45.636 [ main] INFO c. a. o. c. i. spring. support. PropertyPlaceholderConfigurer - Loading properties file from class path resource [ canal. properties]
2013 - 02 - 05 22 :50 :45.641 [ main] INFO c. a. o. c. i. spring. support. PropertyPlaceholderConfigurer - Loading properties file from class path resource [ example/ instance. properties]
2013 - 02 - 05 22 :50 :45.803 [ main] INFO c. a. otter. canal. instance. spring. CanalInstanceWithSpring - start CannalInstance for 1 - example
2013 - 02 - 05 22 :50 :45.810 [ main] INFO c. a. otter. canal. instance. spring. CanalInstanceWithSpring - start successful. . . .
sh bin/ stop. sh
注意:
Canal的远程连接端口号默认为11111,当然如果需要,可以在canal.properties文件中修改
instance.properties参数列表
参数名字 参数说明 默认值 canal.instance.mysql.slaveId mysql集群配置中的serverId概念,需要保证和当前mysql集群中id唯一 1234 canal.instance.master.address mysql主库链接地址 127.0.0.1:3306 canal.instance.master.journal.name mysql主库链接时起始的binlog文件 无 canal.instance.master.position mysql主库链接时起始的binlog偏移量 无 canal.instance.master.timestamp mysql主库链接时起始的binlog的时间戳 无 canal.instance.dbUsername mysql数据库帐号 canal canal.instance.dbPassword mysql数据库密码 canal canal.instance.defaultDatabaseName mysql链接时默认schema canal.instance.connectionCharset mysql 数据解析编码 UTF-8 canal.instance.filter.regex mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 常见例子:1. 所有表:.* or .*\…*2. canal schema下所有表: canal\…*3. canal下的以canal打头的表:canal\.canal.4. canal schema下的一张表:canal.test15. 多个规则组合使用:canal\… ,mysql.test1,mysql.test2 (逗号分隔)注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤) .* \\…* canal.instance.tsdb.enable v1.0.25版本新增,是否开启table meta的时间序列版本记录功能 true canal.instance.tsdb.dir v1.0.25版本新增,table meta的时间序列版本的本地存储路径,默认为instance目录 canal.file.data.dir:…/conf/canal.file.data.dir:…/conf/{canal.instance.destination:} canal.instance.tsdb.url v1.0.25版本新增,table meta的时间序列版本存储的数据库链接串,比如例子为本地嵌入式数据库 jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL; canal.instance.tsdb.dbUsername v1.0.25版本新增,table meta的时间序列版本存储的数据库链接账号 canal canal.instance.tsdb.dbUsername v1.0.25版本新增,table meta的时间序列版本存储的数据库链接密码 canal
canal. instance. master. journal. name + canal. instance. master. position : 精确指定一个binlog位点,进行启动
canal. instance. master. timestamp : 指定一个时间戳,canal会自动遍历mysql binlog,找到对应时间戳的binlog位点后,进行启动
不指定任何信息:默认从当前数据库的位点,进行启动。( show master status )
标准的Perl正则,注意转义时需要双斜杠:\\
目前canal版本仅支持一个数据库只有一种编码,如果一个库存在多个编码,需要通过filter. regex配置,将其拆分为多个canal instance,为每个instance指定不同的编码