Mysql与Elasticsearch数据实时同步

Mysql与Elasticsearch数据实时同步

背景需求: App搜索商品功能.
原使用xunsearch(迅搜),现在代码重构后端使用java开发,用不上xunsearch,换成了Elasticsearch.
需将实时mysql数据库中商品信息数据同步到Elasticsearch. 中间需要一个中间件来做数据同步,在gtihub上找到个go-mysql-elasticsearch看上去很符合当前需要。
go-mysql-elasticsearch数据同步,从MySQL同步到Elasticsearch,就是MySQL主从一样,只是从库是Elasticsearch.
GitHub项目源码: https://github.com/siddontang/go-mysql-elasticsearch
下面开始部署.

1.MySQL环境

1.1.需要启用binlog模式Row模式

1.2.需要配置server_id

1.3.MySQL配置
配置文件: /etc/my.cnf


2.Elasticsearch部署

2.1.Java环境

2.2.部署Elasticsearch

2.3.配置Elasticsearch

配置文件:/etc/elasticsearch/elasticsearch.yml

2.4.服务管理

2.5.端口与访问

访问地址: http://192.168.8.21:9200/


3.Go语言环境

脚本自动部署go语言环境

版本


4.包管理工具godep

5.插件go-mysql-elastisearch


6.规范应用程序go-mysql-elastisearch

编译好的go程序规范放到应用目录

# 下载服务管理脚本

# 启用停止服务


7.MySQL测试数据

7.1.创建数据库表

库名: pets_db
表名: cats
字段: id,name

7.2.数据库连接用户授权


8.配置go-mysql-elastisearch

配置文件: /usr/local/mysql-elasticsearch/etc/river.toml


9.ES搜索

9.1.搜索”波斯猫”
curl -H “Content-type: application/json” -XPOST http://192.168.8.21:9200/name_index/_search?pretty -d'{“query”: { “match_phrase”: { “name”: “波斯猫” } }}’

9.2.搜索”索马里猫”
curl -H “Content-type: application/json” -XPOST http://192.168.8.21:9200/name_index/_search?pretty -d'{“query”: { “match_phrase”: { “name”: “索马里猫” } }}’

9.3.搜索”猫”
curl -H “Content-type: application/json” -XPOST http://192.168.8.21:9200/name_index/_search?pretty -d'{“query”: { “match_phrase”: { “name”: “猫” } }}’


10.更新数据再搜索

把波斯猫替换成狸花猫

再搜索下狸花猫,马上就搜索到了。
curl -H “Content-type: application/json” -XPOST http://192.168.8.21:9200/name_index/_search?pretty -d'{“query”: { “match_phrase”: { “name”: “狸花猫” } }}’

11.删除数据再搜索

再删除狸花猫

再搜索狸花猫,已经搜索不到了。
curl -H “Content-type: application/json” -XPOST http://192.168.8.21:9200/name_index/_search?pretty -d'{“query”: { “match_phrase”: { “name”: “狸花猫” } }}’

文章来自LinuxHub原创,如需技术支援,右侧扫码备注。