1.开启mysql binlog模式
找到my.cnf文件,我本地目录是/etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1
然后重启mysql,检查一下binlog是否正确启动
show variables like '%log_bin%';
2.canal-server的安装
- 可以直接下载安装包,也可以下载源码自己打包,我们采用直接下载的方式), 已下载的话直接拷贝到安装目录即可
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
- 将下载好的文件移动到自定义的安装路径
mv canal.deployer-1.1.3.tar.gz canal.deployer-1.1.3
- 解压
tar zxvf canal.deployer-1.1.3.tar.gz
进入解压后的文件夹
cd canal.deployer-1.1.3
- 修改conf/example/instance.properties文件,主要注意以下几处:
canal.instance.master.address:数据库地址,例如127.0.0.1:3306
canal.instance.dbUsername:数据库用户
canal.instance.dbPassword:数据库密码
完整内容如下:
#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0
# enable gtid use true/false
canal.instance.gtidon=false
# 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=
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=
# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=
#canal.instance.tsdb.dbUsername=
#canal.instance.tsdb.dbPassword=
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=
# username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=12345678
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=
# mq config
#canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
#canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################
- 回到canal.deployer-1.1.3目录下,启动canal:
sh bin/startup.sh
- 查看日志
cat logs/canal/canal.log
- 查看具体instance日志
cat logs/example/example.log
- 关闭命令
sh bin/stop.sh
如果canal.deployer启动报这个错:com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set
处理方法:
vi canal.deployer-1.1.3/conf/canal.properties
注释掉这一行
canal-adapter的安装
- 下载canal.adapter-1.1.3.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.adapter-1.1.3.tar.gz
- 解压
tar -zxvf canal.adapter-1.1.3.tar.gz canal.adapter-1.1.3
- 进入解压后的文件夹
cd canal.adapter-1.1.3
修改conf/application.yml文件,主要注意如下内容,由于是yml文件,注意我这里说明的属性名称:
- server.port:canal-adapter端口号
- canal.conf.canalServerHost:canal-server地址和ip
- canal.conf.srcDataSources.defaultDS.url:数据库地址
- canal.conf.srcDataSources.defaultDS.username:数据库用户名
- canal.conf.srcDataSources.defaultDS.password:数据库密码
- canal.conf.canalAdapters.groups.outerAdapters.hosts:es主机地址,tcp端口
完整内容如下:
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
canal.conf:
mode: tcp
canalServerHost: 127.0.0.1:11111
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
srcDataSources:
defaultDS:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true
username: root
password: 12345678
canalAdapters:
- instance: example
groups:
- groupId: g1
outerAdapters:
- name: es
hosts: 127.0.0.1:9300
properties:
cluster.name: elasticsearch #填写自己es的集群名称
另外需要配置conf/es/*.yml文件,adapter将会自动加载conf / es下的所有.yml结尾的配置文件。(先建好数据库的表和对应的es索引)
接下来创建test.yml(文件名随意),内容很好理解_index为索引名称,sql为对应语句,内容如下
dataSourceKey: defaultDS
destination: example
groupId:
esMapping:
_index: test #自己索引的名字
_type: _doc #自己doc的名字
_id: _id #这个最好加下划线,我自己用的时候不加下划线adaptor启动报错
upsert: true
sql: "select a.id as _id,a.name,a.address from test a" #sql语句,可以理解为数据库变化后使用该语句查询数据库,所以查询出来的字段一定要使用AS与es字段对应,这里有一个坑就是如果有createdTime之类的可能数据库新增的时候会报类型转换异常,就是字符串的日期不能转换成Long,该问题只需要把该语句中查询出来的日期转换成时间戳格式就行了(“HH:mm:ss.0”)百度一下“FROM_UNIXTIME”这玩意
commitBatch: 3000
配置完成后,回到canal-adapter根目录,执行命令启动
sh bin/startup.sh
查看日志
tail -100f logs/adapter/adapter.log
关闭canal-adapter命令
sh bin/stop.sh
如果你是8.0的mysql,那么连接数据库会报错,这是因为canal.adaptor自带的驱动版本太低了,去maven仓库下载一个mysql-connector-java-8.0.13这玩意,然后替换掉canal.deployer-1.1.3/lib
下面低版本的驱动,然后重启adaptor就可以了