以下插件实现MySQL数据自动同步到Elasticsearch的功能
go-mysql-elasticsearch
是一种将MySQL数据自动同步到Elasticsearch的服务。
它首先用于mysqldump获取原始数据,然后使用binlog逐步同步数据。
优点:支持实时增删改
缺点:只支持有主键的表
logstash-input-jdbc
优点:操作简单
缺点:最快10s同步一次数据。支持增改,不支持删除
go-mysql-elasticsearch
使用前须知
数据库目前只支持有PK(PRIMARY KEY)
github: https://github.com/siddontang/go-mysql-elasticsearch
步骤:
- cd /go/src
- go get github.com/siddontang/go-mysql-elasticsearch
- cd github.com/siddontang/go-mysql-elasticsearch
- make
- 按照教程修改etc/river.toml
- ./bin/go-mysql-elasticsearch -config=./etc/river.toml
- 可以在 http://127.0.0.1:12800/stat 上查看操作情况
分享一些遇到的问题及解决方案
问题点 | 错误原因 | 解决方案 |
---|---|---|
mysqldump: Error: Binlogging on server not active mysqldump: Error: Binlogging on server not active ERRO[0000] canal dump mysql err: exit status 2 ERRO[0000] start canal err exit status 2 |
mysql没有启动备份(binlog日志 | mac目录:/usr/local/etc/my.cnf 添加 log_bin=ON log_bin_basename=/usr/local/var/mysql/mysql-bin log_bin_index=/usr/local/var/mysql/mysql-bin.index 或者log-bin=/usr/local/var/mysql/mysql-bin 如果报错,添加server-id=123454 (随便制定一个字符串) 重启 mysqld restart 在/usr/local/var/mysql下看是否生效:可以看到多个mysql-bin和多个mysql-bin.index文件 |
mysqldump: Couldn’t execute ‘show fields from v_crm ‘: SELECT command denied to user ‘’@’%’ for column ‘phone’ in table ‘crm_passenger’ (1143)ERRO[0000] canal dump mysql err: exit status 2 ERRO[0000] start canal err exit status 2 |
data_dir = “./var”注释掉之后的错误 原因:mysql该用户权限不够 |
mysql新建一个全局层级用户: mysql -uroot -p 登录 CREATE USER ‘dump’@’%’ IDENTIFIED BY ‘12345’; GRANT ALL PRIVILEGES ON . TO ‘dump’@’%’ IDENTIFIED BY ‘12345’; FLUSH PRIVILEGES; |
没有报错,但是es上也没有数据 | mysql该用户权限不够 | (同上) |
没有 PRIMARY KEY的表无法同步到es | 目前不支持 | 不支持 |
原始数据第一次运行时,没有同步到es | 该插件只支持binlog更新 注释掉data_dir = “./var” 同步到es之后,命令行可以查找数据,但是discover上无法显示数据 |
待解决 |
logstash-input-jdbc
安装步骤
- logstash安装
- logstash-plugin install logstash-input-jdbc 安装jdbc
- 在logstash/bin下创建mysqltoes.conf,添加以下内容(见配置文件)
- ./logstash -f mysqltoes.conf
配置文件
|
|
配置文件说明
- jdbc_driver_library 为mysql驱动包的路径
- tracking_column_type 此处是根据 update_time作为增量更新的条件,故为timestamp类型
- last_run_metadata_path 存放上次更新的偏移量文件
- update_time>:sql_last_value 设置为增量更新
- tracking_column 增量更新选取的字段
- index 索引名,只支持小写
- document_type 类型
- document_id id(要保持唯一性)
问题点及解决方案
问题点 | 原因 | 解决方案 | |
---|---|---|---|
logstash无法退出 | - | 杀死logstash进程: ps -ef |
grep logstash (用户 进程编号) kill -9 |