使用alibaba canal完成mysql(8.0.17)数据到elasticsearch的增量更新

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就可以了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值