大家好呀,我是楼仔。
技术是什么?就是拿来玩的,边玩边学,才能成长得更快。
之前已经给大家讲解了 MySQL 同步 ES 的几种方案,下面就教大家如何通过 Canal,将 MySQL 同步到 ES,文章内容绝对妥妥干货!
本文会先讲解需要用到的基础知识,然后再是软件安装,最后就是实战部分。
不 BB,上文章目录:
01 基础知识
1.1 主从复制原理
MySQL 的主从复制是依赖于 binlog,也就是记录 MySQL 上的所有变化并以二进制形式保存在磁盘上二进制日志文件。
主从复制就是将 binlog 中的数据从主库传输到从库上,一般这个过程是异步的,即主库上的操作不会等待 binlog 同步地完成。
详细流程如下:
- 主库写 binlog:主库的更新 SQL(update、insert、delete) 被写到 binlog;
- 主库发送 binlog:主库创建一个 log dump 线程来发送 binlog 给从库;
- 从库写 relay log:从库在连接到主节点时会创建一个 IO 线程,以请求主库更新的 binlog,并且把接收到的 binlog 信息写入一个叫做 relay log 的日志文件;
- 从库回放:从库还会创建一个 SQL 线程读取 relay log 中的内容,并且在从库中做回放,最终实现主从的一致性。
1.2 Cannel 基础
Canel 是一款常用的数据同步工具,其原理是基于 Binlog 订阅的方式实现,模拟一个 MySQL Slave 订阅 Binlog 日志,从而实现 CDC(Change Data Capture),将已提交的更改发送到下游。
主要流程如下:
- Canal 服务端向 MySQL 的 master 节点传输 dump 协议;
- MySQL 的 master 节点接收到 dump 请求后推送 Binlog 日志给 Canal 服务端,解析 Binlog 对象(原始为 byte 流)转成 Json 格式;
- Canal 客户端通过 TCP 协议或 MQ 形式监听 Canal 服务端,同步数据到 ES。
下面是 Cannel 执行的核心流程,其中 Binlog Parser 主要负责 Binlog 的提取、解析和推送,EventSink 负责数据的过滤 、路由和加工,仅作了解即可。
02 软件下载安装
我的电脑是 Macos-x64,所以后面的软件安装,都是基于这个。
2.1 Java JDK
- 官网:https://www.oracle.com/java/technologies/downloads/
- JDK 版本:11.0.19
由于 Canal 和 ES 的安装,都强依赖 JDK,所以这里有必要先说明。
前方高能,这里有坑!!!
如果你选的版本不对,ES 安装可能会失败,然后 Canal 同步数据到 ES 时,也会出现很多诡异的问题。
2.2 MySQL
MySQL 大家应该都安装了,这里需要打开 MySQL 的 BinLog。
我是 Mac,主要新建一个 my.cnf 文件,然后再重启 MySQL。
这里重启 MySQL,我搞了半天,BinLog 开启后,会看到 BinLog 日志。
然后需要创建一个账号,账号和密码都是 Cannal,给后面 Canal 使用。
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'localhost' IDENTIFIED BY 'canal' ;
2 条评论
回复