如何把mysql中的數據同步到elasticsearch中?
至于ES,我還沒有沒有在實際項目中應用過(我自己學過,沒有t沒經過實戰);我們的項目使用MongoDB;由于項目的特殊性,我們研究了很多關于A-gtB的數據同步方案,包括DB2/Mysql到MongoDB,MongoDB到MongoDB等等。
將MySQL數據同步到es的方案將MySQL數據實時同步到ES,可以實現ES中的低延遲檢索。有的公司為自己的項目做了子庫,可以設置一套es來放所有的數據(或者所有數據的某些字段,達到全檢索的效果)。常用的數據同步方案如下:
MySQLBinlog:MySQLBinlog日志可以用于數據庫的主從復制和數據恢復,也可以將MySQL數據同步到ES;這里需要注意的是,Binlog的日志模式只能使用行模式(另外兩種模式是語句和混合);解析Binlog日志的內容,執行ES文檔API,這樣數據就可以同步到ES中;
MySQLdump:如果是新建項目,使用Binlog進行數據同步是沒有問題的。但是如果MySQL已經運行了一段時間,項目架構中加入了ES,那么歷史數據的遷移就需要額外的處理,因為Binlog可能已經被覆蓋了。此時可以通過mysqldump導出已有數據,然后使用Binlog來同步歷史數據。
開源工具:前兩種方法都是數據庫日志級別的,我們也可以使用一些開源工具,比如Go-Go-MySQL-elasticsearch;;它可以幫助我們完成第一次完全數據同步和后續的增量數據同步(底層也是解析Binlog日志);或者mypip
MySQL主從復制能完美解決數據庫的單點問題嗎?為什么?
沒有完美的解決方案。只有正確的解決方案。
在使用主從的時候,我們其實已經放棄了強一致性。因為實驗對象只問了一個問題,他沒有問。;不要考慮訪問量。即假設主從復制可以完全支持當前的系統訪問。)
常規數據庫主從設置:
主庫可以讀寫。
從庫中只讀意味著系統可以從主庫和從庫中獲取數據。數據寫入主庫后,會自動同步到從庫。
這就構成了一個簡單的分布式系統。根據cap定理,三個只能選一個。主從終于一致了。如果它們強一致,系統可用性不但不會提高,反而會降低。
讓讓我們看看上面的主從結構可能會出現什么問題:
系統寫入主庫,然后從主庫查詢。這是單點數據庫,沒有影響。
系統寫入主庫,然后從從庫檢查:-如果數據已經同步,它沒有影響。
-如果數據尚未同步,則查詢是舊數據。
-如果同步出現問題,主機和從機將斷開連接。如果系統可以如果沒有察覺到,查詢可能總是舊數據。這里需要對同步進行監控,當同步出現問題時,及時處理。
主庫掛機。從庫需要及時察覺,替換主庫。同時需要通知運維人員處理,否則會變成單點。
掛在圖書館。主庫數據無法與從庫同步。也要及時通知處理。
如果主從切換自動化,單點故障的概率只會降低50%(如果主庫或備用庫掛起,無人恢復)。