当前位置: 首页>数据库>正文

ES索引迁移 logstash logstash迁移es数据

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

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

安装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;感谢

  • mysql的timestamp数据类型问题

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

.conf文件的编写规范文档

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


END

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



https://www.xamrdz.com/database/6vh1923168.html

相关文章: