canal 1.1.7安装 (同步es7)

本文详细介绍了如何使用Canal从MySQL的binlog文件中抓取数据,包括设置Mysql的binlog日志,下载并安装Canal服务(canal-admin,canal-deployer,canal-adaptor),以及如何配置它们来实现数据同步到ES。
摘要由CSDN通过智能技术生成

前置准备

canal读取Mysql的 binlog文件实现数据同步操作,所以一定要保证Mysql的binlog日志功能正常开启
开启极其简单且网上大把教程,这里跳过这一步。
查看binlog二进制文件信息,执行show master status 查看内容

字段名解释
File表示当前正在写入的二进制日志文件的名称。
Position表示当前正在写入的二进制日志文件的位置(偏移量)。它指示了下一个事件将从文件的哪个位置开始写入。
Binlog_Do_DB表示正在复制的数据库。如果设置了–replicate-do-db选项,则只复制指定的数据库。
Binlog_Ignore_DB表示被忽略复制的数据库。如果设置了–replicate-ignore-db选项,则不复制指定的数据库。
Executed_Gtid_Set表示当前已执行的全局事务标识(GTID)集合。GTID用于在主从复制中唯一标识每个事务。
Auto_Position表示是否启用了自动位置(auto-positioning)模式。如果启用了自动位置模式,则File和Position字段将被忽略。

下载安装Canal服务

软件版本
jdk1.8.0_231
mysql8.0.30
canal1.1.7

Canal 下载地址:github
服务说明:

服务说明
canal-admincanal控制台,可以统一管理canal服务,选择下载(建议下载,配置简单,功能强大)
canal-deployercanal-server,相当于canal同步的一个节点,必须下载
canal-adapercanal的适配器,在canal-deployer读取binlog后提供给其它服务做后续操作,canal-adaper提供了配置式将canal-deployer变更记录同步至其它平台(如ES)的服务,如果有需求使用canal同步数据至ES等平台,下载此服务
source-codecanal源码,使用canal-adaper的强烈建议下载,在本地部署调试,adaper目前还有很多坑需要本地部署调试才能发现错误

安装canal-admin

一、下载解压canal-admin

二、替换mysql connector(可选)
这里我使用的是mysql 8.0.30,我下载admin时lib里面的mysql-connector-j-8.0.33.jar为8.0.33,差距不大我这边没有替换,若过低版本需要去Mysql官网下载接近的驱动 驱动链接,替换lib文件夹中的文件

三、初始化脚本
在canal-admin conf文件夹中有一个canal_manager.sql,在数据库中执行该sql
在这里插入图片描述
执行完后得到以下表
在这里插入图片描述
此时可在canal_user中增加一条数据
password 是你想设置密码的MD5值

