mysql 数据实时同步到 Elasticsearch 注意事项
网上有很多推荐 mysql 数据同步到 Elasticsearch 的方案,有大哥 canal,python 的 mysqlsmom,还有 go 的 go-mysql-elasticsearch,在我自己项目中用的是 go-mysql-elasticsearch,给大家随便讲讲我遇到的一些小问题,先看看官方提到的注意事项。
- ES 的版本
关于 ES 的版本官方支持为
MySQL supported version < 8.0
ES supported version < 6.0
我的 ES 当前版本在 7.7.0 下运行依然运行成功
- 开启 mysql binlog 日志,且必须为 ROW 格式
通常配置文件都是在 mysql 的 my.cnf,不知道在哪的可以用 whereis my.cnf
找到,然后把 binlog_format
配置 cat /etc/my.cnf|grep binlog_format
修改成 ROW,重启!
show variables like '%binlog_format%'
- mysqldump 没有同步成功数据
执行 ./bin/go-mysql-elasticsearch -config=./etc/river.toml
命令开始后首先会执行 mysqldump 同步数据,如果 info 提示
[2020/07/08 10:40:23] [info] dump.go:180 skip dump, use last binlog replication pos (mysql-bin.000004, 4) or GTID set <nil>
说明 mysqldump 同步并没有成功,很有可能是因为./etc/river.toml 里的 data_dir 指定的目录没有删除,这时候去删除这个目录里面的master.info
,再次运行可以看到已经 dump 成功, 参考这个 https://github.com/siddontang/go-mysql-elasticsearch/issues/115