`

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.性能还得进行压测,目前先实现第一步。

  • 大小: 9.7 KB
0
0
分享到:
评论

相关推荐

    Python-同步mysql数据到elasticsearch的工具

    总的来说,"Python-同步mysql数据到elasticsearch的工具"是一个实用的桥梁,它连接了两种不同类型的数据库系统,使得在大数据分析和实时检索场景下,能够充分利用MySQL的稳定存储和Elasticsearch的高效检索。...

    Go-go-mysql-elasticsearch-自动同步你的MySQL数据到Elasticsearch

    标题 "Go-go-mysql-elasticsearch-自动同步你的MySQL数据到Elasticsearch" 指的是一种使用 Go 语言编写的工具,它允许你实现实时或定期地将 MySQL 数据库中的数据自动同步到 Elasticsearch 搜索引擎。这个工具名为 `...

    springboot+elasticsearch

    在描述中提到,“es+springboot+mysql 实现mysql数据同步es,然后查询es数据各种demo实现”,这表明项目旨在实现在MySQL数据库和Elasticsearch之间进行数据同步,同时提供了查询Elasticsearch数据的各种示例代码。...

    Spring Boot整合ElasticSearch和Mysql 附案例源码.docx

    - **目标:** 将MySQL数据库中的数据同步到ElasticSearch中,以便利用ElasticSearch的快速检索能力。 - **技术要点:** - 数据抽取与转换:使用工具或自定义逻辑从MySQL数据库中读取数据,并转换为ElasticSearch...

    Elasticsearch-jdbc数据同步配置.zip_elastic-jdbc_elasticsearch_elastics

    然而,数据往往存储在关系型数据库如MySQL中,为了实现数据的实时或者定期同步到Elasticsearch,Elasticsearch-jdbc插件应运而生。本文将详细介绍如何配置Elasticsearch-jdbc进行数据同步。 **1. Elasticsearch-...

    logstash同步mysql到elasticsearch

    在本场景中,我们将探讨如何使用 Logstash 同步 MySQL 数据库的数据到 Elasticsearch,这是一种常见的数据集成和实时分析解决方案。 首先,我们需要了解 Logstash 的工作原理。Logstash 由三个主要组件构成:输入...

    基于canal的mysql和elasticsearch实时同步方案,支持增量同步和全量同步.zip

    MySQL到Elasticsearch的实时数据同步是大数据领域中常见的需求,尤其在日志分析、监控系统、搜索引擎构建等场景中尤为重要。Canal是阿里巴巴开源的一个数据库增量日志抽取工具,它可以实现MySQL到其他数据存储系统的...

    001 定期同步mysql数据到es 删除数据库记录同时删除es记录 es全文搜索分词和高亮

    【标题】"001 定期同步mysql数据到es 删除数据库记录同时删除es记录 es全文搜索分词和高亮" 提供了几个关键的IT知识点,这些知识点主要围绕MySQL数据库与Elasticsearch(ES)的数据同步、数据一致性的保持以及ES的...

    mysql+es实现双写方案代码

    MySQL和Elasticsearch(ES)双写方案是一种常见的数据集成策略,它允许数据在MySQL数据库和Elasticsearch之间实时同步,以实现数据的快速搜索和分析能力。在本方案中,我们将探讨如何通过代码实现这一过程,以及如何...

    HBase-Elasticsearch数据同步1

    3. **HBase-Elasticsearch同步示例** - Bboss提供了不同类型的示例,如`HBase2ESScrollTimestampDemo223`是针对HBase 2.2.3的,其他示例基于Hbase 1.3.0。选择合适的HBase客户端版本至关重要,应根据实际部署的...

    用python简单实现mysql数据同步到ElasticSearch的教程

    在本教程中,我们将探讨如何使用Python来实现实时或定时将MySQL数据库的数据同步到ElasticSearch。这对于那些需要实时数据分析或快速搜索的应用场景非常有用。以下是一个简化的步骤和关键知识点: 1. **背景与需求*...

    ES同步的sql语句和同步的配置文件.rar

    标题中的"ES同步的sql语句和同步的配置文件.rar"指的是将MySQL数据库的数据与Elasticsearch(简称ES)进行同步的过程,其中包含了SQL脚本和Logstash的配置文件。这个压缩包提供了实现数据同步所需的必要元素,让我们...

    MySQL同步ES数据部署文档.docx

    ### MySQL同步ES数据部署文档知识点解析 #### 一、配置详解 **场景描述**:本文档旨在指导如何将MySQL数据库中的数据以全量和增量的方式同步到ElasticSearch搜索引擎中。 **1. 下载内容** - **elasticsearch版本 ...

    canal-mysql-elasticsearch-sync-master.zip

    【标题】"canal-mysql-elasticsearch-sync-master.zip" 提供了一个实现MySQL到Elasticsearch实时数据同步的解决方案,主要用于数据库变更数据的捕获和快速导入到搜索索引中。 【描述】中提到的关键点是“基于canal...

    Arkcontrol 数据同步功能简介1

    4. **Adapter 程序**:Arkcontrol 提供了预置的 Adapter 支持 Kafka、HBase、Elasticsearch 和 MySQL,通过配置文件映射表列,实现不同数据库间的数据转换和实时同步。 5. **Arkcontrol 管理界面**:允许用户在已...

    elasticsearch-jdbc-2.2.0.0

    Elasticsearch-JDBC是Elasticsearch的一个插件,主要用于将数据从关系型数据库(如MySQL、Oracle等)导入到Elasticsearch中,实现数据的实时同步。2.2.0.0是该插件的一个版本号,代表着在该版本中包含了一些特定的...

    Springboot elasticsearch echart.zip

    你可以根据需求将Elasticsearch与MySQL中的数据进行同步,或者在Elasticsearch中建立索引,通过SQL查询获取数据,然后利用Echarts展示。 总结,这个Springboot elasticsearch echart的例子程序提供了一种集成Spring...

    利用Java多线程技术导入数据到Elasticsearch的方法步骤

    通过上述内容,我们可以看到,将Java多线程技术应用于从MySQL到Elasticsearch的数据导入中,不仅可以提高数据导入的效率,还可以优化系统资源的使用。合理地设计和实现生产者-消费者模型、调整线程池的参数以及利用...

Global site tag (gtag.js) - Google Analytics