zoukankan      html  css  js  c++  java
  • logstash-jdbc-input与mysql数据库同步

    大多数情况下我们的数据都存放在了数据库中,但是elasticsearch它有自己的索引库,那么如果我们在做搜索的是时候就需要将数据库中的数据同步到elasticsearch中,在这里我们使用logstash的logstash-jdbc-input的插件进行与数据库的同步,对于logstash与数据库同步,我们可以设置elasticsearch与数据库同步的时间,使用这种方式进行同步还是很方便的。

    1、下载并安装logstash

     注意下载的版本要和你的elasticsearch的版本号一致,我的版本elasticsearch6.2.2

    logstash下载地址:https://www.elastic.co/downloads/logstash

    下载后之后,直接解压就好

    (elasticsearch的环境搭建可参考http://www.cnblogs.com/xuwenjin/p/8745624.html)

    2、配置logstash

    对于logstash5.x以上版本,它自身已经集成了这个插件,不需要我们去单独安装,直接使用即可。我这里说一下与mysql进行同步的简单配置

    在logstash文件目录下,新建一个文件夹(命名随意)。如:mysql

    2.1 先把一个jdbc驱动放到这个文件夹下,用来连接mysql数据库

      使用maven项目的,可在pom文件中,加入以下依赖,然后将jar包拷贝出来就行

     <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
      </dependency>

    2.2 创建一个 .conf 的配置文件(命名随意),用来将es与数据库关联。如mysql.conf

    input {
        jdbc {
          # mysql 数据库链接,shop为数据库名
          jdbc_connection_string => "jdbc:mysql://dev.yonyouccs.com:3001/test"
          # 用户名和密码
          jdbc_user => "root"
          jdbc_password => "root"
          # 驱动
          jdbc_driver_library => "D:/software/logstash-6.2.2/logstash-6.2.2/mysqletc/mysql-connector-java-5.1.40.jar"
          # 驱动类名
          jdbc_driver_class => "com.mysql.jdbc.Driver"
          jdbc_paging_enabled => "true"
          jdbc_page_size => "50000"
          # 执行的sql 文件路径+名称
          statement_filepath => "D:/software/logstash-6.2.2/logstash-6.2.2/mysql/jdbc.sql"
          # 设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
          schedule => "* * * * *"
        }
    }
    
    filter {
        json {
            source => "message"
            remove_field => ["message"]
        }
    }
    
    output {
        elasticsearch {
            # ES的IP地址及端口
            hosts => ["localhost:9200"]
            # 索引名称
            index => "synces"
            # 需要关联的数据库中有有一个id字段,对应类型中的id
            document_id => "%{id}"
            # 索引名称
            document_type => "xwjUser"
        }
        stdout {
            # JSON格式输出
            codec => json_lines
        }
    }

    2.3 创建一个sql文件,我这里命名为jdbc.sql和上边的配置文件一致

    SELECT id, last_name lastName, age, email FROM xwj_user

    注意:sql不能有结束符,不然运行的时候会报错(至于原因,后面会讲到)

    3、启动logstash

    在logstash的bin目录下,使用cmd执行命令:logstash -f ../mysql/mysql.conf

    会看到如下启动信息:

    可以看到在同步的过程中,执行了我们的脚本,并且是将其包起来的,所以sql脚本不能有结束符。

    还会将同步的数据以json字符串的方式打印出来(默认将字段名称全部转为小写了

    4、通过elasticsearch-head查看数据

    可以看到数据已经全部同步到elasticsearch了。不过在该索引下,默认增加@version、@timestamp两个字段

    5、踩过的坑

    1、logstash的配置文件一定得是UTF-8,不能是GBK,不然会报错

    2、logstash启动报无法找到主类解决方案,可参考https://www.cnblogs.com/sbj-dawn/p/8549369.html

    6、其它

    1、新增或更新数据库数据,我们会发现logstash会根据设定的时间(这里我设置的每分钟,是最小频率)自动将最新数据同步到es。

    2、目前logstash只支持数据增量,表的增量,即不能同步已物理删除的数据和表。这个问题的解决方案可参考https://blog.csdn.net/laoyang360/article/details/51747266

     

     关于logstash的更多用法,可参考elastic的官网:Jdbc input plugin

  • 相关阅读:
    Ubuntu打开终端的方法三种
    javascript 获取随机数
    HTML5中类jQuery选择器querySelector的使用
    PHP stream_context_create()作用和用法分析
    一些常用的api接口、
    怎么样学好C++
    指针访问与数组访问的效率分析
    架构师
    Java 之 StringTokenizer
    类型转换操作符static_cast、const_cast、dynamic_cast、reinterpret_cast
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/8987546.html
Copyright © 2011-2022 走看看