欢迎投稿

今日深度:

使用 go-elasticsearch 实时同步 MySQL 数据到 ES,本文给出以同步mys

使用 go-elasticsearch 实时同步 MySQL 数据到 ES,本文给出以同步mys


当需要把 MySQL 的数据实时同步到 ES 时,为了实现低延迟的检索到 ES 中的数据或者进行其它数据分析处理。本文给出以同步 mysql binlog 的方式实时同步数据到 ES 的思路,实践并验证该方式的可行性,以供参考。

mysql binlog 日志

MySQL 的 binlog 日志主要用于数据库的主从复制和数据恢复。binlog 中记录了数据的增删改查操作,主从复制过程中,主库向从库同步 binlog 日志,从库对 binlog 日志中的事件进行重放,从而实现主从同步。

mysql binlog 日志有三种模式,分别为:

  • ROW:记录每一行数据被修改的情况,但是日志量太大。
  • STATEMENT:记录每一条修改数据的 SQL 语句,减少了日志量,但是 SQL 语句使用函数或触发器时容易出现主从不一致。
  • MIXED:结合了 ROW 和 STATEMENT 的优点,根据具体执行数据操作的 SQL 语句选择使用 ROW 或者 STATEMENT 记录日志。

要通过 mysql binlog 将数据同步到 ES 集群,只能使用 ROW 模式,因为只有 ROW 模式才能知道 mysql 中的数据的修改内容。下文为以 UPDATE 操作为例,ROW 模式和 STATEMENT 模式的 binlog 日志内容。

  • ROW 模式的 binlog 日志内容示例如下:
SET TIMESTAMP=1527917394/*!*/;
BEGIN
/*!*/;
# at 3751
#180602 13:29:54 server id 1  end_log_pos 3819 CRC32 0x8dabdf01 	Table_map: &#

www.htsjk.Com true http://www.htsjk.com/Elasticsearch/44214.html NewsArticle 使用 go-elasticsearch 实时同步 MySQL 数据到 ES,本文给出以同步mys 当需要把 MySQL 的数据实时同步到 ES 时,为了实现低延迟的检索到 ES 中的数据或者进行其它数据分析处理。本文给出以同...
评论暂时关闭