mysql - 使用 Logstash 增量读取 MySQL

标签 mysql logstash

我有一个 MySQL 数据库,数据会随着时间的推移添加到其中。我想使用 Logstash 将数据传输到 Elastic 中以生成一些报告。

有没有办法记住 MySQL 的最后传输记录并在插入新记录后恢复记录过程?

最佳答案

为了增量更新 Elasticsearch 中的数据,我们必须在数据库中有一个列,以便它可以用作引用。而且我们还必须设置一个时间表来一次又一次地运行配置文件。

假设您想将新添加的行发送到 Elasticsearch,并且您有一个 id 字段,该字段在表中自动递增。然后,您可以告诉 Logstash 仅获取 id 值大于先前获取的记录的 id 值的记录。为了告诉 Logstash 跟踪列以及要跟踪的列,我们必须使用

tracking_column and use_column_value

JDBC 部分中的选项。之后配置文件将如下所示。

input {
  jdbc {
  jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  jdbc_connection_string => "jdbc:mysql://localhost:3306/database"
  jdbc_user => "DBUSERNAME"
  jdbc_password => "DBPASSWORD"
  statement => "select * from TABLE where id >:sql_last_value"
  tracking_column => id
  use_column_value => true
  #I have scheduled this to run in every second
  schedule => "* * * * * *"
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "index"
    document_type => "type"
    user => "userName"
    password => "password"
  }
  stdout { 
    codec => rubydebug 
  }
}

:sql_last_value

包含先前已发送的记录的 id 值。但是使用 id 字段,您只能发送新添加的记录。如果您想根据对数据库中记录所做的更改更新先前发送的 Elasticsearch 中的文档,则必须使用每次更改时都会更新的 row_update_time 列(或类似用作引用的内容)表中的记录。您可以找到更多相关信息 here .

关于mysql - 使用 Logstash 增量读取 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31446405/

相关文章:

javascript - 如何防止 HTML 中的标签和脚本执行?

mysql - 不能在 mysql 函数中使用别名作为 ORDER BY 子句的一部分

elasticsearch - 在Logstash Elasticsearch输出插件和Kibana中最好配置哪个Elasticsearch节点

elasticsearch - 基于多个字段的Kibana可视化

apache - 使用自定义查询创建自定义Kibana仪表板

php - 在 WP 上添加自定义 'order by date' 按钮

mysql - 在新 Controller 方法中使用 form_for 时未定义方法

sql - Mysql服务器/数据库的维护步骤和性能步骤是什么?

visualization - Kibana 4.0.1 中的 GeoHash 聚合下不存在 Tile Map geo.location 字段

elasticsearch - 文档数量相同,但每次运行logstash时索引大小都在增加