利用logstash从mysql同步数据到ElasticSearch
前面一篇已经把logstash和logstash-input-jdbc安装好了。
下面就说下具体怎么配置。
1.先在安装目录bin下面(一般都是在bin下面)新建两个文件jdbc.conf和jdbc.sql
2.配置jdbc.conf
- input {
- stdin {
- }
- jdbc {
- # 连接的数据库地址和哪一个数据库,指定编码格式,禁用SSL协议,设定自动重连
- jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/microstorage_backend?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
- jdbc_user => "root"
- jdbc_password => "123456"
- # 下载连接数据库的驱动包,建议使用绝对地址
- jdbc_driver_library => "/usr/local/Cellar/logstash/6.5.4/libexec/logstash-core/lib/jars/mysql-connector-java-5.1.42.jar"
- jdbc_driver_class => "com.mysql.jdbc.Driver"
- jdbc_paging_enabled => "true"
- jdbc_page_size => "50000"
- codec => plain { charset => "UTF-8"}
- #使用其它字段追踪,而不是用时间
- #use_column_value => true //这里如果是用时间追踪比如:数据的更新时间或创建时间等和时间有关的这里一定不能是true, 切记切记切记,我是用update_time来追踪的
- #追踪的字段
- tracking_column => update_time
- record_last_run => true
- #上一个sql_last_value值的存放文件路径, 必须要在文件中指定字段的初始值 这里说是必须指定初始值,我没指定默认是1970-01-01 08:00:00
- last_run_metadata_path => "/usr/local/opt/logstash/lastrun/.logstash_jdbc_last_run" //这里的lastrun文件夹和.logstash_jdbc_last_run是自己创建的
- jdbc_default_timezone => "Asia/Shanghai" //设置时区
- #statement => SELECT * FROM goods WHERE update_time > :last_sql_value //这里要说明一下如果直接写sql语句,前面这种写法肯定不对的
- 27 ,加上引号也试过也不对,所以我直接写在jdbc.sql文件中
- statement_filepath => "/usr/local/Cellar/logstash/6.5.4/bin/jdbc.sql"
- #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
- clean_run => false
- # 这是控制定时的,重复执行导入任务的时间间隔,第一位是分钟 不设置就是1分钟执行一次
- schedule => "* * * * *"
- type => "std"
- }
- }
- filter {
- json {
- source => "message"
- remove_field => ["message"]
- }
- }
- output {
- elasticsearch {
- # 要导入到的Elasticsearch所在的主机
- hosts => "127.0.0.1:9200"
- # 要导入到的Elasticsearch的索引的名称
- index => "goods"
- # 类型名称(类似数据库表名)
- document_type => "spu"
- # 主键名称(类似数据库主键)
- document_id => "%{id}"
- }
- stdout {
- # JSON格式输出
- codec => json_lines
- }
- }
3.配置jdbc.sql
- select id,goods_name,goods_no,price,account_id,create_time,update_time from goods where update_time > :sql_last_value
4.我们来看下 .logstash_jdbc_last_run文件中的内容(网上讲述该配置的时候都没讲到里面具体的内容写法,导致很多人很迷惑,其中我就是)
前面的---具体什么意思,我也不太清楚。
5.启动jdbc.conf配置,开始同步数据
第一次:因为时间是从1970年开始的所以会全部同步一遍。相当于全量同步了
从第二次开始,会从上次最新的一次时间同步,既新增和修改都会同步
遇到的问题:
1.ES中8小时时差的问题?
解决方法:从源头解决问题
在jdbc.conf配置文件中只要是有关时间的字段都手动+8小时
- 39 filter {
- 40 json {
- 41 source => "message"
- 42 remove_field => ["message"]
- 43 }
- 44 // date类型不能省略,不然会报错, 就是把当前字段+8小时后赋值给新的字段,然后再取新字段的值赋值给老的字段,再把新的字段删除
- 45 date {
- 46 match => ["message","UNIX_MS"]
- 47 target => "@timestamp"
- 48 }
- 49 ruby {
- 50 code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
- 51 }
- 52 ruby{
- 53 code => "event.set('@timestamp',event.get('timestamp'))"
- 54 }
- 55 mutate{
- 56 remove_field => ["timestamp"]
- 57 }
- 58
- 59 date {
- 60 match => ["message","UNIX_MS"]
- 61 target => "create_time"
- 62 }
- 63 ruby {
- 64 code => "event.set('@create_time', event.get('create_time').time.localtime + 8*60*60)"
- 65 }
- 66 ruby {
- 67 code => "event.set('create_time',event.get('@create_time'))"
- 68 }
- 69 mutate {
- 70 remove_field => ["@create_time"]
- 71 }
- 72
- 73 date {
- 74 match => ["message","UNIX_MS"]
- 75 target => "update_time"
- 76 }
- 77 ruby {
- 78 code => "event.set('@update_time', event.get('update_time').time.localtime + 8*60*60)"
- 79 }
- 80 ruby {
- 81 code => "event.set('update_time',event.get('@update_time'))"
- 82 }
- 83 mutate {
- 84 remove_field => ["@update_time"]
- 85 }
86 }
总结:主要是配置,有什么问题,先检查配置文件。
利用logstash从mysql同步数据到ElasticSearch的更多相关文章
- elasticsearch -- Logstash实现mysql同步数据到elasticsearch
配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ...
- mysql 同步数据到 ElasticSearch 的方案
MySQL Binlog 要通过 MySQL binlog 将 MySQL 的数据同步给 ES, 我们只能使用 row 模式的 binlog.如果使用 statement 或者 mixed forma ...
- 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索
安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...
- 利用TPC-H为MYSQL生成数据
## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...
- 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用
一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...
- 如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
在开发过程中,我们经常会遇到对业务数据进行模糊搜索的需求,例如电商网站对于商品的搜索,以及内容网站对于内容的关键字检索等等.对于这些高级的搜索功能,显然数据库的 Like 是不合适的,通常我们采用 E ...
- ElasticSearch(1)---Mysql同步数据到ElSearch
ElasticSearch同步Mysql 先讲项目需求:对于资讯模块添加搜索功能 这个搜索功能我就是采用ElasticSearch实现的,功能刚实现完,所以写这篇博客做个记录,让自己在记录下整个步骤和 ...
- 关于MySQL导入数据到elasticsearch的小工具logstash
logstash核心配置文件pipelines.yml #注:此处的 - 必须顶格写必须!!! - pipeline.id: invitation #下面路径配置的是你同步数据是的字段映射关系 pat ...
- Android之网络编程利用PHP操作MySql插入数据(四)
因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近Android网络编程方面的博文会比较多一些,我尽量以最简单的方法给大家分享,让大家明白易懂.如果有什么 ...
随机推荐
- centos 安装MySQL全过程
1.到chinaunix下载mysql 下载地址: http://download.chinaunix.net/download/0008000/7159.shtml 2.上传到CentOS服务器 本 ...
- Hybrid App中原生页面 VS H5页面(分享)
本文部分转自 http://www.jianshu.com/p/00ff5664e000 现有3类主流APP,分别为:Web App.Hybrid App(混合模式移动应用,Hybrid有“混合的” ...
- 龙珠超·布罗利【MGRT&幻之】【720P】剧场版
[上传]龙珠超·布罗利[MGRT&幻之][720P]剧场版 这是一个,全新的“赛亚人”故事.“力量大会”之后,和平的地球.悟空了解到宇宙中还存在着自己未曾见过的强者,于是每天都为了变得更强而不 ...
- 在使用springMVC时,页面报的404异常
HTTP Status – Not Found Type Status Report Message /WEB-INF/test/hello.jsp Description The origin se ...
- mysql同步之otter/canal环境搭建完整详细版
接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...
- 《web前端设计基础——HTML5、CSS3、JavaScript》 张树明版 简答题简单整理
web前端设计基础——HTML5.CSS3.JavaScript 简答题整理 第一章 (1)解释一下名词的含义:IP地址.URL.域名 iP定义了如何连入因特网,以及数据如何在主机间传输的标准. ...
- applyColorMap()研究(如果我对现有的colormap不满意,那么如何具体来做)
cv::applyColorMap()能够实现预定义的伪彩色,这个是众所周知的事情. 并且和matlab提供的很相近 除了这些预置的变换,如果我想实现新的变换,需要做LUT变换 cv::Mat ...
- python第一阶段总结(1)
python3第一阶段的总结 首先申明一下,本人是看网络课程“老男孩”过来写博客的,想把自己学到的东西分享一下.同时给老男孩打个广告,其教学水平真的挺好的.仅据我个人多年的学习评价. 好,接下来是我对 ...
- 又是DataSnap的问题
最近在调试DataSnap的程序,突然发现TClientDataSet打不开了,报错为dsnap200.bpl的非法地址访问,如下图: 很是怪异,干脆新建工程,只有TSQLConnection.TSQ ...
- 如何使用thinkphp的model来验证前端表单?
为了增加安全性, 在向model表中写入和修改数据时, 最好是调用 create方法来保证安全, 然后再调用add和save方法: if($Model->Validate($validate)- ...