MySQL複製機制原理

2022-07-03 19:09:12 字數 1800 閱讀 4132

複製,就是對資料的完整拷貝,說到為什麼要複製,首先能想到的是怕資料意外丟失,使得使用者蒙受損失。

當完成了資料複製之後,會發現它的優勢不止這一點,假如一台機器宕機了,可以啟用備份在另一台機器的資料。畢竟宕機的概率很小,閒暇時間還可以讓備份機器分擔主機器的流量壓力。除此之外,當要公升級資料庫版本時,可以在不停止使用者服務的情況下優先公升級備用機器,待觀測其可用穩定時再將主資料庫公升級。

但是,也不能總讓dba手動拷貝來完成複製,萬一在dba蹲坑的時候宕機了,在蹲坑期間產生的資料由於沒有及時備份,會導致備用資料庫的資料缺失,所以還是要設計一套可以自動複製的機制。

我們暫定被複製的資料庫為主庫,貼上出來的為從庫,要實現主庫到從庫的複製,看起來非常簡單,只需乙個計畫任務,定時將主庫資料檔案複製乙份,並傳輸到從庫所在伺服器。

但畢竟定時任務不是實時的,萬一主庫在上次複製的十分鐘後發生了故障,被啟用的從庫用的是最近一次複製的資料,所以會缺失十分鐘的資料,後果不堪設想。

還是要實時複製,那可以這樣,主庫將每次執行完的語句實時發給從庫,讓從庫馬上執行,就能保證兩邊資料一致了。

不太好的是,主庫是實時傳送資料給從庫的,需要等從庫執行完畢才能處理下一條語句,嚴重占用了主庫的執行時間,如果從庫過多,主庫就廢了。

還得改成非同步才能節省主庫的時間,可以將主庫執行完的語句存到檔案裡,讓從庫來取,這樣主庫就不用等待從庫了。既然是寫到檔案,速度是很快的,主庫完全可以在執行前就將語句寫到檔案中,達到更高的同步效率。

上述有些問題,從庫無法做到跑去主庫取資料,只能起乙個執行緒先與主庫建立連線,並向主庫索要資料,然後主庫也起乙個執行緒讀取檔案內容,並推給從庫執行緒,從庫收到語句後就可以馬上執行了。

這樣效率還是很低,主庫的執行緒要等從庫收到語句並執行完畢才能推下一條,如果有多個從庫,主庫就要開啟多個執行緒長期與各個從庫保持通訊,占用主庫伺服器資源,不如從庫也建立個檔案臨時儲存主庫發來的語句,先存起來再慢慢執行,主庫壓力小了,從庫也放心。

現在從庫有了自己的檔案做中繼,就不用著急了,從庫可以再起乙個執行緒,慢慢執行中繼檔案中的語句,執行完畢之後原檔案沒有價值了,就可以清理掉,免得占用伺服器資源。

到目前為止,最基本的複製機制就設計完了,這種由主庫到從庫的複製方式就是典型的主從架構,在此基礎上可以進行演化,比如從庫有很多,主庫要為每個從庫推送資料,主庫的壓力會隨之增大,又因為主庫的職責不僅僅是同步資料,還要忙著讀寫資料,所以同步資料的事可以找人代替,比如在主庫與從庫之間再建立乙個主庫,新建立的主庫唯一的職責就是同步資料給從庫,這樣真正的主庫就只需要推送一次資料給新建的主庫,其餘時間就可以安心讀寫資料了。

MySQL複製原理

參考官網 mysql複製功能是通過三個執行緒實現的,包括主上的binlog dump tread和從上的sql thread i o ttread master建立binlog dump thread,用於 當sl e連線到master時傳送binlog events給其,dump thread每次...

mysql 複製的原理

mysql的複製原理大致如下 主庫在資料提交時會把資料變更作為事件記錄在二進位制日誌檔案binlog中 可通過sync binlog控制binlog日誌重新整理到磁碟的頻率 主庫推送二進位制日誌檔案binlog中的事件到從庫的中繼日誌relay log,之後從庫根據中繼日誌relaylog重做資料變...

mysql主從複製原理

mysql主從複製 靈活 用途及條件 mysql主從複製用途 主從部署必要條件 主從原理 mysql主從複製原理 從庫生成兩個執行緒,乙個i o執行緒,乙個sql執行緒 1 當主伺服器發生改變時,會將此改變以二進位制日誌的形式傳送到binlog中 2 而副伺服器會有乙個中繼日誌,實時監控主伺服器的b...