使用canal同步mysql数据至elasticsearch

使用canal同步mysql数据至es的特点如下:

  1. 使用mysql的binlog(中性)
  2. 支持增量更新(优点)
  3. 配置可用(优点)
  4. 实时性高(优点)
  5. 需要预先在es中创建mapping关系(缺点)
  6. 每个索引都需要定义一个配置(中性)

下载

下载&&编译

git clone git@github.com:alibaba/canal.git
cd canal; 

切换至最新版本1.1.3,开始编译安装

mvn clean install -Dmaven.test.skip -Denv=release

编译完成后,会在根目录下的target文件夹产生三个压缩包:

  • canal.adapter-1.1.3.tar.gz (客户端)
  • canal.deployer-1.1.3.tar.gz (服务端)
  • canal.example-1.1.3.tar.gz (路人甲)

部署服务端

mysql配置binlog

首先配置mysqld中的binlog

[mysqld]
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

授予响应账号的权限

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

服务端

解压

tar zxvf canal.deployer-$version.tar.gz  -C /tmp/canal

修改配置vi conf/example/instance.properties
配置

	#################################################
	## 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 =
	canal.instance.connectionCharset = UTF-8
	
	
	#table regex
	canal.instance.filter.regex = .*\\..*
	
	
	#################################################

准备启动

sh bin/startup.sh

查看日志

vi logs/canal/canal.log

关闭

sh bin/stop.sh

客户端

解压adapter压缩包,配置application.yml

canal.conf:
  canalServerHost: 127.0.0.1:11111
  batchSize: 500
  syncBatchSize: 1000
  retries: 0
  timeout:
  mode: tcp 
  srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true
      username: root
      password: 121212
  canalAdapters:
  - instance: example 
    groups:
    - groupId: g1
      outerAdapters:
      - name: es
        hosts: 127.0.0.1:9300               # es 集群地址, 逗号分隔
        properties:
          cluster.name: elasticsearch       # es cluster name

adapter将会自动加载 conf/es 下的所有.yml结尾的配置文件
适配器表映射文件
修改 conf/es/mytest_user.yml文件:

dataSourceKey: defaultDS        # 源数据源的key, 对应上面配置的srcDataSources中的值
destination: example            # cannal的instance或者MQ的topic
groupId:                        # 对应MQ模式下的groupId, 只会同步对应groupId的数据
esMapping:
  _index: canal_test        # es 的索引名称
  _type: _doc                   # es 的doc名称
  _id: _id                      # es 的_id, 如果不配置该项必须配置下面的pk项_id则会由es自动分配
  upsert: true
#  pk: id                       # 如果不需要_id, 则需要指定一个属性为主键属性
  # sql映射
  sql: "select a.id as _id, a.name from canal_test a"
#  objFields:
#    _labels: array:;           # 数组或者对象属性, array:; 代表以;字段里面是以;分隔的
#    _obj: object               # json对象
  etlCondition: ""     # etl 的条件参数
  commitBatch: 3000                         # 提交批大小

启动

./start.sh

创建es相关mapping关系
修改mysql数据项,触发变化,数据则会同步至响应索引中

参考引用

  1. [1]搭建canal服务器(官网)
  2. [2]搭建canal clientAdapter(官网)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值