Elasticsearch+MySQL数据同步示例

一、安装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‘, ‘[email protected]‘, ‘Jim‘, ‘Smith‘);

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

INSERT INTO `contacts` VALUES (‘3‘, ‘[email protected]‘, ‘Carole‘, ‘Smith‘);

INSERT INTO `contacts` VALUES (‘4‘, ‘[email protected]‘, ‘Sam‘, ‘Smith‘);

INSERT INTO `contacts` VALUES (‘5‘, ‘[email protected]‘, ‘Rick‘, ‘Roses‘);

INSERT INTO `contacts` VALUES (‘6‘, ‘[email protected]‘, ‘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

下载

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

五、新建配置文件

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 => "[email protected]"

# 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 => "[email protected]"

# 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字段。

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

时间: 2024-10-05 05:59:35

Elasticsearch+MySQL数据同步示例的相关文章

高可用的并行MySQL数据同步及分布式

首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下: 1.树状结构(Master,Backup-Master,Slaves) 这种结构是目前Web系统用的最为通用的一种.整个系统有1个写入/更新点,即Master:Master-Backup和Slaves都是Replication的Master从库:多级Slave的原因是为了数据过滤和节省网络资源. 2.环状结构(Master-Master,Slaves) Dual

redis与mysql数据同步

应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql,此种情况存在的问题主要是如何保证mysql与redis的数据同步, 二者数据同步的关键在于mysql数据库中主键,方案是在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主 键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键. 1 String tbname = "login"; 2 3 //获取mysql表主键值--redis启动时 4

mysql数据同步

随着各行业信息化水平的不断提升,各种各样的信息管理系统都被广泛使用,各系统间数据完全独立,形成了大量的信息孤岛.出于管理及决策方面的需求,实现各平台的数据同步是一个很迫切的需求,TreeSoft数据库管理系统整合了各主流数据库的数据访问及维护监控功能,实现了各主流数据库的互联互通,架起了一座数据同步的桥梁,便捷的实现了数据的同步交互. 一.首先在TreeSoft数据库中配置两个数据源信息 二.配置数据同步任务,并执行任务 三.同步结果数据查看确认 四.支持以下数据同步方案,好强大! 1.MySQ

Apache NiFi之MySQL数据同步到HBase

一.说明 将Apache NiFi做为关系型数据与非关系型数据库的数据同步工具使用,在此场景中需要将mysql导出的avro数据格式转化为json入库HBase 二.开拔 Ⅰ).配置ExecuteSQLRecord a).选择ExecuteSQLRecord 在Processor中搜索ExecuteSQLRecord b).配置ExecuteSQLRecord 1.创建Database Connection Pool 2.创建JsonRecordSetWriter 3.配置SQL select

Elasticsearch mysql 增量同步 三表联合 脚本

从上方插件官网中下载适合的dist包,然后解压.进入bin目录,可以看到一堆sh脚本.在bin目录下创建一个test.sh: bin=/home/csonezp/Dev/elasticsearch-jdbc-2.3.1.0/binlib=/home/csonezp/Dev/elasticsearch-jdbc-2.3.1.0/libecho '{"type" : "jdbc","statefile" : "statefile.json&

MYSQL数据同步、复制、分发

MYSQL主从复制: 1,主从服务器都启用二进制日志,设置唯一ID,并相互建立连接的账号并授权: 2,从服务器主动向主服务器请求查询当前同步状态,并拉回数据: 主要相关命令: 查看主服务器状态:show master status\G; 查看从服务器状态:show slave status\G; 查看mysql I/O线程:show processlist\G; 配置从服务器复制:change master to {***}详见后面说明 启动从服务器复制:start slave; 授权用户:gr

sqlserver与mysql数据同步问题

由于短信项目的需求,需要将sqlserver当中的表实时同步到mysql当中,于是采用触发器完成该功能,对insert操作进行监控,当sqlserver进行插入操作时,同时将数据插入到mysql当中. 安装sqlserver2008以及mysql. 建立mysql链接服务器. 在本电脑上安装mysql驱动.Mysql-connector-odbc-5.1.6-win32.msi. 安装完毕后,在电脑控制面板-管理工具-odbc数据源-系统dsn-添加-选择mysql odbc driver-完成

将mysql数据同步到ES6.4

下载安装包时注意下载到指定文件夹 这里我放在OPT文件夹下一:安装logstash进入到opt文件夹打开终端 执行以下命令wget -c https://artifacts.elastic.co/downloads/logstash/logstash-6.4.0.zip 加上-c支持断点续传二:解压logstashunzip logstash-6.4.0.zip三:进入到logstash bin目录cd logstash-6.4.0/bin四:安装logstash-jdbc./logstash-

MySQL主从复制(Replication)(MySQL数据同步)配置

MySQL是开源的关系型数据库系统.复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程. 配置主服务器(master) 1.编辑数据库配置文件my.cnf,一般在/etc/目录下. #vi /etc/my.cnf 在[mysqld]的下面加入下面代码: log-bin=mysql-bin server-id=1 innodb_flush_log_at_trx_commit=1 sync_binlog=1 bi