elasticsearch同步msysql

ElasticSearch的版本是elasticsearch-6.3.1

mysql的數據是5.7

logstash版本是6.3.1

ElasticSearch的插件elasticsearch-head-master  ,現在加壓好了,直接放在ElasticSearch目錄下面就好了,這不強制。

這個是mysql的數據庫連接驅動程序 mysql--connector-java-5.1.18.zip

因爲使用了ElasticSearch這個插件所以還需要安裝nondjs,因爲需要用的npm

1:先啓動ElasticSearch 

安裝ElasticSearch的插件,直接雙擊/bin/ElasticSearch.bat ,啓動成功後:http://127.0.0.1:9200/

2:安裝,啓動ElasticSearch插件

運行head需要藉助grunt命令,因此需要安裝grunt。所以先要安裝nodejs,雙加exe就可以了。然後cmd命令,node -v,如果出現版本號,說明安裝成功。

然後安裝grunt,npm install -g grunt  -cli ,如果在不行,就cd到nodejs的安裝目錄下執行這個命令。

grunt安裝好了之後,在cd到你解壓好的elasticsearch-head-master這個目錄下面(和bin同級的那個目錄)執行npm install,這裏如果失敗了請參考:https://blog.csdn.net/qq3401247010/article/details/78742524

啓動 cd到你解壓的head目錄下,bin同級,執行npm run start ,執行成功後 :http://localhost:9100/

3,首先在logstash目錄下面建一個lib,把你現在的mysql的連接驅動jar包放進去

建一個sql文件,我的是建jdbc.sql,裏面是你要同步的數據表的sql語句,也可以配置在conf中

SELECT
id,
sys_log_level,
project_name,
function_name,
sys_log_msg,
create_time 
FROM
log_sys 
ORDER BY
create_time DESC

 

這些東西都準備好了之後,修改logstash的配置文件,不是config文件夾下面的那個。上面的圖中看得到就是logstash.conf

input {
	tcp {
		port=>5549
	}
	jdbc{
		jdbc_connection_string => "jdbc:mysql://192.168.2.104:33060/ygsc_scm?useSSL=false&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"
		jdbc_user => "tt"
		jdbc_password => "2344WsL1JrUntER2Zns32WmGwr"
		jdbc_driver_library => "lib\mysql-connector-java-5.1.18-bin.jar"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_paging_enabled => "true"
		jdbc_page_size => "50000"
		statement_filepath => "jdbc.sql"
		schedule => "* * * * *"
		type => "jdbc"
	}
}
output {
	elasticsearch {
		index => "testdb"
		document_type => "%{type}"
		hosts => ["localhost:9200"] 
	}
}

  

 這些logstash的準備工作都做好了之後,修改logstash 文件夾下Gemfile文件,將source改爲:https://gems.ruby-china.org,然後進入logstash的bin目錄,執行logstash-plugin install logstash-input-jdbc 這裏如果有問題,請參考:https://blog.csdn.net/yowrhihoil/article/details/79568743,安裝插件然後進入bin目錄下執行logstash.bat -f  ogstash.conf,就可以啓動起來了。

 

後面會把這啓動項目做成服務的那種。就不用每次點擊bat或者輸入命令來啓動了。

同步多張表:

input {
  jdbc {
    type => "type_actor"
    jdbc_driver_library => "D:\\tool\\logstash-6.3.1\\bin\\lib\\mysql-connector-java-5.1.18.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/sakila"
    jdbc_user => "root"
    jdbc_password => "cbq12345"
    codec => plain { charset => "UTF-8"}
    #使用其它字段追蹤,而不是用時間
    #use_column_value => true
    #追蹤的字段
    #tracking_column => id
    
    #record_last_run => true
    #last_run_metadata_path => "D:\tool\logstash-6.3.1\bin\mysql\actor.txt"
    #clean_run => "false"
    statement => "select * from actor where last_update > :sql_last_value"
    jdbc_paging_enabled => "true"
    jdbc_page_size => "500"
    schedule => "* * * * *"
  }
  
  jdbc {
    type => "type_address"
    jdbc_driver_library => "D:\\tool\\logstash-6.3.1\\bin\\lib\\mysql-connector-java-5.1.18.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/sakila"
    jdbc_user => "root"
    jdbc_password => "cbq12345"
    codec => plain { charset => "UTF-8"}
    #使用其它字段追蹤,而不是用時間
    #use_column_value => true
    #追蹤的字段
    #tracking_column => id
    
    #record_last_run => true
    #last_run_metadata_path => "D:\tool\logstash-6.3.1\bin\mysql\address.txt"
    #clean_run => "false"
    statement => "select * from address where last_update > :sql_last_value"
    jdbc_paging_enabled => "true"
    jdbc_page_size => "500"
    schedule => "* * * * *"
  }
}

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

output {
    if [type]=="type_actor" {
        elasticsearch {
            hosts => ["localhost:9200"] 
            index => "actor_index"
            #document_type => "%{type}"
            #document_id => "%{id}"
        }
    }
    if [type]=="type_address" {
        elasticsearch {
            hosts => ["localhost:9200"] 
            index => "address_index"
            #document_type => "%{type}"
            #document_id => "%{id}"    
        }
    }    
stdout{

    codec => json_lines

    }
}
同步file:

input{
    file{
        #path屬性接受的參數是一個數組,其含義是標明需要讀取的文件位置
        path => [‘pathA’,‘pathB’]
        #表示多就去path路徑下查看是夠有新的文件產生。默認是15秒檢查一次。
        discover_interval => 15
        #排除那些文件,也就是不去讀取那些文件
        exclude => [‘fileName1’,‘fileNmae2’]
        #被監聽的文件多久沒更新後斷開連接不在監聽,默認是一個小時。
        close_older => 3600
        #在每次檢查文件列 表的時候, 如果一個文件的最後 修改時間 超過這個值, 就忽略這個文件。 默認一天。
        ignore_older => 86400
        #logstash 每隔多 久檢查一次被監聽文件狀態( 是否有更新) , 默認是 1 秒。
        stat_interval => 1
        #sincedb記錄數據上一次的讀取位置的一個index
        sincedb_path => ’$HOME/. sincedb‘
        #logstash 從什麼 位置開始讀取文件數據, 默認是結束位置 也可以設置爲:beginning 從頭開始
        start_position => ‘beginning’
        #注意:這裏需要提醒大家的是,如果你需要每次都從同開始讀取文件的話,關設置start_position => beginning是沒有用的,你可以選擇sincedb_path 定義爲 /dev/null
    }           
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章