es与mysql数据同步 (go-mysql-es)

简介

go-mysql-elasticsearch是一款开源的高性能的Mysql数据同步ES的工具,其由go语言开发,编译及使用非常

简单。go-mysql-elasticsearch的原理很简单,首先使用mysqldump获取当前MySQL的数据,然后在通过此

时binlog的name和position获取增量数据,再根据binlog构建restful api写入数据到ES中

注意

  • mysql binlog必须是ROW模式
//设置为ROW模式
set global binlog_format="ROW";//查看模式
show global variables like "%binlog_format%";
  • 要同步的mysql数据表必须包含主键,否则直接忽略,这是因为如果数据表没有主键,UPDATE和DELETE操作就会因为在ES中找不到对应的document而无法进行同步
  • 不支持程序运行过程中修改表结构

es创建索引

PUT /products/
{"mappings":{"properties":{"name":{"type":"text","analyzer":"ik_smart"},"long_name":{"type":"text","analyzer":"ik_smart"},"brand_id":{"type":"integer"},"category_id":{"type":"integer"},"shop_id":{"type":"integer"},"price":{"type":"scaled_float","scaling_factor":100},"sold_count":{"type":"integer"},"review_count":{"type":"integer"},"status":{"type":"integer"},"create_time":{"type":"date"},"last_time":{"type":"date"}}}
}

go-mysql-elasticsearch部署

1 . 拉取取go-mysql-elasticsearch镜像

docker pull gozer/go-mysql-elasticsearch

2 . 创建一个目录用于存储配置文件

mkdir /docker/go-mysql-es cd /docker/go-mysql-es touch go_mysql_river.toml

文件内容如下

my_addr = "172.17.0.4:3306"   --mysql地址与端口
my_user = "root"         --mysql用户
my_pass = "root"         --mysql密码
my_charset = "utf8"          --字符集
enable-relay = truees_addr = "172.17.0.7:9200"  --es的地址与端口
es_user = ""             --es用户名
es_pass = ""             --es密码data_dir = "/docker/data"  --存储数据目录stat_addr = "127.0.0.1:12800"    --服务器内部地址
stat_path = "/metrics"server_id = 1001flavor = "mysql"mysqldump = ""                  --备份文件#skip_master_data = falsebulk_size = 128flush_bulk_time = "200ms"skip_no_pk_table = false[[source]]
schema = "lmrs"      --同步的mysql数据库名称
tables = ["lmrs_products"]       --同步的mysql表#es 映射的mapping
[[rule]]
schema = "lmrs"
table = "lmrs_products"          # es的索引名
index = "products"               --同步的es索引
type = "_doc"                    --同步的es类型filter = ["id", "name","long_name","brand_id","shop_id","price","sold_count","review_count","status","create_time","last_time","three_category_id"]   --同步哪些字段[rule.filed]    --mysql的three_category_id替换es的category_id
mysql = "three_category_id"
elastic = "category_id"

3 . 构建go-mysql-elasticsearch容器

docker run -p 12345:12345 -d --name go-mysql-es \-v /docker/go-mysql-es/go_mysql_river.toml:/config/river.toml:ro \--privileged=true \gozer/go-mysql-elasticsearch

注释:启动好后,就会自动把数据同步到es中

产生的问题:

1 . 数据库中已有的数据,不会触发同步到es中,会一直出现一个报错

2 . 编辑数据库的内容,也会出现这个问题

:如下

已知的解决方案 :

有可能在导入数据的时候,生成的日志并不是 ROW模式的数据,导致无法吧数据同步到es中,解决方案是mysql更改为ROW模式后,重新导入/生成(INSERT INTO 的方式) 数据表中的数据

