logstash实现ElasticSearch与mysql数据库同步
在使用elasticsearch开发查询功能时,数据的同步也是其中关键一步,这两天时间开发了个基于elasticsearch的全文搜索功能,顺便把如何实现elasticsearch与mysql的数据同步配置了一下。
操作系统:Linux centos7.x
1.安装logstash
(1)下载logstash,注意下载的版本需要和elasticsearch的版本一直,我elasticsearch版本是elasticsearch-6.5.1,下载的时候就需要下载logstash-6.5.1。
把logstash下载到你指定的目录,执行下载命令:wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.1.zip。
(2)解压logstash,执行命令:unzipvf logstash-6.5.1.zip
(3)测试logstash,进入logstash-6.5.1/bin,执行命令:./logstash -e ‘input { stdin { } } output { stdout {} }’,耐心等待一会,控制台提示启动成功后,输入一句话测试一下helloworld,回车后输出你输入的helloword则说明安装成功。
2.配置logstash:实现ElasticSearch与mysql数据库的数据同步,我们需要配置一下,把mysql中的数据同步到ElasticSearch。
(1)在logstash-6.5.1文件目录下新建一个文件夹,名字随意,我这里创建的是mysqltest文件夹。
(2)在mysqltest文件夹下首先创建mysql.conf文件,文件内容如下:
input {
stdin {
}
jdbc {
# mysql 数据库链接,shop为数据库名
jdbc_connection_string => "jdbc:mysql://192.168.2.205:3306/zhulu"
# 用户名和密码
jdbc_user => "root"
jdbc_password => "root"
# 驱动,我这里把驱动也放到mysqltest目录下了
jdbc_driver_library => "/usr/download/logstash-6.5.1/mysqltest/mysql-connector-java-5.1.7-bin.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 执行的sql 文件路径+名称
statement_filepath => "/usr/download/logstash-6.5.1/mysqltest/test.sql"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
# 索引类型
type => "item"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => ["192.168.2.205:9200"]
index => "dingding"
document_id => "%{item_id}"
}
stdout {
codec => json_lines
}
}
(3)创建一个sql文件,命名为test.sql(名称随意)和上边mysql.conf的配置文件一致,需要往elasticsearch中同步哪些字段自己定义。
SELECT
item_id,
type_id,
title,
summary,
content
FROM item
(4)注意最后不要忘记把mysql驱动放到文件夹里面!
3.启动logstash,启动命令:./logstash -f mysqletc/mysql.conf,我这个写法的当前启动目录是logstash-6.5.1文件夹下。稍等片刻就会看到数据同步了。