INSERT INTO canal_user
(id, username, password, name, roles, introduction, avatar, creation_date)
VALUES(1, 'admin', '6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'Canal Manager', 'admin', NULL, NULL, now());

四、修改application.yml 文件
打开application.yml (建议备份)

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

  -- canal_manager.sql执行sql所在数据库信息
spring.datasource:
  address: 数据库地址
  database: 数据库名
  username: root
  password: 数据库密码
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&autoReconnect=true
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

  -- 系统管理员信息与canal_user对应 密码明文
canal:
  adminUser: admin
  adminPasswd: 123456

五、启动admin
打开bin文件夹,哪个平台就使用哪个平台启动文件(startup.xx)。启动成功后输入http://127.0.0.1:8089/,输入默认账号admin/密码即可访问

安装canal-deployer

一、下载解压canal-deployer

二、替换mysql connector(可选)
这里我使用的是mysql 8.0.30,我下载admin时lib里面的mysql-connector-j-8.0.33.jar为8.0.33,差距不大我这边没有替换,若过低版本需要去Mysql官网下载接近的驱动 驱动链接,替换lib文件夹中的文件

三、修改配置文件
在conf目录下,修改canal.properties(建议备份)

# 当前节点ip
canal.register.ip = 127.0.0.1

# canal admin 配置(admin相关配置,密码为admin密文)
canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
# admin auto 自动注册
canal.admin.register.auto = true
canal.admin.register.cluster =
canal.admin.register.name = 

四、启动服务
打开bin文件夹,哪个平台就使用哪个平台启动文件(startup.xx)。

五、admin管理端查看
启动deployer后一般就会在admin server页面中出现,如果没有出现则需要自己点击新建server 来创建
在这里插入图片描述

六、配置instance
我们启动deployer 还需要配置instance来告诉canal,具体监听Mysql数据库的哪些数据建库,表字段等等信息,这里就需要配置instance。
在这里插入图片描述
点击载入模板后出现示例模板,以下是一些配置说明,简单使用时大部分都可以不写
在这里插入图片描述
我们先配置数据库链接,这里是指当前instance监听数据库地址账号密码,这里不指定binlog,canal会自动去取最新的数据
在这里插入图片描述
然后配置数据库表

# mysql 数据解析关注的表,可使用正则表达式(如果有分表全部都在这里配置,不要一张表一个instance)
canal.instance.filter.regex=baseinfo\\.product_base.*|baseinfo\\.product_prc.*
# canal将会过滤那些不符合要求的table
canal.instance.filter.black.regex=

最后保存即可

七、测试
在刚刚instance作用数据库表中,新增/修改一些数据,然后我们就能从admin 的instance日志中查看到日志
在这里插入图片描述
如果有报错,对照instance日志查看具体错误(注意不是deployer日志)

八、注意事项
① 这里instance可使用正则匹配数据,所以若目标表分表则使用正则匹配,注意转义符
② 若在admin上删除instance,该instance数据不会立刻删除,建议将cannal-deployer\conf 中该instance数据一同删除。

安装canal-adpter(以同步ES 7为例)

一、下载解压canal-adpter

二、替换mysql connector(可选)
这里我使用的是mysql 8.0.30,我下载admin时lib里面的mysql-connector-j-8.0.33.jar为8.0.33,差距不大我这边没有替换,若过低版本需要去Mysql官网下载接近的驱动 驱动链接,替换lib文件夹中的文件

三、配置adpter配置
打开conf 中 application.yml,我们先只修改注释的地方
① adpter基本配置

canal.conf:
  mode: tcp 
  flatMessage: true
  zookeeperHosts:
  batchSize: 500 # 表示每次从 Canal Server 获取的数据变更事件的批量大小。
  syncBatchSize: 1000 # 表示每次同步到目标数据库的数据变更事件的批量大小。
  retries: 1 # 失败后重试次数,-1为无限次,线上一定不能为-1
  srcDataSources:
    defaultDS: # 监听数据库
      url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&autoReconnect=true 
      username: 账号
      password: 密码
    defaultDS2: # 监听数据库2(分库示例)
      url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&autoReconnect=true 
      username: 账号
      password: 密码

设置es同步

canalAdapters:
  - instance: product_instance # 这里对应的是deployer配置的instance
    groups:
    - groupId: product_spu_group # 分组名
      outerAdapters:
      - name: es7 # 适配器名(会读取anal-adapter\conf中的同名文件)
        key: product_spu_0  # 适配器key
        hosts: http://127.0.0.1:9200  # es地址
        properties:
          mode: rest # or rest         # 可指定transport模式或者rest模式,这里一定要写rest
          security.auth: es账号:es密码     # only used for rest mode
          cluster.name: dev-es      # es cluster name

四、配置adpter-mapping

dataSourceKey: defaultDS   # 源数据源的key, 对应上面配置的canal.conf.srcDataSources中的值
outerAdapterKey: product_spu_0  # 对应application.yml中es配置的key
destination: product_instance # cannal的instance或者MQ的topic
groupId: product_spu_group  # 对应MQ模式下的groupId, 只会同步对应groupId的数据
esMapping:
  _index: product_spu # es对应索引
  _type: _doc
  _id: _id
  sql: "映射sql"
  etlCondition: "where a = {} and b >= {}"
  commitBatch: 3000

五、启动测试
打开bin文件夹,哪个平台就使用哪个平台启动文件(startup.xx)。
这里可以先手动同步一次数据 es7就是mapping所在文件夹名,后面接着文件名,data中的参数是mapping表中etlCondition 参数,多个以;隔开

curl --location 'http://127.0.0.1:8081/etl/es7/product_10.yml' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'params=2024-01-24;391849160212480'
  • 32
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值