將SQLServer數據同步到MySQL用什么方法?
在SQLS
mysql下載到哪一個路徑?
如果它沒有未被修改,默認安裝路徑為is-C:/Program文件/MySQL/MySQLs
如何把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日志);或者mypipe,支持解析Binlog日志的內容并推送到Kafka。如果要把它們寫入ES,就需要額外編寫代碼,從Kafka消費數據,寫入ES。
如上所述,我們項目中的實現方案是將關系數據庫DB2/Mysql中的數據同步到MongoDB、Mysq中。LBinloglog仍然可以使用,DB2很難實時通知發生變化的數據(編寫一個程序部署在DB2服務器上,需要與數據庫關聯,當數據發生變化時,程序向外圍系統發送MQ通知)。不管性能能否得到保證,這意味著"編寫一個通知程序,部署在數據庫所在的服務器上(侵入式)",這至少對我們公司來說是不可能的。
我們采用一種很低級的來解決這個問題,即Java程序掃描DB2表中的時間戳,讀取最近發生變化的數據,處理到MongoDB中;
雖然實現方案比較低,但是效果還不錯,因為在關系型數據到MongoDB的數據同步過程中,我們可以自己做數據處理;相當于按照某個數據維度,比如客戶維度,關聯了幾十個表,處理后在MongoDB中保存一個文檔;對外提供服務時,查詢效率明顯提高,因為提前完成了表關聯(接口響應多為毫秒級,即使超過50ms也會很慢)。
缺點也很明顯。數據從關系數據庫到MongoDB的延遲非常高,我們的項目經過幾次優化后需要20分鐘左右。所以一定要結合業務場景考慮是否使用這個方案。
我會繼續分享我對Java開發、架構設計、程序員職業發展等方面的看法,希望得到大家的關注。