Elasticsearch+MySQL数据同步示例

Elasticsearch+MySQL数据同步示例

@author:wushuang

版本:Elasticsearch2.4Logstash2.4MySQL5.7

操作系统:CentOS Linux 7

前言:做个备份,免得以后忘记。在网上查阅了不少资料,官网讲的还是很清楚。

 

一、安装Elasticsearch

https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html

二、在MySQL上新建库表(若已有库表可跳过)

建库脚本如下:

SET FOREIGN_KEY_CHECKS=0;

 

-- ----------------------------

-- Table structure for contacts

-- ----------------------------

DROP TABLE IF EXISTS `contacts`;

CREATE TABLE `contacts` (

  `uid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

  `email` varchar(80) NOT NULL,

  `first_name` varchar(80) NOT NULL,

  `last_name` varchar(80) NOT NULL,

  UNIQUE KEY `uid` (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of contacts

-- ----------------------------

INSERT INTO `contacts` VALUES ('1', 'jim@example.com', 'Jim', 'Smith');

INSERT INTO `contacts` VALUES ('2', '', 'John', 'Smith');

INSERT INTO `contacts` VALUES ('3', 'carol@example.com', 'Carole', 'Smith');

INSERT INTO `contacts` VALUES ('4', 'sam@example.com', 'Sam', 'Smith');

INSERT INTO `contacts` VALUES ('5', 'wushuang@qq.com', 'Rick', 'Roses');

INSERT INTO `contacts` VALUES ('6', 'w@163.com', 'Sum', 'OKFord');

 

-- ----------------------------

-- Table structure for user

-- ----------------------------

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

  `USERID` bigint(20) NOT NULL,

  `USERNAME` varchar(20) DEFAULT NULL,

  `AGE` int(3) unsigned DEFAULT NULL,

  `SEX` tinyint(1) DEFAULT NULL,

  PRIMARY KEY (`USERID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of user

-- ----------------------------

INSERT INTO `user` VALUES ('201609210935231', 'Quejs', '24', '1');

INSERT INTO `user` VALUES ('201609210936233', 'Smith', '24', '1');

INSERT INTO `user` VALUES ('201609210938234', 'Mends', '26', '0');

INSERT INTO `user` VALUES ('201609210947235', 'wisd', '38', '0');

INSERT INTO `user` VALUES ('201609210948236', 'Losed', '35', '0');

SET FOREIGN_KEY_CHECKS=1;

 

三、安装Logstash

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

四、安装logstash-input-jdbc和logstash-output-elasticsearch插件

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

五、新建配置文件

1.需要将MYSQL的jar文件复制到Logstash安装目录下,示例中放在了/home/manager/app/logstash-2.4.0下。如图:

 

 

2.在目录/home/manager/app/logstash-2.4.0/bin下新建config文件夹。

命令:切换到/home/manager/app/logstash-2.4.0/bin目录下,mkdir config

3.在目录/home/manager/app/logstash-2.4.0/bin/config/下新建conf目录,命令:mkdir conf

4.新建两个配置文件contacts.conf和user.conf。

user.conf内容:

input {

    stdin {

    }

    jdbc {

      # mysql jdbc connection string to our backup databse

      jdbc_connection_string => "jdbc:mysql://localhost:3306/mytest"

      # the user we wish to excute our statement as

      jdbc_user => "manager"

      jdbc_password => "manager@2015"

      # the path to our downloaded jdbc driver

      jdbc_driver_library => "/home/manager/app/logstash-2.4.0/mysql-connector-java-5.1.22.jar"

      # the name of the driver class for mysql

      jdbc_driver_class => "com.mysql.jdbc.Driver"

      jdbc_paging_enabled => "true"

      jdbc_page_size => "50000"

      statement_filepath => "/home/manager/app/logstash-2.4.0/bin/config/sql/user.sql"

      schedule => "* * * * *"

      type => "user"

    }

}

 

filter {

    json {

        source => "message"

        remove_field => ["message"]

    }

}

 

output {

if[type]=="user"{

    elasticsearch {

        hosts => ["127.0.0.1:9200"]

        index => "mytest"

 document_type => "user"

        document_id => "%{userid}"

 workers => 1

        flush_size => 20000

        idle_flush_time => 10

        template_overwrite => true

    }

 

 

    stdout {

        codec => json_lines

    }

}

}

 

contacts.conf内容:

input {

    stdin {

    }

    jdbc {

      # mysql jdbc connection string to our backup databse

      jdbc_connection_string => "jdbc:mysql://localhost:3306/mytest"

      # the user we wish to excute our statement as

      jdbc_user => "manager"

      jdbc_password => "manager@2015"

      # the path to our downloaded jdbc driver

      jdbc_driver_library => "/home/manager/app/logstash-2.4.0/mysql-connector-java-5.1.22.jar"

      # the name of the driver class for mysql

 

      jdbc_driver_class => "com.mysql.jdbc.Driver"

      jdbc_paging_enabled => "true"

      jdbc_page_size => "50000"

      statement_filepath => "/home/manager/app/logstash-2.4.0/bin/config/sql/user.sql"

      schedule => "* * * * *"

      type => "user"

    }

}

 

filter {

    json {

        source => "message"

        remove_field => ["message"]

    }

}

 

output {

if[type]=="user"{

    elasticsearch {

        hosts => ["127.0.0.1:9200"]

 

        index => "mytest"

 document_type => "user"

        document_id => "%{userid}"

 workers => 1

        flush_size => 20000

        idle_flush_time => 10

        template_overwrite => true

}

 

    stdout {

        codec => json_lines

    }

}

}

六、启动,验证

1.到Logstash bin目录下启动Logstash:nohup ./logstash -f ./config/conf/ >/dev/null 2>&1 &

2.验证数据是否同步过来了:curl -XGET 'http://localhost:9200/mytest/contacts/_search?pretty'

 

七、注意事项

1.只能逻辑删除,物理删除同步不了。

2.以上示例是全量同步,增量的需要每张表加timespan字段。Stackoverflow上可以查一查。

3.性能还得进行压测,目前先实现第一步。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 ElasticsearchMySQL 数据保持同步,你可以按照以下步骤进行: 1. 安装 Elasticsearch:你需要在本地或服务器上安装 Elasticsearch,并启动它。你可以从官方网站下载并安装 Elasticsearch。 2. 安装 Elasticsearch JDBC 插件:你需要安装 Elasticsearch JDBC 插件,以便能够连接到 MySQL 数据库。你可以从 Elasticsearch 官网下载并安装插件。 3. 创建 Logstash 配置文件:你需要创建 Logstash 配置文件,以便将 MySQL 数据库中的数据同步Elasticsearch。以下是一个示例配置文件: ``` input { jdbc { jdbc_driver_library => "/path/to/mysql-connector-java.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/mydatabase" jdbc_user => "myuser" jdbc_password => "mypassword" schedule => "* * * * *" statement => "SELECT * from mytable where updated_at > :sql_last_value" use_column_value => true tracking_column => "updated_at" tracking_column_type => "timestamp" clean_run => true } } output { elasticsearch { hosts => ["localhost:9200"] index => "myindex" document_id => "%{id}" } } ``` 以上配置文件会每分钟查询一次 MySQL 数据库中的数据,并将其同步Elasticsearch 中。Logstash 会根据更新时间字段(这里是 updated_at)来判断哪些数据需要同步。如果你需要同步新增的数据,可以将 clean_run 参数设置为 false。 4. 启动 Logstash:使用以上配置文件启动 Logstash。 5. 验证同步结果:你可以使用 Elasticsearch 查询 API 验证同步结果。以下是一个示例查询: ```php require 'vendor/autoload.php'; $client = Elasticsearch\ClientBuilder::create()->build(); $params = [ 'index' => 'myindex', 'type' => 'mytype', 'body' => [ 'query' => [ 'match' => [ 'title' => 'php' ] ] ] ]; $response = $client->search($params); foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . "\n"; } ``` 以上是使用 Elasticsearch JDBC 插件实现 ElasticsearchMySQL 数据保持同步的基本步骤。你可以根据自己的需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值