Logstash实现mysql同步数据到elasticsearch

我们之前实现了elasticsearch的整合,但是elasticsearch本身就是为了解决关系型数据库中的数据搜索问题,本身其实严格来说是没有数据的,那么我们如何做到将数据库中的数据同步到elasticsearch中呢?
其实同步mysql数据到elasticsearch中的方法很多:go-mysql-elasticsearch,binlog等等。我们今天用的是Logstash,个人觉得比较简单,而且功能也很强大哦。
下面来讲讲具体实现吧
1、去官网下载对应es版本的 logstash-7.1.0 然后解压,放到你想要放置的目录

2、下载mysql连接库:
将mysql的驱动包放置到随便一个目录,只要下面的配置文件路径正确即可,可以自己建一个mysql,我的是logstash-7.1.0/mysql

3、修改配置文件,这个配置文件路径也是可以随便放,启动时候记得不要弄错路径即可,个人建议方法哦bin目录下,方便些
在bin目录下,创建配置文件(dbToEs.conf)

input {
   jdbc {
    #数据库驱动路径,如果是Oracle对应Oracle的驱动
    jdbc_driver_library => "../mysql/mysql-connector-java-8.0.15.jar"
    #驱动名
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #数据库地址
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/db_test"
    #数据库用户名
    jdbc_user => "root"
    #数据库密码
    jdbc_password => "123456"
    #定时任务,默认每分钟执行一次
    schedule => "* * * * *"
    #sql语句,也可以采用路径的方式
    statement => "SELECT * from  table1"
    add_field => { "[@metadata][type]" => "mydb_data" } 
  }
  jdbc {
    jdbc_driver_library => "../mysql/mysql-connector-java-8.0.15.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/db_test"
    jdbc_user => "root"
    jdbc_password => "123456"
    schedule => "* * * * *"
    statement => "SELECT * from table2"
    add_field => { "[@metadata][type]" => "mydb2_data" } 
  }
}

filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
    mutate  {
        remove_field => ["@timestamp","@version"]
    }
}

output {
    if [@metadata][type] == "mydb_help" {
       elasticsearch {
            hosts => [ "127.0.0.1:9200" ]
            #manage_template => false
            index => "mydb_data"
            document_id => "%{id}"
            document_type => "mydb_data"
        }
    } else if [@metadata][type] == "mydb_logo"{
        elasticsearch {
        	#es地址端口
            hosts => [ "127.0.0.1:9200" ]
            #es主键
            index => "mydb2_data"
            document_id => "%{id}"
            #文档类型
            document_type => "mydb2_data"
        }
    }
}

上面我是对两个表进行了数据同步,所以两个jdbc然后启动就可以了,我的是在window下执行,切换打bin目录执行
logstash -f dbToEs.conf
然后你就会看到同步日志,每分钟都会执行一次。

-------------------------------------------写的不好,仅供参考------------------------------------------

你可能感兴趣的:(框架)