一河劝、同步要點(diǎn):
1、logstash每分鐘執(zhí)行一次
2矛紫、sql 語(yǔ)句必須帶limit N赎瞎,這里的N,在串行單并發(fā)執(zhí)行時(shí)颊咬,建議為100000务甥,分頁(yè)每次50000
3、從MySQL從庫(kù)同步數(shù)據(jù)
二喳篇、同步測(cè)試
三敞临、負(fù)載情況
1、同步機(jī)器負(fù)載
2麸澜、ES磁盤(pán)讀寫(xiě)
3挺尿、db機(jī)器負(fù)載
4、db延遲負(fù)載
四、Logstash配置文件
input {
jdbc {
# 設(shè)置 MySql/MariaDB 數(shù)據(jù)庫(kù)url以及數(shù)據(jù)庫(kù)名稱(chēng)
jdbc_connection_string => "jdbc:mysql://10.28.54.130:3306/mydb?useUnicode=true&allowMultiQuerie=true&characterEncoding=utf-8&serverTimezone=UTC"
# 用戶(hù)名和密碼
jdbc_user => "root"
jdbc_password => "xxxxx"
# 數(shù)據(jù)庫(kù)驅(qū)動(dòng)mysql-connector-java-8.0.19.jar所在位置票髓,可以是絕對(duì)路徑或者相對(duì)路徑
jdbc_driver_library => "/data/dba_logstash/logstash-7.17.7/mysql/mysql-connector-java-5.1.49.jar"
# 驅(qū)動(dòng)類(lèi)名
#jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_driver_class => "org.gjt.mm.mysql.Driver"
# 是否開(kāi)啟分頁(yè),ture為開(kāi)啟攀涵,我這里sql比較復(fù)雜所以就放棄使用這個(gè),后面細(xì)講
jdbc_paging_enabled => true
# 分頁(yè)每頁(yè)數(shù)量
jdbc_page_size => "50000"
# 設(shè)置時(shí)區(qū)
jdbc_default_timezone =>"Asia/Shanghai"
# 執(zhí)行的sql文件路徑
#statement_filepath => "/data/dba_logstash/logstash-7.17.7/mysql/my.sql"
#使用這個(gè)可以直接寫(xiě)sql語(yǔ)句洽沟,但是復(fù)雜的語(yǔ)句最好是寫(xiě)在文件內(nèi)
statement => "SELECT uhid,nickname as nick_name,mobile_ed,min_head_img_url,head_img_url,status,create_time,last_update_time,given_nickname,given_head_img_url,brief_intro,generations from new_user_info WHERE last_update_time > :sql_last_value ORDER
BY last_update_time limit 100000"
# 設(shè)置定時(shí)任務(wù)間隔 含義:分以故、時(shí)、天裆操、月怒详、年,全部為*默認(rèn)含義為每分鐘跑一次任務(wù)
schedule => "* * * * *"
#是否需要記錄某個(gè)字段值,如果為true,我們可以自定義要記錄的數(shù)據(jù)庫(kù)某個(gè)字段值踪区,例如id或date字段昆烁。如果為false,記錄的是上次執(zhí)行的標(biāo)記缎岗,默認(rèn)是一個(gè)timestamp
use_column_value => true
#記錄上次執(zhí)行字段值路徑静尼。我們可以在sql語(yǔ)句中這么寫(xiě):WHERE ID > :last_sql_value。其中 :sql_last_value 取得就是該文件中的值传泊,這個(gè)last_id會(huì)以文件形式存在鼠渺,上面截圖有
last_run_metadata_path => "/data/dba_logstash/logstash-7.17.7/mysql/last_id"
#如果use_column_value為真,需配置此參數(shù). 指定增量更新的字段名。當(dāng)然該字段必須是遞增的眷细,比如id或date字段拦盹。
tracking_column => "last_update_time"
# tracking_column 對(duì)應(yīng)字段的類(lèi)型,只能選擇timestamp或者numeric(數(shù)字類(lèi)型)溪椎,默認(rèn)numeric普舆,所以可以不寫(xiě)這個(gè)配置
tracking_column_type => "timestamp"
#如果為true,每次會(huì)記錄所更新的字段的值,并保存到 last_run_metadata_path 指定的文件中
record_last_run => true
# 是否清除 last_run_metadata_path 的記錄校读,true則每次都從頭開(kāi)始查詢(xún)所有的數(shù)據(jù)庫(kù)記錄
clean_run => false
# 是否將字段名稱(chēng)轉(zhuǎn)小寫(xiě)沼侣。默認(rèn)是true。這里注意Elasticsearch是區(qū)分大小寫(xiě)的
lowercase_column_names => false
}