Mysql和ElasticSearch通过canal实现数据同步

目录

一、环境配置

二、myslq安装

三、ES安装

四、canal-admin安装

4.1 配置修改

4.2 启动canal-admin

五、canal-deployer安装

5.1配置canal-admin

5.2配置mysql的连接配置

5.3启动canal服务

六、配置canal-adapter

6.1配置application.yml

6.2适配器表映射文件

6.3启动adapter

6.4测试


Mysql和ElasticSearch实现数据同步的插件比较多,对比过来还是选择了阿里的canal,下面是几个同步插件的对比图。

                

目前canal的最新稳定版1.1.4不支持ES7.X,如果需要配合使用ES7.X,可以去官网下载最新的1.1.5的测试版本,也可以在这个地址下载:

canal-1.1.4:https://download.csdn.net/download/doupengzp/12672559

canal-1.1.5https://download.csdn.net/download/doupengzp/12695456

一、环境配置

系统环境win10企业版
mysql版本5.7
ES版本6.8.11
canal版本1.1.4

二、myslq安装

参考:https://blog.csdn.net/doupengzp/article/details/103801062

mysql安装完成,需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

log-bin=mysql-bin          #添加这一行就ok
binlog-format=ROW          #选择row模式
server_id=1                #配置mysql replaction需要定义,不能和canal的slaveId重复
expire_logs_days=5         #日志过期时间为5天   

创建测试表

