它是干啥用的?它是把你mysql的数据同步到es用的。
需要下载你用的es对应的logstash版本,就是版本号要相同。本文使用的是6.5.3
。
如果你是从上一篇过来的,那你需要su root,切换到root用户。
# cd /usr/local/
# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.3.tar.gz
# tar -zxf logstash-6.5.3.tar.gz
# cd logstash-6.5.3
# ./bin/logstash-plugin install logstash-input-jdbc
# cd bin/
# mkdir config-mysql
# cd config-mysql
下载mysql的连接包
# wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz
# tar -zxf mysql-connector-java-8.0.13.tar.gz
# rm mysql-connector-java-8.0.13.tar.gz
y+回车
新建配置文件
vi mysql.conf
内容
input {
stdin {
}
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
# 数据库用户名和密码
jdbc_user => "root"
jdbc_password => "root"
# jar包的位置,就是上面下载的mysql连接包
jdbc_driver_library => "/usr/local/logstash-6.5.3/bin/config-mysql/mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar"
# mysql的Driver
jdbc_driver_class => "com.mysql.jdbc.Driver"
# 开启分页查询
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 哪个表
statement => "select * from test"
# 每分钟执行一次
schedule => "* * * * *"
# 索引的类型
type => "test"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => "192.168.247.140:9200"
# index名
index => "test"
document_type => "test"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
jdbc 段说明
filter的json 段说明
output的elasticsearch 段说明
output的stdout 段说明
数据库名是test,表也是test,test表里面有id和name字段。
运行
# cd ..
# ./logstash -f config-mysql/mysql.conf
很久,等吧。如果你发现卡死了,那就是内存不够了。如果第一条写入成功,后面报错,那就是硬盘空间不够了。
它不会主动断掉,因为它会一直等待你数据库的更新。
新开一个终端,启动head插件
就能看到同步的数据了。
现在,新增一条数据,等一分钟。
查看head
后台运行
之前的ctrl+c,停止前台运行
# nohup ./logstash -f config-mysql/mysql.conf &
ctrl+c
等五分钟,第一次开启的话比较慢。可以查看你当前目录下的nohup.out文件,看启动情况。
已经启动了。现在再添加一条数据。
mysql与es的结构对比
mysql | ElasticSearch |
---|---|
数据库 | 索引 |
表 | 类型 |
行 | 文档 |
列 | 字段 |