mysql数据同步到ElasticSearch中 之 logstash
由于数据库某些表比较大,查询起来比较慢,所以采用 ElasticSearch 搜索引擎来进行查询。数据库的数据就需要同步到 ElasticSearch 中;也在网上搜了一些工具,对比了一下最终选择了 logstash ;没有为什么,就是看起来部署相对简单一点。如果有什么坑,还请不要喷我
版本
我这里的版本是
mysql : 8.0.25
ElasticSearch : 7.12.1
Kibana : 7.12.1
logstash : 7.12.1
mysql-connector-java-8.0.21.jar
下载
官网连接
下载自己对应的版本
上传
将下载好的压缩包上传到Linux服务器
安装
解压
tar -zxvf logstash-7.12.1-linux-x86_64.tar.gz
下载 jar 包
搜索 mysql-connector-java
选择自己合适的版本下载
配置
1、在 lib 目录下 新建 mysqljars 文件夹
这个文件夹用来放jar包的,路径可以按自己喜好来,后面配置文件里对应好就行
mkdir mysqljars
将 下载好的 mysql-connector-java-8.0.21.jar 包 ,上传到 该目录下
pwd
复制一下目录(备用)
2、 在 config 目录下 新建 mysql.conf 配置文件,并编辑
touch mysql.conf
vi mysql.conf
input {
jdbc {
jdbc_driver_library => "/opt/elasticSearch/logstash-7.12.1/lib/mysqljars/mysql-connector-java-8.0.21.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
# 数据库相关配置
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/text_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"
jdbc_user => "*****"
jdbc_password => "*****"
statement => "SELECT * FROM `test_0` UNION ALL SELECT * FROM `test_1` UNION ALL SELECT * FROM `test_2`"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
schedule => "* * * * *"
}
jdbc {
jdbc_driver_library => "/opt/elasticSearch/logstash-7.12.1/lib/mysqljars/mysql-connector-java-8.0.21.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
# 数据库相关配置
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test_1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"
jdbc_user => "*****"
jdbc_password => "*****"
statement => "SELECT * FROM `test_0` UNION ALL SELECT * FROM `test_1` UNION ALL SELECT * FROM `test_2`"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
schedule => "* * * * *"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
document_id => "%{id}"
document_type => "_doc"
index => "discusspost"
hosts => ["http://127.0.0.1:9200"]
}
stdout {
codec => rubydebug
}
}
input
我这里有做分库分表处理 所以有两个 jdbc,这个视情况而定
jdbc_driver_library : 刚刚复制的 jar包 路径
jdbc_driver_class、jdbc_connection_string、jdbc_user、jdbc_password 跟项目中的配置一摸一样就好
statement : 要同步的数据查询sql
output
document_type : type
index : 索引
hosts : elasticsearch 集群
官网配置信息网站
有兴趣可以自己去看看
https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
3、日志文件
如果没有 logs 目录,可以新建一个
mkdir logs
启动
检查 elasticsearch 是否正常运行
curl http://127.0.0.1:9200
在确保 elasticsearch 正常运行的情况下,执行命令
nohup bin/logstash -f config/mysql.conf > logs/logstash.out &
查看进程
ps -ef|grep logstash
进入 logs 目录下查看 logstash.out 文件
cat logs/logstash.out
就能看到 mysql 的数据 同步到 elasticsearch 中的日志了
如果日志量很大,不想存日志
先停服务,杀进程
kill -9 进程ID
再执行 启动命令
./bin/logstash -f config/mysql.conf &
不过这样之后日志信息会直接打印到界面上,退出Linux 重新登上去就好了。(我也搞不懂为啥)
也可以写个脚本,定期去清这个日志文件
echo “” > logstash.out
在 Kibana 中查看 数据
GET /discusspost/_doc/_search
参考博客:
https://blog.csdn.net/w_linux/article/details/84555506
https://www.cnblogs.com/tianyamoon/p/10058495.html
https://blog.csdn.net/xiaobo5264063/article/details/103103615
https://www.cnblogs.com/hardy-wang/p/13880369.html