yii2-elasticsearch(4)elasticsearch和mysql 的數據同步

前言

以前安裝的的es版本是5.4的,後來總是killed,多是我配置的有問題,我又重裝了一下,改爲了5.0版本的。網站本來的數據庫是mysql,要用es必須把數據同步過來,參考了一篇文章,使用了logstash-input-jdbc來同步。java

logstash

以前文章已經安裝過了java和es,這裏就不說了。如今要安裝logstash,要安裝對應的版本,5.0版本mysql

https://artifacts.elastic.co/downloads/logstash/logstash-5.0.0.tar.gz

logstash-input-jdbc

解壓以後,咱們要下載logstash的插件logstash-input-jdbc,我是直接經過logstash安裝的sql

cd logstash-5.0.0/bin/
./logstash-plugin install logstash-input-jdbc

這個等待時間挺長的,不過仍是成功了,還有其餘的安裝方式,請到參考文章中找數據庫

mysql驅動

我下載的版本是mysql-connector-java-5.1.42
官網地址:https://dev.mysql.com/downloa...
下載好以後解壓json

配置

在logstash-5.0.0/bin/下創建一個文件夾,名字你可隨便起,先命名爲logstash_jdbc_test,建立兩個文件jdbc.conf,jdbc.sqlelasticsearch

jdbc.conf的內容爲測試

input {
  stdin {
  }
  jdbc {
  # mysql jdbc connection string to our backup databse  後面的test對應mysql中的test數據庫
  jdbc_connection_string => "jdbc:mysql://localhost:3306/oldhd"
  # the user we wish to excute our statement as
  jdbc_user => "root"
  jdbc_password => "root"
  # the path to our downloaded jdbc driver
  jdbc_driver_library => "/usr/local/elasticsearch/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar"
  # the name of the driver class for mysql
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  jdbc_paging_enabled => "true"
  jdbc_page_size => "50000"
#如下對應着要執行的sql的絕對路徑。
  statement_filepath => "/usr/local/elasticsearch/logstash-5.0.0/bin/logstash_jdbc_test/jdbc.sql"
#定時字段 各字段含義(由左至右)分、時、天、月、年,所有爲*默認含義爲每分鐘都更新(測試結果,不一樣的話請留言指出)
  schedule => "* * * * *"
#設定ES索引類型
  type => "contact"
  }
}

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

output {
  elasticsearch {
#ESIP地址與端口
  hosts => "localhost:9200"
#ES索引名稱(本身定義的)
  index => "shiliucrm"
#自增ID編號
  document_id => "%{id}"
  }
  stdout {
#以JSON格式輸出
  codec => json_lines
  }
}

jdbc.sql的內容爲網站

select
  *
from
contact where update_time > :sql_last_value

啓動

先確保你的es是開啓的,而後啓動logstash.net

cd logstash-5.0.0/bin/
./logstash -f ./logstash_jdbc_test/jdbc.conf

若是你的這個表裏面的字段不少,這個時間可能會很長,有的字段裏面有回車換行之類的字符若是沒有轉義,同步也會報錯,因此同步不會成功的緣由有不少,得本身排查,能夠先取一小部分數據測試插件

問題

我這裏有幾個問題,但願有朋友幫我解答一下
1.logstash這個怎麼同時同步多個mysql表,由於一個conf鍾只配置了一個type,這個type指向一個sql,有什麼方法能夠同時開啓多個同步的服務
2.使用es查詢遇到的問題
這個shiliucrm索引下放着四個type,怎樣同時查這四個type,而且每一個type下面返回三個符合要求的文檔,
我如今是分四次分別查詢這四個type,size=3.這也太傻了,不會用,但願有人指點一下。

參考文章:
http://blog.csdn.net/laoyang3...
http://blog.csdn.net/yeyuma/a...

相關文章
相關標籤/搜索