Mysql+Canal1.1.5+Es实现数据同步

注:关于MySql和ES的安装过程,本篇文章不做详细描述

1.配置mysql 部分(binlog日志)

1)找到mysql中的my.ini文件(如下图)

2)修改my.ini中的配置,如下图 

 

port=3306
datadir=xxxxxxx
#开启binlog模式
log_bin=mysql-bin
binlog-format=row
#single DB
binlog-ignore-db=mysql

设置完成之后,重启mysql,输入命令查看binlog是否启用成功

show variables like '%log_bin%';

创建数据库canaldb

create database canaldb;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(64) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1557646692725239810 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2.es配置

1.建立索引如下:

http://localhost:9200/canaldb_user/


{
    "mappings": {
    	"properties": {
    	  "id":{
    	    "type": "integer"
    	  },
    		"name": {
    			"type": "text"
    		},
    		"sex": {
    			"type": "text"
    		},
    		"address": {
    			"type": "text"
    		}
    	}	
    }
}

3.配置canal(v1.1.5)部分

1)下载canal1.1.5 

     官方下载地址:Releases · alibaba/canal · GitHub

 

                如果下载很慢提供下载地址,如失效联系我:

                        链接:https://pan.baidu.com/s/1V9uZHA3WMIL5DfUTkjPhhQ 
                        提取码:bfwf

 2)配置 canal.deployer

canal.deployer-1.1.5\conf\example\instance.properties

修改为如下配置

 

启动 canal.deployer 进入canal.deployer-1.1.5\bin 双击 startup.bat

3)配置canal.adapter 

    1.配置canal.adapter-1.1.5\conf\bootstrap.yml 内容如下

     注意:hosts 一定要http:// 开头的

srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/canaldb?useUnicode=true
      username: canal
      password: canal
  canalAdapters:
  - instance: example # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
      - name: es7 #es配置,这里使用9200通信 也就是rest模式
        hosts: "http://127.0.0.1:9200"
        properties:
          mode: rest # or rest
#          # security.auth: test:123456 #  only used for rest mode
          cluster.name: elasticsearch #集群名字

   配置 canal.adapter-1.1.5\conf\es7\mytest_user.yml,将mytest_user.yml 改成user.yml

       具体配置如下代码:

dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
  _index: canaldb_user
  _id: id
#  upsert: true
#  pk: id
  sql: "select a.id,a.name,a.sex,a.address from user a"
#  objFields:
#    _labels: array:;
  etlCondition: "where a.id>={}"
  commitBatch: 3000

3.测试配置

完成以上配置按照以下配置重新启动 mysql->canal-deployer->canal.adapter 

启动成功结果如下

canal-deployer:

 canal.adapter:

注:canal.adapter启动可能会遇到如下异常
 

java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource

这个是因为Canal中的druid包和 canal.adapter\plugin\client-adapter.es7x-1.1.5-jar-with-dependencies.jar 包中的druid冲突了

为了省略打包等操作,下面我提供一个jar只需要替换(canal-v1.1.5\canal.adapter-1.1.5\plugin)里面的client-adapter.es7x-1.1.5-jar-with-dependencies.jar 就行了

测试数据

        1.数据库添加一条数据

        2:ccanal.adapter监听到日志: 如果出现 Affected indexes 则说明配置成功

 

 3.es查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值