logstash可以将不同数据源,例如日志、文件、或jdbc等,同步到ElasticSearch中,本文利用logstash实现mysql数据库表之间的数据。(实例:数据库DB1中的表A有添加或者修改,数据库DB2中的表B也会自动同步)
一、准备:
数据源输入使用logstash中自带的logstash-input-jdbc
,无需额外安装,官网使用说明地址。
数据源输出需要使用logstash-output-jdbc
,但是在loastash官网中output plugins列表中并没有相关插件,需要额外安装,使用说明在Github地址。
安装logstash
将logstash下载后,放到/opt/elastic/
目录下,并将logstash目录重命名为logstash-test
。
安装logstash-output-jdbc
,在/opt/elastic/logstash-test
目录下执行:
bin/logstash-plugin install logstash-output-jdbc
安装成功:
二、数据库表
在数据库DB1中创建表A,并添加数据如下:
在数据库DB2中创建表B,表结构与A一致,暂不添加数据:
三、logstash配置文件
logstash配置文件中必须包含两个元素input
和output
,分别是数据来源的配置和数据输出的配置。还有一个可选项filter
,用来处理数据源和数据输出的之间的适配,例如,需要将某个字段的值10以后再输出,这个10的动作就应该写在filter
模块;还有数据源和数据输出字段的编码不同,日期类型不同等情况的处理。(由于本文中A表和B表中数据结构都是一样的,只是实现简单的数据同步,暂时用不到filter
)
同步配置文件如下:后面对每个部分进行解释。
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://IP:3306/DB1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true"
jdbc_user => "expert"
jdbc_password => "123456"
jdbc_driver_library