MySQL数据同步到ES7
本文主要讲述MySQL数据如何同步到ES7
使用go-mysql-elasticsearch开源同步工具
简介
开源工具github地址
go-mysql-elasticsearch的基本原理是:如果是第一次启动该程序,首先使用mysqldump工具对源mysql数据库进行一次全量同步,通过elasticsearch client执行操作写入数据到ES;然后实现了一个mysql client,作为slave连接到源mysql,源mysql作为master会将所有数据的更新操作通过binlog event同步给slave, 通过解析binlog event就可以获取到数据的更新内容,之后写入到ES。
另外,该工具还提供了操作统计的功能,每当有数据增删改操作时,会将对应操作的计数加1,程序启动时会开启一个http服务,通过调用http接口可以查看增删改操作的次数。
使用事项
MySQL binlog必须是ROW模式;
要同步的mysql数据表必须包含主键,否则直接忽略,这是因为如果数据表没有主键,UPDATE和DELETE操作就会因为在ES中找不到对应的document而无法进行同步;
不支持程序运行过程中修改表结构;
要赋予用于连接mysql的账户RELOAD权限以及REPLICATION权限, SUPER权限;
1
2
3GRANT REPLICATION SLAVE ON *.* TO 'elastic'@'172.16.32.44';
GRANT RELOAD ON *.* TO 'elastic'@'172.16.32.44';
UPDATE mysql.user SET Super_Priv='Y' WHERE user='elastic' AND host='172.16.32.44';
利用Binlog和Kafka实时同步mysql数据到Elasticsearch
分析
binlog中间件,负责解析binlog,把变动的数据以json的格式发送给kafka;
kafka中间件,负责消费kafka队列中的Message,把数据写入到elasticsearch中;
使用Canal将MySQL数据同步到Elasticsearch
canal简介
阿里巴巴开源的canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步到MySQL、Elasticsearch、HBase等数据存储中去。
canal工作原理
canal会模拟MySQL主库和从库的交互协议,从而伪装成MySQL的从库,然后向MySQL主库发送dump协议,MySQL主库收到dump请求会向canal推送binlog,canal通过解析binlog将数据同步到其他存储中去。
canal的使用
首先我们需要下载canal的各个组件canal-server
、canal-adapter
、canal-admin
- calnal-server(canal-deploy) : 可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理;
- canal-adapter:相当于canal的客户端,会从canal-server中获取数据,然后对数据进行同步,可以同步到MySQL、Elasticsearch和HBase等存储中去;
- canal-admin:为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。
注:不同版本的MySQL、Elasticsearch 和 canal 会有兼容性问题,要注意版本。