Elasticsearch 與mysql數(shù)據(jù)同步方法

假設(shè)已經(jīng)有db_search的數(shù)據(jù)庫,里面有張msg的表, msg表里面有主鍵id字段 (可以根據(jù)實際情況來)

已經(jīng)啟動 elasticsearch . 地址是 119.215.99.45 端口:9200.

已經(jīng)安裝 logstash, 地址在 /opt/logstash

已經(jīng)安裝 logstash-input-jdbc插件

準(zhǔn)備兩個文件jdbc.conf、msg.sql,名字不重要隨便起

jdbc.conf ,輸入下面的內(nèi)容

input {

jdbc { ? ? ?# 數(shù)據(jù)庫連接字符串

jdbc_connection_string => "jdbc:mysql://數(shù)據(jù)庫IP地址:3306/db_search?characterEncoding=UTF-8&useSSL=false" ? ? ?# 數(shù)據(jù)庫用戶名和密碼

jdbc_user => "root"

jdbc_password => "password" ? ? ?# 數(shù)據(jù)庫java驅(qū)動包目錄

jdbc_driver_library => "/opt/logstash/mysql-connector-java-5.1.46-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" ? ? ?# 關(guān)聯(lián)第二個文件

statement_filepath => "msg.sql" ? ? ?# 開啟用戶字段追蹤判斷,緩存最后記錄的對應(yīng)字段,這里緩存的是主鍵id字段

use_column_value => true

tracking_column => "id"

record_last_run => true ? ? ?# 緩存文件目錄,會把最后操作的記錄的id緩存到這個文件中,可以先建好放在合適的位置

last_run_metadata_path => "/opt/logstash/msg-id.last" ? ? ?# 設(shè)定同步周期,當(dāng)前設(shè)置是每分鐘一次,更多設(shè)置請自己百度

schedule => "* * * * *" ? ? ?# 索引的分類

type => "msg" ? ?}}filter {

json {

source => "message"

remove_field => ["message"] ? ?}}output {

elasticsearch { ? ? ? ?# 地址

hosts => "119.215.99.45:9200" ? ? ? ?# 索引的名稱,可以隨便起,我這邊跟數(shù)據(jù)庫起了一樣的名字

index => "db_search" ? ? ? ?# 索引下面的分類,直接用了上面配置中的值

document_type => "%{type}" ? ?}

stdout {

codec => json_lines ? ?}}

msg.sql 里面輸入以下內(nèi)容

select

id,

msg_title,

msg_link,

publish_timefrom

msgwhere

id > :sql_last_value

這個就不需要多解釋了,根據(jù)你的實際情況來設(shè)置需要存到索引中的字段,其中 :sql_last_value 這個值會自動讀取之前設(shè)置的緩存文件msg-id.last中的值

很顯然我這個配置是不支持?jǐn)?shù)據(jù)修改的,因為我用的是主鍵id字段,如果有數(shù)據(jù)修改的需求可以指定其他的字段,原理我在文章開頭已經(jīng)講的很清楚了。

測試運行

啟動

sudo bin/logstash -f jdbc.conf

然后你就可以往mysql中插入數(shù)據(jù)了,等會再到elasticsearch中查看是否已經(jīng)自動建立相應(yīng)的索引,索引的文檔數(shù)是否等于mysql的新增數(shù)據(jù)數(shù)。具體我就不演示了

注意事項,很重要?。?!

此方法自動建立的索引有個很重要的問題,就是分詞器是用的系統(tǒng)默認(rèn)的,對中文支持很爛,而且索引一旦建立是不能修改分詞器的(切記,切記)!所以如果你需要指定分詞器(比如IK),就必須先建立索引,然后再進(jìn)行數(shù)據(jù)同步。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容