使用Logstash的JDB插件从Mysql导入数据到ES增量更新

在导入前先启动ES,然后在Logstash的配置文件中使用jdbc插件配置如下信息:

1 mysql数据库连接信息;

2 定义表中追踪字段,为数值或日期类型,每次修改数据或者插入数据则需要增加追踪字段的值;

3 定义更新成功时追踪字段的值保存到的文件名称;

4 写查询SQL,条件是大于追踪字段的值;

5 ES会根据cron定时去采集上一步查询的数据;

接下来使用output插件,把采集的数据输出到ES中。

 

具体配置如下:

logstash的配置文件


input {
  jdbc {
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/db_example"
    jdbc_user => root
    jdbc_password => ymruan123
    #启用追踪,如果为true,则需要指定tracking_column
    use_column_value => true
    #指定追踪的字段,
    tracking_column => "last_updated"
    #追踪字段的类型,目前只有数字(numeric)和时间类型(timestamp),默认是数字类型
    tracking_column_type => "numeric"
    #记录最后一次运行的结果
    record_last_run => true
    #上面运行结果的保存位置
    last_run_metadata_path => "jdbc-position.txt"
    statement => "SELECT * FROM user where last_updated >:sql_last_value;"
    schedule => " * * * * * *"
  }
}
output {
  elasticsearch {
    document_id => "%{id}"
    document_type => "_doc"
    index => "users"
    hosts => ["http://localhost:9200"]
  }
  stdout{
    codec => rubydebug
  }
}

在Mysql中创建测试表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `tags` varchar(255) DEFAULT NULL,
  `last_updated` bigint(20) DEFAULT NULL,
  `is_deleted` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

启动ES后,使用如下命令启动logstash

./bin/logstash -f your logstash config

当去数据库插入一条数据后,可以看到logstash把这条数据采集到了,存入ES。

在操作过程中Mysql连接可能会报如下错误,解决方式如下:

错误日志如下所示
** java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.**

解决办法:
修改数据库时区:
在cmd命令中进入mysql输入如下命令即可

  set global time_zone = '+8:00';  ##修改mysql全局时区为北京时间,即我们所在的东8区
  set time_zone = '+8:00';  ##修改当前会话时区
  flush privileges;   ##立即生效
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值