MySQL Binlog

  要通过 MySQL binlog 将 MySQL 的数据同步给 ES, 我们只能使用 row 模式的 binlog。如果使用 statement 或者 mixed format,我们在 binlog 里面只能知道对应的 query 语句,完全没法知道这条语句到底改了啥数据,所以要从 binlog 里面得到实际的数据,只能用 row 模式。

  Row 模式还可以设置 full,noblob 以及 minimal 三种 image 模式,后面两种主要是为了减少空间占用,默认是 full。个人其实最喜欢 full 模式,这样数据最全,而且也觉得空间占用对于现在的硬盘来说不是特别大的问题,毕竟我们还有定期清理 binlog 的机制。

  同步 MySQL binlog 就很简单了,按照 MySQL replication 的协议,自己写一个客户端,模拟成 MySQL slave,注册给 MySQL master 就可以了。MySQL master 会实时的将数据的更新通过 binlog event 发送给 slave,然后我们自己解析 event 之后就能得到实际的数据了。

  具体实现这里不做过多说明,大家可以参考 MySQL Client/Server Protocol 细致的了解 MySQL 的 protocol,binlog events 等相关知识。其中在 go-mysql项目里面实现了相关的 replication功能。

MySQL dump

  如果是一个新建 MySQL,我们当然可以通过 binlog 的方式方便的同步数据。但如果我们想同步一个已经运行一段时间的 MySQL ,就可能会有问题了。因为这时候早期的 binlog 文件已经被删除,如果直接开始同步,我们就可能会缺失一部分早期更新的数据。

  要解决这个办法也比较容易,参考 MySQL 通用的 backup 方式,我们可以先使用 mysqldump 获取当前 MySQL 的整个 snapshot,直接解析生成的 dump 文件,就能得到当前所有的数据。然后在从这个 snapshot 对应的 binlog position 位置开始同步。

  整个这套流程也在 go-mysql 的 canal 里面实现。

另外一种方式

  可以使用 mtime 时间戳进行控制,增加一个辅助标量 flag(标记是否删除),这样在索引系统中定时通过 mtime 过滤数据,在通过 flag 标志位指示是否已经被删除的数据;这里就会有两种方案去处理:

  1. 当 flag 标记为删除,则在执行索引的时候使用 delete 直接将 ElasticSearch 中的数据删除掉  
  2. 不区分 flag 标签,直接索引到 ElasticSearch 中去,在搜索的时候将 flag 为删除的数据过滤掉

mysql 同步数据到 ElasticSearch 的方案的更多相关文章

  1. elasticsearch -- Logstash实现mysql同步数据到elasticsearch

    配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ...

  2. 利用logstash从mysql同步数据到ElasticSearch

    前面一篇已经把logstash和logstash-input-jdbc安装好了. 下面就说下具体怎么配置. 1.先在安装目录bin下面(一般都是在bin下面)新建两个文件jdbc.conf和jdbc. ...

  3. 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索

    安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...

  4. 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用

    一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...

  5. 如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch

    在开发过程中,我们经常会遇到对业务数据进行模糊搜索的需求,例如电商网站对于商品的搜索,以及内容网站对于内容的关键字检索等等.对于这些高级的搜索功能,显然数据库的 Like 是不合适的,通常我们采用 E ...

  6. 关于MySQL导入数据到elasticsearch的小工具logstash

    logstash核心配置文件pipelines.yml #注:此处的 - 必须顶格写必须!!! - pipeline.id: invitation #下面路径配置的是你同步数据是的字段映射关系 pat ...

  7. Mongo同步数据到Elasticsearch

    个人博客:https://blog.sharedata.info/ 最近需要把数据从Mongo同步到Elasticsearch环境:centos6.5python2.7pipmongo-connect ...

  8. 『现学现忘』Docker基础 — 31、实现MySQL同步数据

    目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...

  9. ElasticSearch(1)---Mysql同步数据到ElSearch

    ElasticSearch同步Mysql 先讲项目需求:对于资讯模块添加搜索功能 这个搜索功能我就是采用ElasticSearch实现的,功能刚实现完,所以写这篇博客做个记录,让自己在记录下整个步骤和 ...

随机推荐

  1. 作业 20181127-3 互评Beta版本

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2448 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙赛佳 ...

  2. Linux基础入门--06

    简单的文本处理 实验介绍 这一节我们将介绍这几个命令:tr.col.join.paste 1.tr: -d:删除和set1匹配的字符,不是全词匹配也不是按字符顺序匹配 -s:除去指定的连续并重复的字符 ...

  3. “私人助手”Beta版使用说明

    私人助手(Beta)版使用说明 私人助手这款软件是通过添加事件提醒功能,让用户能在正确的时间做正确的事情,使得工作变得更有效率,而这款软件的特色在于提醒模式的添加,用户可以通过震动.铃声提醒,我们的特 ...

  4. pktgen-dpdk 实战

    官方手册:http://pktgen-dpdk.readthedocs.io/en/latest/getting_started.html 过程 开机(重启) 把DPDK那一套流程走一遍(环境变量设置 ...

  5. mysql 函数示例(转)

    MySQL函数大全及用法示例 1.字符串函数ascii(str)   返回字符串str的第一个字符的ascii值(str是空串时返回0)  mysql> select ascii('2');   ...

  6. PHP学习心得2

    对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小 ...

  7. service依赖dao的接口进行数据传输

    service依赖dao的接口进行数据传输

  8. C++模式学习------模板模式

    模板模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模板模式是一种很常用的模式,在很多的框架或者基类重载的时候都 ...

  9. 题解 P2026 【求一次函数解析式】

    高中方式轻松解决这个模拟题. 首先我们了解斜率的简单求法: \[k= {y2-y1 \over x2-x1}{=}{\Delta y \over \Delta x}\] 然后我们了解到让我们求解一次函 ...

  10. Repeats SPOJ - REPEATS(重复次数最多的连续重复子串)

    论文题例8 https://blog.csdn.net/queuelovestack/article/details/53031731这个解释很好 其实,当枚举的重复子串长度为i时,我们在枚举r[i* ...