elasticsearch和mysql使用canal做数据同步

本文介绍了如何使用canal和canal-adapter实现MySQL到Elasticsearch的数据同步。详细步骤包括:开启MySQL的binlog,配置canal-deployer和canal-adapter,解决canal.adapter与Elasticsearch的版本冲突问题,以及canal-admin的配置和使用。在同步过程中遇到了因用户权限和jar包冲突导致的错误,并提供了相应的解决方法。
摘要由CSDN通过智能技术生成

 

目录

前言

搭建环境

技术方案概览

MySQL配置

安装canal

canal-deployer的配置与使用

canal-adaptor的使用和配置

canal界面管理配置

启动canal-admin

出现的问题


前言

这句介绍有几个关键字:增量日志,增量数据订阅和消费。

这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具。

接下来我们看一张官网提供的示意图:

 

canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。 

搭建环境

  • 操作系统: CentOS Linux release 8.2.2004 (Core)
  • MySQL版本: mysql8.0.20
  • JDK版本:1.8(强力要求,否则会导致ES和canal-adapter无法启动)
  • ElasticSearch版本:7.6.0
  • canal版本: 1.1.3
  • zookeeper

技术方案概览

  • 开启MySQL的binary log日志记录
  • 修改MySQL的binary log模式为ROW
  • canal-server充当MySQL集群的一个slave,获取master的binary log信息
  • canal-server将拿到的binary log信息推送给canal-adapter
  • canal-server和canal-adapter采用多节点部署的方式提高可用性
  • canal-adapter将数据同步到es集群

MySQL配置

先配置mysql数据库,打开binlog写入功能,设置binlog-format为ROW。默认配置文件路径为 /etc/my.cnf

增加或者修改以下内容

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=row
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

配置完成后重新启动MySQL,重启后执行下面的SQL语句查看binlog是否启用:

show variables like '%log_bin%';

  再查看binlog模式:

show variables like 'binlog_format%';

接下来需要创建一个拥有从库权限的账号,用于订阅binlog,这里创建的账号为canal:canal;

CREATE USER canal IDENTIFIED BY 'canal';  

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

FLUSH PRIVILEGES;

安装canal

使用canal前请先确保安装了mysql、elasticsearch、jdk

本文章使用的各软件版本为MySQL 8.0.25,ElasticSearch 7.8.0,java-1.8.0-openjdk.x86_64

到canal github项目页面下载1.1.5版本的文件:Releases · alibaba/canal · GitHub

建议下载以下四个。其中下载源码是为了解决canal.adapter中的一个依赖冲突,要保存在自己开发用的电脑里,后面会讲到它。

canal的各个组件的用途各不相同,下面分别介绍下:
canal-deploy:用于监听MySQL的binlog,是一个伪装的MySQL从库,只负责从MySQL主库接收数据,不做处理。
canal-adapter:canal的客户端,从canal-deploy中获取数据,然后同步数据到目标数据源,我们用它将数据存储到ElasticSearch中。
canal-admin:为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。

canal-deployer的配置与使用

解压deployer:

mkdir canal_deployer

tar  -zxvf canal.deployer-1.1.5.tar.gz -C canal_deployer

修改配置文件conf/example/instance.properties

vi canal_deployer/conf/example/instance.properties

修改下面几项配置:

# 需要同步数据的MySQL地址
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=
# 用于同步数据的数据库账号
canal.instance.dbUsername=canal
# 用于同步数据的数据库密码
canal.instance.dbPassword=canal
# 数据库连接编码
canal.instance.connectionCharset = UTF-8
# 需要订阅binlog的表过滤正则表达式
canal.instance.filter.regex=.*\\..*

启动deployer:

canal_deployer/bin/startup.sh

启动成功后查看deployer的日志:

tail -f can
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值