MySQL復制被普遍認為是十分有效的,主服務器進行更改后,從服務器可在幾秒內(nèi)做出相應的改動。但如果發(fā)生兩者之間同步緩慢的問題, 那么主要有以下原因:
從結點磁盤問題:復制操作對每個數(shù)據(jù)庫都是由一個線程來完成,通常執(zhí)行變更時的滯后是由磁盤延遲引起的。在這種情況下,您應該考慮使用SSD加速這個過程。
帶寬低/網(wǎng)絡延遲高:如果兩個服務器位于遠程位置(高延遲的情況下)或服務器之間的存在帶寬較低的問題,我們應使用下面的方法之一或者兩者結合使用,以最大限度地減少服務器間通信量。
使用基于語句的復制:基于行的復制會為數(shù)據(jù)庫中每一行的變更創(chuàng)建一個SQL 語句?;谡Z句的復制是應用程序發(fā)送的實際SQL語句的記錄。通常基于語句的復制在記錄大小方面更為有效。然而,你應該意識到,當你使用UPDATE ... LIMIT1時,基于語句的復制可能并不十分有效
壓縮通信量: MySQL支持使用 slave_compressed_protocol參數(shù)進行日志壓縮復制。這種方法將減少高達80%的服務器之間的通信。然而,壓縮是計算密集型的,所以你應該意識到這樣會產(chǎn)生一些額外的CPU利用率(這通常不屬于數(shù)據(jù)庫中的問題)。這個參數(shù)應該在兩個服務器上都啟用:
動態(tài)的從MySQL命令行輸入:SET GLOBALslave_compressed_protocol = 1;
在MySQL配置文件中進行配置:
#compress master-slave communication
slave_compressed_protocol = 1
最起碼,要理解你的復制行為為何滯后,然后了解如何使用正確的方法來解決滯后問題。是的,它就是這么容易,且十分有效。