mysql数据同步elasticsearch(es)全文检索容器(Markdown版本)

一、安装ElasticSearch(下面统称es,版本6.0.0,环境windows10)

直接上下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.zip

解压后目录如下:
1

启动es,./bin/elasticsearch.bat;启动成功如图

2

默认cluster_name是elasticsearch和端口9200可以修改,需要修改在config/elasticsearch.yml;上图

3

二、安装logstash

下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.zip

解压目录
4

先安装logstash-input-jdbc插件
./bin/logstash-plugin.bat install logstash-input-jdbc

5

在logstash目录下创建config-mysql,见图4

6

创建配置文件load_data.conf,配置文件随便取名,可以创建sql文件,也可以在conf配置文件中定义,具体下面有说明

先上配置文件内容
input {
    stdin {
    }
    jdbc {
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/jfinal_club?characterEncoding=utf8&useSSL=false"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_driver_library => "D:/ELK/6.0.0/logstash-6.0.0/config-mysql/mysql-connector-java-5.1.43.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      statement_filepath => "D:/ELK/6.0.0/logstash-6.0.0/config-mysql/store_list.sql"
      schedule => "* * * * *"
      use_column_value => false
      record_last_run => true
      last_run_metadata_path => "D:/ELK/6.0.0/logstash-6.0.0/config-mysql/run/store_list"
      type => "sl"
    }

jdbc {
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/jfinal_club?characterEncoding=utf8&useSSL=false"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_driver_library => "D:/ELK/6.0.0/logstash-6.0.0/config-mysql/mysql-connector-java-5.1.43.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      statement => "select * from store where updated > date_add(:sql_last_value, interval 8 hour)"
      schedule => "* * * * *"
      use_column_value => false
      record_last_run => true
      last_run_metadata_path => "D:/ELK/6.0.0/logstash-6.0.0/config-mysql/run/store_s"
      type => "st"
    }
}

filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}

output {

    if[type] == "sl"{
        elasticsearch {
              hosts => ["127.0.0.1:9200"]
              index => "store_list"
              document_type => "jdbc"
              document_id => "%{store_id}}"
        }
    }

    if[type] == "st"{
        elasticsearch {
              hosts => ["127.0.0.1:9200"]
              index => "store_st"
              document_type => "jdbc"
              document_id => "%{id}}"
        }
    }

    stdout {
        codec => json_lines
    }
}

字段解释;具体的见:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

图6中有个run目录,在这里是用来存放:sql_last_value的时间值的
store_list.sql
7
先在es中生成index
PUT /store_list
{
    "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "jdbc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "@version": {
          "type": "keyword"
        },
        "store_id": {
          "type": "long"
        },
        "store_name": {
          "type": "keyword"
        },
        "uid": {
          "type": "text"
        },
        "telephone": {
          "type": "text"
        },
        "street_id": {
          "type": "text"
        },
        "detail": {
          "type": "keyword"
        },
        "address": {
          "type": "keyword"
        },
        "store_created": {
          "type": "date"
        },
        "store_updated": {
          "type": "date"
        },
        "detail_id": {
          "type": "long"
        },
        "type_name": {
          "type": "text"
        },
        "tag": {
          "type": "keyword"
        },
        "overall_rating": {
          "type": "text"
        },
        "navi_location_lng": {
          "type": "double"
        },
        "navi_location_lat": {
          "type": "double"
        },
        "detail_url": {
          "type": "text"
        },
        "comment_num": {
          "type": "integer"
        },
        "detail_created": {
          "type": "date"
        },
        "detail_updated": {
          "type": "date"
        },
        "location_id": {
          "type": "long"
        },
        "lng": {
          "type": "double"
        },
        "lat": {
          "type": "double"
        }
      }
    }
  }
}

上面这种方式可以通过es管理工具执行,比如kibana->dev tools;或者使用curl的方式也可以

curl -XPUT "http://localhost:9200/store_list" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "jdbc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "@version": {
          "type": "keyword"
        },
        "store_id": {
          "type": "long"
        },
        "store_name": {
          "type": "keyword"
        },
        "uid": {
          "type": "text"
        },
        "telephone": {
          "type": "text"
        },
        "street_id": {
          "type": "text"
        },
        "detail": {
          "type": "keyword"
        },
        "address": {
          "type": "keyword"
        },
        "store_created": {
          "type": "date"
        },
        "store_updated": {
          "type": "date"
        },
        "detail_id": {
          "type": "long"
        },
        "type_name": {
          "type": "text"
        },
        "tag": {
          "type": "keyword"
        },
        "overall_rating": {
          "type": "text"
        },
        "navi_location_lng": {
          "type": "double"
        },
        "navi_location_lat": {
          "type": "double"
        },
        "detail_url": {
          "type": "text"
        },
        "comment_num": {
          "type": "integer"
        },
        "detail_created": {
          "type": "date"
        },
        "detail_updated": {
          "type": "date"
        },
        "location_id": {
          "type": "long"
        },
        "lng": {
          "type": "double"
        },
        "lat": {
          "type": "double"
        }
      }
    }
  }
}'

然后通过http://localhost:9200/store_list/查看字段生成情况

store_list就是index,相当于数据库的database

8

然后回到logstash目录下

执行 nohup.exe ./bin/logstash.bat -f config-mysql/load_data.conf &

9

最好加上& 结尾,后台运行

然后看数据库同步情况

10

可能有些细节没能写全,如果在集成中遇到什么情况,可以评论指出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容