logstash-jdbc-input与mysql数据库同步
大多数情况下我们的数据都存放在了数据库中,但是elasticsearch它有自己的索引库,那么如果我们在做搜索的是时候就需要将数据库中的数据同步到elasticsearch中,在这里我们使用logstash的logstash-jdbc-input的插件进行与数据库的同步,对于logstash与数据库同步,我们可以设置elasticsearch与数据库同步的时间,使用这种方式进行同步还是很方便的。
1、下载并安装logstash
注意下载的版本要和你的elasticsearch的版本号一致,我的版本elasticsearch6.2.2
logstash下载地址:https://www.elastic.co/downloads/logstash
下载后之后,直接解压就好
(elasticsearch的环境搭建可参考http://www.cnblogs.com/xuwenjin/p/8745624.html)
2、配置logstash
对于logstash5.x以上版本,它自身已经集成了这个插件,不需要我们去单独安装,直接使用即可。我这里说一下与mysql进行同步的简单配置
在logstash文件目录下,新建一个文件夹(命名随意)。如:mysql
2.1 先把一个jdbc驱动放到这个文件夹下,用来连接mysql数据库
使用maven项目的,可在pom文件中,加入以下依赖,然后将jar包拷贝出来就行
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.</version>
- </dependency>
2.2 创建一个 .conf 的配置文件(命名随意),用来将es与数据库关联。如mysql.conf
- input {
- jdbc {
- # mysql 数据库链接,shop为数据库名
- jdbc_connection_string => "jdbc:mysql://dev.yonyouccs.com:3001/test"
- # 用户名和密码
- jdbc_user => "root"
- jdbc_password => "root"
- # 驱动
- jdbc_driver_library => "D:/software/logstash-6.2.2/logstash-6.2.2/mysqletc/mysql-connector-java-5.1.40.jar"
- # 驱动类名
- jdbc_driver_class => "com.mysql.jdbc.Driver"
- jdbc_paging_enabled => "true"
- jdbc_page_size => ""
- # 执行的sql 文件路径+名称
- statement_filepath => "D:/software/logstash-6.2.2/logstash-6.2.2/mysql/jdbc.sql"
- # 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
- schedule => "* * * * *"
- }
- }
- filter {
- json {
- source => "message"
- remove_field => ["message"]
- }
- }
- output {
- elasticsearch {
- # ES的IP地址及端口
- hosts => ["localhost:9200"]
- # 索引名称
- index => "synces"
- # 需要关联的数据库中有有一个id字段,对应类型中的id
- document_id => "%{id}"
- # 索引名称
- document_type => "xwjUser"
- }
- stdout {
- # JSON格式输出
- codec => json_lines
- }
- }
2.3 创建一个sql文件,我这里命名为jdbc.sql和上边的配置文件一致
- SELECT id, last_name lastName, age, email FROM xwj_user
注意:sql不能有结束符,不然运行的时候会报错(至于原因,后面会讲到)
3、启动logstash
在logstash的bin目录下,使用cmd执行命令:logstash -f ../mysql/mysql.conf
会看到如下启动信息:
可以看到在同步的过程中,执行了我们的脚本,并且是将其包起来的,所以sql脚本不能有结束符。
还会将同步的数据以json字符串的方式打印出来(默认将字段名称全部转为小写了)
4、通过elasticsearch-head查看数据
可以看到数据已经全部同步到elasticsearch了。不过在该索引下,默认增加@version、@timestamp两个字段
5、踩过的坑
1、logstash的配置文件一定得是UTF-8,不能是GBK,不然会报错
2、logstash启动报无法找到主类解决方案,可参考https://www.cnblogs.com/sbj-dawn/p/8549369.html
6、其它
1、新增或更新数据库数据,我们会发现logstash会根据设定的时间(这里我设置的每分钟,是最小频率)自动将最新数据同步到es。
2、目前logstash只支持数据增量,表的增量,即不能同步已物理删除的数据和表。这个问题的解决方案可参考https://blog.csdn.net/laoyang360/article/details/51747266
关于logstash的更多用法,可参考elastic的官网:Jdbc input plugin
logstash-jdbc-input与mysql数据库同步的更多相关文章
- Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步
1:下载 ElasticSearch 镜像 docker pull docker.io/elasticsearch:5.6.8 2:创建 ElasticSearch 容器: 注意:5.0默认分配jvm ...
- Ubuntu jsp平台使用JDBC来连接MySQL数据库
Ubuntu 7.04 搭建Ubuntu jsp平台开发环境MySQL+tomcat+apache+j2sdk1.6在所有安装开始前先在Terminal中输入 rpm -q -a查看是否安装过rpm ...
- mysql数据库同步
mysql数据库同步 1.1. Master 设置步骤 配置 my.cnf 文件 确保主服务器主机上my.cnf文件的[mysqld]部分包括一个log-bin选项.该部分还应有一个server-i ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- jmeter中通过jdbc方式连接mysql数据库的配置参考
jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...
- springboot之整合基本的jdbc并操作Mysql数据库
对于数据访问层,无论是SQL还是NOSQL,springboot默认采用整合spring data方式进行统一处理,添加大量自动配置,屏蔽了许多设置,引入各种xxxTemplate,xxxReposi ...
- Spark JDBC方式连接MySQL数据库
Spark JDBC方式连接MySQL数据库 一.JDBC connection properties(属性名称和含义) 二.spark jdbc read MySQL 三.jdbc(url: Str ...
- ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
在实现的路上遇到了各种坑,再次验证官方文档只能产考不能全信! ElasticSearch安装就不说了上一篇有说! 安装logstash 官方:https://www.elastic.co/guide/ ...
- 实现两个Mysql数据库同步
一. 概述 MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步.主从模式.互相备份模式的功能.本文档主要阐述了如何在linux系 ...
随机推荐
- Delphi XE4 For IOS中程序的调试(虚拟机,真实机和win32)
安装完之后,大家可以看一下XE4可以新建的工程类型: File->New: 是不是多出了FireMonkey Mobile Application这一个选项呀! 然后你再点击这个菜单项,弹出Fi ...
- Spring Boot 应用系列 2 -- Spring Boot 2 整合MyBatis和Druid
本系列将分别演示单数据源和多数据源的配置和应用,本文先演示单数据源(MySQL)的配置. 1. pom.xml文件配置 需要在dependencies节点添加: <!-- MySQL --> ...
- SQL SERVER 2014--内存表实现秒杀场景
===================================== 网上针对“秒杀”的解决方案很多,数据拆分化解热点,READPAST解决锁问题,应用程序排队限制并发等等很多方式,各有优缺点, ...
- 解决MS SQL Server 使用HashBytes函数乱码问题
HASHBYTES 语法(参考MSDN): HASHBYTES ( '<algorithm>', { @input | 'input' } ) <algorithm>::= M ...
- Day4 作业
a=[1,2,3,6,"dfs",100]s=a[-1:]print (s)答案:[100] s=a[-1:0:-1]print(s) 答案:[100, 'dfs', 6, 3, ...
- django 获取外键对应数据的方式
模型 models.py中 from django.db import models class User(models.Model): name = models.CharField() class ...
- 前端入门CSS(2)
参考: https://www.cnblogs.com/liwenzhou/p/7999532.html 背景属性 /*背景颜色*/background-color: red; /*背景图片*/ ba ...
- Python面向对象(类的成员之方法)
day24 类的成员之方法 - 普通方法,保存在类中,由对象来调用,self > 对象 - 静态方法,保存在类中,由类直接调用 - 类方法,保存在类中,由类直接调用,cls > 当前类 c ...
- PHP中操作mysql的函数
(1)mysql_num_rows(),对应select操作,获取select结果中数据集的行数:(2)mysql_affected_rows(),对应update.delete.insert操作,影 ...
- [Python] 模拟登录网站(。。为了之后操作数据。。)
我司的内部管理(Web)系统(日报)着实..(mafan).. 所以,就想自己动手增加一下便利性. 计划是, - 桌面程序 用来方便记录(按自己格式,数据随时保存到sqlite中,备用) 通过一览来确 ...