CREATE TABLE `user`  (
  `id` int(10) NOT NULL,
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `role_id` int(10) NOT NULL,
  `c_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
  `c_utime` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

三、ES安装

参考:https://www.jianshu.com/p/8910c4869df5

创建索引并配置mapping,我是elasticsearch-head插件里面直接进行可视化创建的

{"properties":

  {
    "name":{"type":"text","fields":{"keyword":{"type":"keyword"}}},
    "role_id":{"type":"long"},
    "c_time":{"type":"date"}
   }
}

四、canal-admin安装

4.1 配置修改

修改 conf/application.yml,需要注意的是如果数据库使用的mysql8,需要下载mysql8的连接驱动jar包放在lib文件夹下,然后修改application.yml里面数据的连接驱动名称,数据库的连接地址url上需要指定时区(serverTimezone=GMT%2B8)

server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
  address: 192.168.0.15:3306
  database: canal_manager
  username: root    
  password: 123456
  #driver-class-name: com.mysql.jdbc.Driver
  #mysql8数据库连接驱动
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&serverTimezone = GMT&useSSL=false
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: admin

4.2 启动canal-admin

启动bin目录下的startup.bat

启动后控制台无报错,浏览器地址输入http://127.0.0.1:8089/ 访问,默认密码:admin/123456

五、canal-deployer安装

5.1配置canal-admin

如果安装了canal-admin,需要先修改conf/canal.properties的canal admin config配置如下

# canal admin config
canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441

5.2配置mysql的连接配置

修改conf/example/instance.properties

## mysql serverId
canal.instance.mysql.slaveId = 1234
#position info,需要改成自己的数据库信息
canal.instance.master.address = 192.168.0.15: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 = root
canal.instance.dbPassword = 123456
canal.instance.defaultDatabaseName =
canal.instance.connectionCharset = UTF-8
#table regex
canal.instance.filter.regex = .\*\\\\..\*
#可根据需要修改主题名称
canal.mq.topic=example
 

5.3启动canal服务

启动bin目录下的startup.bat,查看logs目录下的日志看是否有报错

六、配置canal-adapter

6.1配置application.yml

这里面比较重要的配置就是elasticserach的连接端口需要配置成9300,9200 是 HTTP 协议的 RESTful 接口,9300 是 TCP 通讯端口,集群间和 TCPClient 都走的它。集群的命名cluster.name,如果ealsticsearch没有配置,不需要修改,默认集群名称为ealsticsearch。也可以参照canal的官网进行配置https://github.com/alibaba/canal/wiki/Sync-ES

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: 192.168.0.15:11111
#  zookeeperHosts: slave1:2181
#  mqServers: 127.0.0.1:9092 #or rocketmq
#  flatMessage: true
  batchSize: 500
  syncBatchSize: 1000
  retries: 0
  timeout:
  accessKey:
  secretKey:
  srcDataSources:
    defaultDS:
      url: jdbc:mysql://192.168.0.5:3306/admin?useUnicode=true
      username: root
      password: 123456
  canalAdapters:
  - instance: example
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
#      - name: rdb
#        key: mysql1
#        properties:
#          jdbc.driverClassName: com.mysql.jdbc.Driver
#          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
#          jdbc.username: root
#          jdbc.password: 121212
#      - name: rdb
#        key: oracle1
#        properties:
#          jdbc.driverClassName: oracle.jdbc.OracleDriver
#          jdbc.url: jdbc:oracle:thin:@localhost:49161:XE
#          jdbc.username: mytest
#          jdbc.password: m121212
#      - name: rdb
#        key: postgres1
#        properties:
#          jdbc.driverClassName: org.postgresql.Driver
#          jdbc.url: jdbc:postgresql://localhost:5432/postgres
#          jdbc.username: postgres
#          jdbc.password: 121212
#          threads: 1
#          commitSize: 3000
#      - name: hbase
#        properties:
#          hbase.zookeeper.quorum: 127.0.0.1
#          hbase.zookeeper.property.clientPort: 2181
#          zookeeper.znode.parent: /hbase
      - name: es
        key: exampleKey
        hosts: 192.168.0.15:9300
        properties:
          #mode: rest
          # security.auth: test:123456 #  only used for rest mode
          #cluster.name: my-application
          cluster.name: elasticsearch

6.2适配器表映射文件

修改 conf/es/mytest_user.yml文件:

dataSourceKey: defaultDS        # 源数据源的key, 对应上面配置的srcDataSources中的值
destination: example            # cannal的instance或者MQ的topic
groupId: g1
esMapping:
  _index: mytest_user
  _id: _id
#  upsert: true
#  pk: id
  sql: "select a.id as _id, a.name from user a"
#  objFields:
#    _labels: array:;
  etlCondition: "where a.c_time>={}"
  commitBatch: 3000

6.3启动adapter

启动bin目录下的startup.bat

6.4测试

在mysql的user表中添加数据

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现MySQL数据实时同步Elasticsearch可以使用Canal工具。 Canal是阿里巴巴开源的一套基于数据库增量日志解析的数据同步和逆向解析工具,可以实时获取数据库的变更日志,然后将这些变更日志解析成数据并发送到指定的目的地。在实现MySQL数据实时同步Elasticsearch,可以使用Canal实现以下步骤: 1. 安装配置Canal:首先,需要下载并安装Canal,并配置Canal的参数,如MySQL的地址、端口、用户名、密码等。 2. 创建Canal实例:根据实际需求,可以创建一个或多个Canal实例来监控和同步MySQL的变更日志。 3. 配置Elasticsearch目的地:配置Canal将变更日志发送到Elasticsearch作为同步的目的地。 4. 启动Canal实例:通过命令行或脚本启动Canal实例,让Canal开始监控MySQL的变更日志。 5. 解析并同步数据:Canal会实时监控MySQL的变更日志,一旦有变更,就会解析并发送到Elasticsearch。在Elasticsearch,可以根据业务需求进行相应的处理,比如数据转换、数据筛选、数据拆分等,并将处理后的数据存储到Elasticsearch。 通过以上步骤,就可以实现MySQL数据的实时同步Elasticsearch。Canal工具可以很好地解析MySQL的增量日志并将数据发送到Elasticsearch,保证数据的实时性和一致性。同时,Canal还支持分布式部署和高可用性,可以满足大规模数据同步的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值