ElasticSearch学习:logstash安装并使用logstash-jdbc-input与mysql数据库同步
2017-10-23 13:43
676 查看
前言:
大多数情况下我们的数据都存放在了数据库中,但是elasticsearch他有自己的索引库,那么如果我们在做搜索的是时候就需要将数据库中的数据同步到elasticsearch中,在这里我们使用logstash的logstash-jdbc-input的插件进行与数据库的同步,对于logstash与数据库同步,我们可以设置elasticsearch与数据库同步的时间,使用这种方式进行同步还是很方便的。
一、安装logstash
1.1下载logstash
注意下载的版本要和你的elasticsearch的版本号一致,我的版本elasticsearch5.5.2
Logstash下载:https://www.elastic.co/downloads/logstash
1..2安装logstash
1.2.1如果你是windows系统,直接解压就可以
1.2.2linux系统,以cenos7举例,进行解压
1.3.1windows系统进行启动,输入命令
1.3.2linux系统启动,进入bin目录
二、配置logstash-jdbc-input
这里先声明一下:
对于logstash2.x版本是没有集成[b]logstash-jdbc-input插件的需要我们自己去安装,如果你是2.x版本可以参考:http://blog.csdn.net/yeyuma/article/details/50240595 这位老铁的文章;[/b]
[b]对于logstash5.x版本他自身已经集成了这个插件,不需要我们去单独安装,直接使用即可,我这里说一下与mysql进行同步的简单配置[/b]
<
bf8d
p>[b]2.1在logstash文件目录下创建一个文件夹,命名随意,我这里是mysqletc[/b]
[b]
[/b]
2.1.1首先创建一个mysql.conf的文件
2.1.2创建一个sql文件,我这里命名为shop.sql和上边的配置文件一致
2.2启动logstash
启动命令
启动完成后,稍等片刻,我们就可以看到同步的数据了
logstash会一直进行与数据库的信息进行同步
三、问题:
1.时间格式问题:
如果我们在同步mysql数据库中,涉及到时间的字段,格式设置成datetime,我们创建的index时间mapping设置为type:date,format:yyyy-MM-dd HH:mm:ss;那么直接进行同步,就会同步失败。如图:
解决方案:在同步过程中,将时间进行处理,我这里通过sql语句将时间进行格式化,在同步到es中
2.数据同步问题:
当然这个同步对于新增或更新数据还是很友好的,对于删除数据就会有影响。
通过查资料对我来说以下方案比较合适:
在原有的mysql数据库表中,新增一个字段status, 默认值为ok,如果要删除数据,实则用update操作,status改为deleted.
这样,就能同步到es中。es中以status状态值区分该行数据是否存在。deleted代表已删除,ok代表正常。
如果这种方案不适合你,你可以参考这位大牛的博客:http://blog.csdn.net/laoyang360/article/details/51747266
大多数情况下我们的数据都存放在了数据库中,但是elasticsearch他有自己的索引库,那么如果我们在做搜索的是时候就需要将数据库中的数据同步到elasticsearch中,在这里我们使用logstash的logstash-jdbc-input的插件进行与数据库的同步,对于logstash与数据库同步,我们可以设置elasticsearch与数据库同步的时间,使用这种方式进行同步还是很方便的。
一、安装logstash
1.1下载logstash
注意下载的版本要和你的elasticsearch的版本号一致,我的版本elasticsearch5.5.2
Logstash下载:https://www.elastic.co/downloads/logstash
1..2安装logstash
1.2.1如果你是windows系统,直接解压就可以
1.2.2linux系统,以cenos7举例,进行解压
tar –zxvf logstash-5-5-21.3启动
1.3.1windows系统进行启动,输入命令
bin/logstash -e 'input { stdin { } } output { stdout {codec=>rubydebug} }'然后你会发现终端在等待你的输入。没问题,敲入 Hello World,回车,然后看看会返回什么结果!
1.3.2linux系统启动,进入bin目录
./logstash -e 'input { stdin { } } output { stdout {} }'同上,输入hello word,显示一下内容说明安装成功
二、配置logstash-jdbc-input
这里先声明一下:
对于logstash2.x版本是没有集成[b]logstash-jdbc-input插件的需要我们自己去安装,如果你是2.x版本可以参考:http://blog.csdn.net/yeyuma/article/details/50240595 这位老铁的文章;[/b]
[b]对于logstash5.x版本他自身已经集成了这个插件,不需要我们去单独安装,直接使用即可,我这里说一下与mysql进行同步的简单配置[/b]
<
bf8d
p>[b]2.1在logstash文件目录下创建一个文件夹,命名随意,我这里是mysqletc[/b]
[b]
[/b]
2.1.1首先创建一个mysql.conf的文件
input { stdin { } jdbc { # mysql 数据库链接,shop为数据库名 jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/esshop" # 用户名和密码 jdbc_user => "root" jdbc_password => "root" # 驱动 jdbc_driver_library => "D:/elasticsearch/logstash-5.5.2/mysqletc/mysql-connector-java-5.0.8.jar" # 驱动类名 jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" # 执行的sql 文件路径+名称 statement_filepath => "D:/elasticsearch/logstash-5.5.2/mysqletc/shop.sql" # 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新 schedule => "* * * * *" # 索引类型 type => "content" } } filter { json { source => "message" remove_field => ["message"] } } output { elasticsearch { hosts => ["localhost:9200"] index => "cmscontent" document_id => "%{id}" } stdout { codec => json_lines } }
2.1.2创建一个sql文件,我这里命名为shop.sql和上边的配置文件一致
SELECT * FROM content2.1.3最后需要把一个jdbc驱动放到这个文件夹下,用来连接mysql数据库(一定不要忘记)
2.2启动logstash
启动命令
./logstash -f ../mysqletc/mysql.conf
启动完成后,稍等片刻,我们就可以看到同步的数据了
GET /_search
logstash会一直进行与数据库的信息进行同步
三、问题:
1.时间格式问题:
如果我们在同步mysql数据库中,涉及到时间的字段,格式设置成datetime,我们创建的index时间mapping设置为type:date,format:yyyy-MM-dd HH:mm:ss;那么直接进行同步,就会同步失败。如图:
原因:在mysql直接取出来的时间字段,他是带有时区的时间格式,与es创建mapping中的yyyy-MM-dd HH:mm:ss不符合,所有导致同步失败。
解决方案:在同步过程中,将时间进行处理,我这里通过sql语句将时间进行格式化,在同步到es中date_format(created,'%Y-%m-%d %H:%i:%s' ) as created
2.数据同步问题:
当然这个同步对于新增或更新数据还是很友好的,对于删除数据就会有影响。
通过查资料对我来说以下方案比较合适:
在原有的mysql数据库表中,新增一个字段status, 默认值为ok,如果要删除数据,实则用update操作,status改为deleted.
这样,就能同步到es中。es中以status状态值区分该行数据是否存在。deleted代表已删除,ok代表正常。
如果这种方案不适合你,你可以参考这位大牛的博客:http://blog.csdn.net/laoyang360/article/details/51747266
相关文章推荐
- ElasticSearch5.4.3使用logstash的logstash-input-jdbc实现mysql数据同步
- 使用logstash-6.2.2和logstash-input-jdbc插件实现mysql数据同步到Elasticsearch
- elasticSearch数据导入工具logstash-input-jdbc 同步原理及相关问题解读
- logstash-input-jdbc实现mysql 与elasticsearch实时同步
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- logstash-input-jdbc实现oracle 与elasticsearch实时同步详解
- Elasticsearch同步mysql(logstash-input-jdbc)和一些查询问题
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
- elasticsearch与数据库同步工具Logstash-input-jdbc
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- Logstash的logstash-input-jdbc插件mysql数据同步ElasticSearch及词库
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
- logstash安装与logstash-input-jdbc插件使用
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8
- logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
- Elasticsearch系列(九)----使用Logstash-input-jdbc同步数据库中的数据到ES