欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch与MySQL同步数据

程序员文章站 2022-05-09 14:20:19
...

使用Logstash-jdbc-input插件可以将MySQL中的数据同步到数据库。

注意:同步时,只有增加和修改数据库的数据时会同步到Elasticsearch,删除记录时不会将Elasticsearch中的纪录删除。所以,在应用程序中,需要删除数据库中的纪录后,使用API清除ES中的缓存数据。

1.创建数据库表

create table person
(id int primary key auto_increment,
name varchar(10),
age int,
email varchar(20))

2.向表中插入纪录

insert into person(name,age,email) values('张三','21','aaa@qq.com');
insert into person(name,age,email) values('李四','23','aaa@qq.com');
insert into person(name,age,email) values('王五','25','aaa@qq.com');

3.搭建Elasticsearch

4.安装logstash-input-jdbc

#解压
[root@rabbit01 local]# tar -zxvf logstash-6.6.0.tar.gz
[root@rabbit01 local]# cd logstash-6.6.0
#编写配置文件
[root@rabbit01 logstash-6.6.0]# vi logstash-input-jdbc.conf
input {
    jdbc {
        jdbc_connection_string => "jdbc:mysql://192.168.184.131:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8"
        jdbc_user => "root"
        jdbc_password => "12345678"
        jdbc_validate_connection => true
        #数据库驱动
        jdbc_driver_library => "/usr/local/jar/mysql-connector-java-5.1.47.jar"
        #数据库驱动类
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        #定时更新时间,默认一分钟,从左到右为分、时、天、月、年
        schedule => "* * * * *"
        statement => "SELECT * from person"
    }
}
output {
    elasticsearch {
        index => "person"
        document_type => "person"
        document_id => "%{id}"
        hosts => ["192.168.184.131:9200","192.168.184.132:9200","192.168.184.134:9200"]
    }
}
#启动logstash-input-jdbc
[root@rabbit01 logstash-6.6.0]# bin/logstash -f logstash-input-jdbc.conf

5.查看Elasticsearch中的索引数据

Elasticsearch与MySQL同步数据

6.手动修改MySQL数据库中的数据,查看同步数据

Elasticsearch与MySQL同步数据
1分钟后。。。
Elasticsearch与MySQL同步数据
可以看到,数据库更新后,经过1分钟,Elasticsearch中的数据就会更MySQL中的数据保持同步。

注:此博文为本人的学习收获,如有不足之处,欢迎大家批评指正,谢谢阅读!!!