在导入前先启动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; ##立即生效