如何把mysql中的数据同步到elasticsearch中?
至于ES,我还没有没有在实际项目中应用过(我自己学过,没有t没经过实战);我们的项目使用MongoDB;由于项目的特殊性,我们研究了很多关于A-gtB的数据同步方案,包括DB2/Mysql到MongoDB,MongoDB到MongoDB等等。
将MySQL数据同步到es的方案将MySQL数据实时同步到ES,可以实现ES中的低延迟检索。有的公司为自己的项目做了子库,可以设置一套es来放所有的数据(或者所有数据的某些字段,达到全检索的效果)。常用的数据同步方案如下:
MySQLBinlog:MySQLBinlog日志可以用于数据库的主从复制和数据恢复,也可以将MySQL数据同步到ES;这里需要注意的是,Binlog的日志模式只能使用行模式(另外两种模式是语句和混合);解析Binlog日志的内容,执行ES文档API,这样数据就可以同步到ES中;
MySQLdump:如果是新建项目,使用Binlog进行数据同步是没有问题的。但是如果MySQL已经运行了一段时间,项目架构中加入了ES,那么历史数据的迁移就需要额外的处理,因为Binlog可能已经被覆盖了。此时可以通过mysqldump导出已有数据,然后使用Binlog来同步历史数据。
开源工具:前两种方法都是数据库日志级别的,我们也可以使用一些开源工具,比如Go-Go-MySQL-elasticsearch;;它可以帮助我们完成第一次完全数据同步和后续的增量数据同步(底层也是解析Binlog日志);或者mypip
MySQL主从复制能完美解决数据库的单点问题吗?为什么?
没有完美的解决方案。只有正确的解决方案。
在使用主从的时候,我们其实已经放弃了强一致性。因为实验对象只问了一个问题,他没有问。;不要考虑访问量。即假设主从复制可以完全支持当前的系统访问。)
常规数据库主从设置:
主库可以读写。
从库中只读意味着系统可以从主库和从库中获取数据。数据写入主库后,会自动同步到从库。
这就构成了一个简单的分布式系统。根据cap定理,三个只能选一个。主从终于一致了。如果它们强一致,系统可用性不但不会提高,反而会降低。
让让我们看看上面的主从结构可能会出现什么问题:
系统写入主库,然后从主库查询。这是单点数据库,没有影响。
系统写入主库,然后从从库检查:-如果数据已经同步,它没有影响。
-如果数据尚未同步,则查询是旧数据。
-如果同步出现问题,主机和从机将断开连接。如果系统可以如果没有察觉到,查询可能总是旧数据。这里需要对同步进行监控,当同步出现问题时,及时处理。
主库挂机。从库需要及时察觉,替换主库。同时需要通知运维人员处理,否则会变成单点。
挂在图书馆。主库数据无法与从库同步。也要及时通知处理。
如果主从切换自动化,单点故障的概率只会降低50%(如果主库或备用库挂起,无人恢复)。