mysql数据同步到ElasticSearch中 之 logstash

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

下载

官网连接

https://www.elastic.co/cn/downloads/past-releases#logstash

下载自己对应的版本
在这里插入图片描述

上传

将下载好的压缩包上传到Linux服务器

安装

解压

tar -zxvf logstash-7.12.1-linux-x86_64.tar.gz

下载 jar 包

https://mvnrepository.com

搜索 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值