本文主要向大家介绍了MySQL数据库之mysql 同步数据到 ElasticSearch 的方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

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有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

elastic如何和mysql同步数据_MySQL数据库之mysql 同步数据到 ElasticSearch 的方案相关推荐

  1. mysql case默认_MySQL数据库架构和同步复制流程

    在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的. 首先我们来说说数据库的架构. 1.mysql主从架构,如图: 这种架构 ...

  2. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案

    MySQL数据库主从没有同步的两种解决方案 发布时间:2020-05-13 13:54:57 来源:亿速云 阅读:190 作者:三月 栏目:数据库 下文主要给大家带来MySQL数据库主从没有同步的两种 ...

  3. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...

    该篇文章我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例.下面学步园小编来讲解下MySQL数据库非法关机造成数据表损坏怎么排查? MySQL数据库非法关机造成 ...

  4. mysql插10万条数据_MySQL数据库插入100w条数据要花多久?

    MySQL数据库插入100w条数据要花多久? 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理SQL 4.多值插入SQL 5.事务(N条提交一次) # 多线程插入(单表) 问:为何对同一个表 ...

  5. mysql中如何去除重复数据_mysql数据库如何去除重复数据

    mysql数据库去除重复数据的方法:1.查询需要删除的记录,会保留一条记录:2.删除重复记录,只保留一条记录,代码为[delete a from test1 a, (...)as bid from t ...

  6. mysql longblob 读取_MySQL数据库之Mysql的longblob字段插入数据问题解决

    本文主要向大家介绍了MySQL数据库之Mysql的longblob字段插入数据问题解决 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 在使用mysql的过程中,有个问题就是my ...

  7. mysql入门优化_MySQL数据库:MySQL十大优化技巧详解

    本文主要向大家介绍了MySQL数据库的MySQL十大优化技巧详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是 ...

  8. mysql binary模式_MySQL数据库之MySQL的binary类型操作

    本文主要向大家介绍了MySQL数据库之MySQL的binary类型操作 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 示例数据表: CREATE TABLE test_bin  ...

  9. mysql 内存大_MySQL数据库之MySQL大内存配置方案

    本文主要向大家介绍了MySQL数据库之MySQL大内存配置方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySql noinstall-5.1.xx-win32 配置(原 ...

最新文章

  1. 从Visual Studio里抓取抽象语法树(AST)
  2. scikit_image
  3. 2021-11-04Oracle19c 图形化安装,在windoes上)
  4. (Spring)使用注解开发
  5. Java设计模式-代理模式 理论代码相结合
  6. BugKuCTF WEB flag在index里
  7. JavaScript高级之构造函数和原型
  8. Consecutive Sum LightOJ - 1269(区间异或和)
  9. 【SpringBoot】自动装配原理
  10. Spring boot : @PostConstruct @PreDestroy
  11. 【报告分享】2021年度私域经营洞察报告.pdf(附下载链接)
  12. 【IT之路】LoadRunner系列-Loadrunner 11破解汉化
  13. 调试运行计算机程序的目的是,软件调试的目的是什么
  14. linux安装iscsi设备,linux系统下安装配置iSCSI教程
  15. 共享Excel编辑的一些资源
  16. 边云协同的优点_关于边缘计算和边云协同,看这一篇就够了
  17. c++ STL 算法一
  18. sftp、nohup、lftp、scp命令
  19. Fitbit融资7.3亿美元上市了 成可穿戴设备第一股
  20. 【Pandas】筛选某列过滤

热门文章

  1. juniper SSG 导出导入配置
  2. 周傲英、熊辉、李飞飞助阵!期待与你的大数据之约(附大会终版日程)
  3. uni-app引入腾讯地图
  4. 搭建3D可视化智慧园区-园区导航及可视化应用-助力园区向数字化转型
  5. iPhone13 pro拍摄风格自定功能有什么用 具体使用方法
  6. python实现弹球小游戏
  7. 那个卖猪肉的北大毕业生,曾经受尽嘲讽,现在身价过亿了
  8. 前端如何提交数据给后端(包含前端和后端代码)
  9. 发明导诊机器人团队_导诊机器人品牌
  10. 近距离细观戴尔超轻薄金属商务本Vostro V131