采用logstach-input-jdbc使 ES 与 MySQL 进行同步

本文介绍ES与MySQL数据同步的几种工具,重点讲解logstash-input-jdbc插件的配置与使用,包括安装步骤、配置文件解析及启动命令,适合希望实现两数据库间高效同步的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的ES 与 MySQL同步的工具介绍

1:elasticsearch-jdbc:更新也频繁,但是此插件不支持es5及以上

2:elasticsearch-river:好久不更新了

3:Go-mysql-elastic:中国大哥写的,还行,略有bug

4:logstash-input-jdbc:官方推荐插件,Ruby写的

本文讲述logstash-input-jdbc的使用:

安装logstash-input-jdbc 

从官网下载logstash插件

https://www.elastic.co/cn/downloads/logstash

解压进入解压后的目录

cd /wx/logstash/
sudo bin/plugin install logstash-input-jdbc
如果成功就成功了。

如果上述方法不成功的话,请参考这位大哥的文章:https://www.cnblogs.com/zuolun2017/p/8082996.html

或者:我已经将成功安装logstash-input-jdbc的logstash包打包到:https://download.youkuaiyun.com/download/wangxin3618/10819749

有需要的朋友或者嫌其他方式麻烦的朋友可以用已经安装配置好的压缩包。

然后需要准备:一个 mysql 的java 驱动包  ——    mysql-connector-java-5.1.47-bin.jar

和两个文件或一个文件jdbc.conf 。jdbc.sql 可以换成语句直接在jdbc.conf中配置。

jdbc.conf:
input {
    stdin {
    }
    jdbc {
      jdbc_connection_string => "jdbc:mysql://秘密:3306/test"
      jdbc_user => "秘密"
      jdbc_password => "秘密"
      jdbc_driver_library => "/tmp/mysql-connector-java-5.1.47-bin.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      statement_filepath => "jdbc.sql"
      schedule => "* * * * *"
      type => "t2"
    }
}
output {
    elasticsearch {
        host => "秘密"
        port => "9200"
        protocol => "http"
        index => "test"
		document_type => "t2"
        document_id => "%{id}"
        cluster => "wx_es"
    }
    stdout {
        codec => json_lines
    }
}
jdbc.sql:
select * from t2;

启动:./bin/logstash -f ./jdbc.conf

logstash-input-jdbc 配置文件解析:

input{
    jdbc{
    #jdbc sql server 驱动,各个数据库都有对应的驱动,需自己下载
    jdbc_driver_library => "/etc/logstash/driver.d/sqljdbc_2.0/enu/sqljdbc4.jar"
    #jdbc class 不同数据库有不同的 class 配置
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    #配置数据库连接 ip 和端口,以及数据库   
    jdbc_connection_string => "jdbc:sqlserver://200.200.0.18:1433;databaseName=test_db"
    #配置数据库用户名
    jdbc_user =>   
    #配置数据库密码
    jdbc_password =>
    #上面这些都不重要,要是这些都看不懂的话,你的老板估计要考虑换人了。重要的是接下来的内容。
    # 定时器 多久执行一次SQL,默认是一分钟
    # schedule => 分 时 天 月 年  
    # schedule =>  22     表示每天22点执行一次
    schedule => "  *"
    #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
    clean_run => false
    #是否需要记录某个column 的值,如果 record_last_run 为真,可以自定义我们需要表的字段名称,
    #此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
    use_column_value => true
    #如果 use_column_value 为真,需配置此参数. 这个参数就是数据库给出的一个字段名称。当然该字段必须是递增的,可以是 数据库的数据时间这类的
    tracking_column => create_time
    #是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
    record_last_run => true
    #们只需要在 SQL 语句中 WHERE MY_ID > :last_sql_value 即可. 其中 :sql_last_value 取得就是该文件中的值
    last_run_metadata_path => "/etc/logstash/run_metadata.d/my_info"
    #是否将字段名称转小写。
    #这里有个小的提示,如果你这前就处理过一次数据,并且在Kibana中有对应的搜索需求的话,还是改为true,
    #因为默认是true,并且Kibana是大小写区分的。准确的说应该是ES大小写区分
    lowercase_column_names => false
    #你的SQL的位置,当然,你的SQL也可以直接写在这里。
    #statement => SELECT * FROM tabeName t WHERE  t.creat_time > :sql_last_value

statement_filepath => "/etc/logstash/statement_file.d/my_info.sql" #数据类型,标明你属于那一方势力。单了ES哪里好给你安排不同的山头。 type => "my_info" } #注意:外载的SQL文件就是一个文本文件就可以了,还有需要注意的是,一个jdbc{}插件就只能处理一个SQL语句, #如果你有多个SQL需要处理的话,只能在重新建立一个jdbc{}插件。 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值