之前安装了elasticsearch(elasticsearch基于centos安装),学习了简单的用法(elasticsearch的简单使用)。实际使用过程中,需要将mysql数据库的数据同步到elasticsearch。
准备:
logstash-7.8.1.tar (新版本已经自带了logstash-input-jdbc,不用再安装了) 下载地址:logstash下载。
mysql-connector-java-8.0.23 下载地址:下载。
准备一个本地mysql数据库,随便任何数据都可以。
1、安装logstash,我放在了/usr/local目录下:
cd /usr/local/
tar -zxvf logstash-7.8.1.tar.gz
#修改目录名称
mv logstash-7.8.1 logstash
2、logstash目录下创建文件夹jar,将mysql-connector-java-8.0.23放到logstash/jar目录下。
3、logstash/config目录下,复制一份logstash-sample.conf文件,并重命名为logstash.conf。
4、修改logstash.conf。
input {
beats {
port => 5044
}
jdbc {
# 数据库连接驱动绝对路径
jdbc_driver_library => "/usr/local/mysql-connect/mysql-connector-java-8.0.23.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
# 数据库连接
jdbc_connection_string => "jdbc:mysql://192.168.137.1:3306/es?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"
# 用户名
jdbc_user => "root"
# 密码
jdbc_password => "123456"
# 是否需要记录某个column 的值,如果record_last_run为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
use_column_value => true
# 如果 use_column_value 为真,需配置此参数.
tracking_column => update_time
# 是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
#record_last_run => true
#last_run_metadata_path => "./logstash_capital_bill_last_id"
# 要执行的sql存储的文件
statement_filepath => "/usr/local/logstash/sql/article.sql"
# 是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
clean_run => false
# 这里类似crontab,可以定制定时操作,比如每分钟执行一次同步(分 时 天 月 年),默认每分钟一次
schedule => "* * * * *"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
# 索引名称
index => "article"
# 主键
document_id => "%{id}"
#user => "elastic"
#password => "changeme"
}
}
5、在/usr/local/logstash/sql/路径下创建文件article.sql,里面sql为:
select * from luc_article where update_time > :sql_last_value
6、运行服务,到/usr/local/logstash目录下,运行
bin/logstash -f config/logstash.conf
可以看到服务启动成功,用postman查看article索引下的数据,数据已经导入elasticsearch了。
7、多个表导入,对于一次导入多个表,可以在配置文件里面的input里面写多个jdbc,jdbc里面加type标签,在output里面根据type标签区分,保存不同的索引。如下:
input {
jdbc {
type => "tb1"
XXXXXXXX
XXXXXXXX
}
jdbc {
type => "tb2"
XXXXXXXX
XXXXXXXX
}
jdbc {
type => "tb3"
XXXXXXXX
XXXXXXXX
}
}
output{
if[type] == "tb1"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "tb1"
document_id => "%{id}"
}
}
if[type] == "tb2"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "tb2"
document_id => "%{id}"
}
}
if[type] == "tb3"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "tb3"
document_id => "%{id}"
}
}
}