es与mysql数据同步 (go-mysql-es)相关推荐

  1. k8s mysql数据同步_K8s——MySQL实现数据持久化

    1.搭建nfs存储 [root@docker-k8s01 ~]# yum -y install nfs-utils [root@docker-k8s01 ~]# mkdir /nfsdata/mysq ...

  2. ES和MySQL数据同步(简略版)

    一.在docker配置elasticsearch和kibana 1.注:elasticsearch和kibana的版本要一致 elesticsearch --拉取镜像 docker pull dock ...

  3. MYSQL数据同步到ES7

    ** 概述 ** 现在的项目数据量越来越大,全文检索功能使用场景也越来越普遍. 而我们一般的生产数据是在mysql,或其它一些数据库, 我们的产品数据就是mysql,而又要使用全文检索, 所以要把my ...

  4. liunx下通过Canal将MySQL数据同步到Elasticsearch

    liunx下通过Canal将MySQL数据同步到Elasticsearch 一.canal背景信息 Canal是Github中开源的ETL(Extract Transform Load)软件 cana ...

  5. Mysql 数据同步到 Elasticsearch

    阅读目录 说明 1 同步原理 2 插件 logstash-input-jdbc go-mysql-elasticsearch elasticsearch-jdbc 3 logstash-input-j ...

  6. 通过Canal将MySQL数据同步到elasticsearch (mysql8+canal1.1.5+canal-adapter1.1.5+elasticsearch6.7.0+ik6.8.6)

    经过几天的的深入研究(网上的文档很多,但是坑不少,少一个配置可能就走入了死胡同),特此将我部署的过程意义道来(参考文档通过Canal将MySQL数据同步到阿里云Elasticsearch - 检索分析 ...

  7. RabbitMQ实现ElasticSearch和MySQL数据同步

    RabbitMQ实现ElasticSearch和MySQL数据同步 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 RabbitMQ实现ElasticSearch和MySQ ...

  8. MySql数据同步(双机热备)已正式应用上平台

    经过一个多月的测试MYSQL的双机同步数据还是很不错的. 在家庭ADSL的4M的带宽下,有10个人在应用此网络,MYSQL数据同步还是照样正常,我想在正常的平台环境肯定更即时,效率更高! 但同时需要注 ...

  9. MySQL数据同步的一个很初级运用

    PHP程序员基本上都离不开MySQL,今天转载一篇关于MySQL数据同步的一个很初级运用. 今天由于工作需要,配置了一下主从同步,这里记录一下配置过程,以备查阅. 事先度娘了一番,主从同步需要保证主从 ...

最新文章

  1. R语言使用ggplot2包的快速可视化函数qplot绘制分组分组点图(带状图)实战
  2. 利用脚本将文字插入到图片或进行多个图片拼接
  3. 关于遗留系统维护的讨论
  4. Tomcat的安装和运行
  5. 手把手教你用Java的swing制作计算器
  6. 前端学习(3252):react脚手架
  7. php mysql 秒杀_redis+PHP实现高并发下秒杀数据入库的问题
  8. 关于在页面跳转前alert()不能弹出消息的问题
  9. java面试宝典pdf下载_Java面试问答PDF电子书免费下载(250+问题,60页)
  10. 2019年10月江苏计算机二级C语言编程题解析
  11. python里面的pip是什么意思_python中pip是什么
  12. MongoDB 数据全量备份
  13. python游戏计分代码_Python笔试题之设计“跳一跳”小游戏计分器
  14. odi12配置mysql_Oracle Data Integrator 12c 安装(ODI安装)
  15. 商品库存清单案例java_JAVA实现简单的商城库存清单
  16. vue 图片放大、缩小、旋转、滚轮操作图片放大缩小
  17. android 水滴动画效果图,Android控件实现水滴效果
  18. 技术笔记:Wordpress建站,解决无法外网访问的方法
  19. python selenium学习之新浪微博
  20. 计算机农业类的sci,农学类比较好投的SCI期刊有哪些

热门文章

  1. 数据结构与算法(b站老甲鱼)
  2. STC89C52单片机I2C通信以及AT24C02介绍使用代码演示
  3. 基于 LAMP 架构实现 Discuz 论坛搭建
  4. potentially fixable with the `--fix` option,解决此问题
  5. 高速行驶过程中如何应用目标检测实现提前感知?
  6. 快速了解药物设计中的靶标识别与预测
  7. 通信行业的一些基础知识
  8. ultraedit php 提示,UltraEdit 支持php文档特殊显示的配置(_php
  9. LaTeX公式语法大全
  10. 腾讯云对象存储服务的使用