唉,生活所迫生活所迫,我又搞这些杂七杂八的啦,不记录一下也白瞎啦。这篇主要讲怎么把数据库里的数据直接导入到elastic search。参考的比较多的是这篇,写的非常好,可是我在实际操作的时候还是遇到了一些问题,所以自己写一个。写作的逻辑呢,就是怎么配置并且使用的全过程。
首先了解一下,logstash的主要工作原理是在配置文件中定义一个管道,用这个管道就可以完成全过程。因此你需要做的事情其实只有三步:
- 把logstash下载下来解压好,把mysql 对应版本的connector下载好
- 写配置文件
- 运行配置文件
1.运行elastic search 和 kibana
怎么安装的我就不讲啦,刚入门的娃娃应该也不会看这种文章。我的环境呢是windows,直接到es的Bin目录下启动elasticsearch.bat
文件就可以,启动之后在浏览器中输入localhost:9200
如果有返回值说明启动成功了。kibana呢是方便查看结果的,用不用都行吧,反正我用了。
2. 配置logstash
logstash是elastic search官方开发的用于整合数据的一个工具,它可以整合日志以及来自文件的两大类数据。整合日志的那个呢,官方教程里有我这里也就不细说了。我们今天要讲的是整合文件的数据,在这里其实是整合的数据库的数据。
配置文件就是我下面给出的,这个配置文件直接放在logstash的根目录下就行,命名为`。里面有个坑:注意观察数据库连接字符串,里面多了一个时区参数的定义,在这里我们一定要留心,否则会报错。还有个坑,如果数据库里有date类型的话,就不要在定义索引的时候定义date的格式,直接用默认就行啦,不然又是报错。
input {
jdbc {
# 数据库驱动路径
jdbc_driver_library => "D:/elasticsearch/logstash-6.5.3/mysql-connector-java-8.0.12.jar"
# 驱动名称
jdbc_driver_class => "com.mysql.jdbc.Driver"
# 数据库的连接字符串
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test_db?serverTimezone=UTC"
# 数据库用户名
jdbc_user => "root"
# 数据库密码
jdbc_password => "123456"
# 重复执行导入任务的时间间隔 分-时-日-月-星期
schedule => "* * * * *"
# 导入的表(查询SQL,可以过滤数据)
statement => "SELECT *from articles"
# 默认时区
jdbc_default_timezone => "Asia/Shanghai"
}
}
output {
elasticsearch {
# es地址
hosts => "127.0.0.1:9200"
# 索引名称
index => "articles"
# 索引类型
document_type => "_doc"
# 类似主键,es中id对应数据库的字段
document_id => "%{aid}"
}
stdout {
codec => plain { charset => "UTF-8"}
}
}
3.下载mysql connector
connector是程序用来连接数据库的驱动,可以去mysql的官网下载,但是现在居然还要注册啦,而且注册登陆都挺费劲的。不过好在可以直接去远程maven库中下载,什么版本的都有。
4.运行logstash
运行bin目录下的logstash脚本(我是用mingwin运行的),命令为logstash -f ../jdbc.cnf
就跑起来啦。