记录·使用logstash将mysql中的数据迁移到elasticsearch

本文只做操作记录,不做深度研究

笔者的业务需求是多快好省的将mysql的指定数据迁移到elasticsearch中

Logstash6.6官方原文文档,打不打得开随缘😂

安装logstash

  • ⚠环境是centos7,已经配置好java环境且安装配置了可用的elasticsearch6.6

下载tar包

https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz

使用shell工具将tar放入服务器并解压

tar -zxvf logstash-6.6.0.tar.gz

下载mysql驱动包(本人放置在logstash/bin目录下),可以去maven官网下载,或者从你本地的gradle或者maven仓库里拿(基本都有的吧)

安装之后编写脚本文件fileName.conf

#数据source
input {
 stdin { }
    jdbc {
        #mysql信息
        jdbc_connection_string => "jdbc:mysql://ip:port/dbName?***"
        jdbc_user => "root"
        jdbc_password => "ZHjPDhoigjk="
        #本地jar包,注意路径
        jdbc_driver_library => "mysql-connector-java-8.0.18.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"
        #获取到记录的SQL查询语句
        statement => "SELECT * FROM tb"
        #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
        #schedule => "* * * * *"
    }
 }
 #数据target
 output {
     stdout {
        codec => json_lines
    }
    elasticsearch {
        #ES信息
        hosts => "ip:9200"
        index => "book"
        document_type => "book"
        #这里指定es的id由sql中的哪个列映射
        document_id => "%{id}"
    } 
 }

指定脚本文件启动logstash

cd logstash-6.6.0/bin/ ./logstash -f fileName.conf

另外也可以直接写脚本命令,如

cd logstash-6.6.0/bin/ ./logstash -e input{{stdin {}}output {stdout {}}

以上的步骤可实现最基本的数据迁移,使用kibana或者head插件查看es上是否成功导入数据

⚠问题

centos中执行logstash的用户问题

elasticsearch的中不允许使用root账户进行操作,本想着logstash应如是,笔者创建新用户并授权文件夹进行操作—chomd -R logstash6.6/ newUser,却发现只有在root用户的执行下,才能稳定的执行成功。

字段映射问题
  • 意料外的字段@version、@timestamp

直接使用默认模板进行数据迁移,生成的elasticsearch的mappings会多出@timestamp@version字段

  • 字段驼峰命名问题
select bookName from tb

bookName 会在elasticsearch存在为 bookname,解决方法为在.conf文件的jdbc配置中新增配置lowercase_column_names => false;感谢 https://blog.csdn.net/Winner941112/article/details/83177863

  • mysql的timestamp数据类型问题

想要获得理想的时间格式可以使用date插件去完成,笔者将mysql数据导入到elasticsearch后,数据的格式是这样的2020-01-09T07:02:02.000Z,并且时间也不对,而时候springboot写的程序获取es数据时,数据的时间却是合理的格式正确的时间,故笔者没在logstash的执行脚本上做任何时间格式化的操作。

.conf文件的编写规范文档

(!!*******!脏话系统自动屏蔽),由于网络原因,笔者无法打开logstash的文档,查不了,后续会补上!


END

PS:
springboot可以整合logstash进行日志的操作,有时间的话可以尝试一下直接在springboot中做mysql-elasticsearch的数据迁移,只要代码的植入性不要太强

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值