假設(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ù)同步。