2.6.2.MySQL主從複製的原理
阿新 • • 發佈:2020-09-17
MySQL主從複製的原理
MySQL複製技術介紹
主從複製
是MySQL資料庫的一種容災備份方案;是mysql自帶的功能,無需藉助第三方工具,MySQL的主從複製並不是資料庫磁碟上的檔案直接拷貝,而是通過邏輯的binlog日誌複製到要同步的伺服器本地,然後由本地的執行緒讀取日誌裡面的SQL語句重新應用到mysql資料庫中。MySQL複製能幹什麼?
MySQL主從複製的應用場景
應用場景 資料備份與容災、讀寫分離、業務拆分使用公司 適合於初創公司,小型電商/網際網路公司,一些小型雲環境切換技術 手工切換,時間:>30分鐘(含重做主從關係,資料校驗等) 自動切換,時間:按分鐘計算MySQL主從複製是如何工作的?
複製一共分3個步驟01 master將改變記錄到二進位制日誌 (binary log)中(這些記錄叫做二進位制日誌事件, binary log events)
02 slave將 master的 binary log events拷貝到它的中繼日誌(relay log);03 slave重做中繼日誌中的事件,將日誌操作還原並生成資料。
MySQL主從複製是如何工作的?
01 master記錄二進位制日誌。在每個事務更新資料完成之前, master在二日誌記錄這些改變。 MySQL將事務序列的寫入二進位制日誌,在事件寫入二進位制日誌完成後,master通知儲存引擎提交事務。02 slave將 master的 binary log拷貝到它自己的中繼日誌。首先, slave開始一個工作執行緒:I/O執行緒。I/O執行緒在 master上開啟一個普通的連線,然後開始 binlog dump processBinlog dump process 從master的二進位制日誌中讀取事件接受的單位是(event),如果已經跟上 master,它會睡眠並等待 master產生新的事件。I/O 執行緒將這些事件寫入中繼日誌。
03. SQL slave thread(SQL從執行緒)是處理該過程的最後一步。SQL執行緒從中繼日誌讀取事件,並重放其中的事件(回放的單位也是 event)而更新slave的資料,使其與 master中的資料一致。只要該執行緒與I/O執行緒保持一致,中繼日誌通常會位於OS的快取中,所以中繼日誌的開銷很小。
在master中也有一個工作執行緒:
和其它MySQL的連線樣,slave 在 master中開啟一個連線也會使得 master開始一個執行緒。
MySQL主從複製的常用拓撲結構
不推薦的方式
MySQL主從複製技術之同步方式
MySQL主從複製技術之同步方式
MySQL有四種同步方式非同步複製(asynchronous) 搭建簡單,使用非常廣泛,從mysql誕生之初,就產生了這種架構,效能非常好,可謂非常成熟。但是這種架構資料是非同步的,所以有丟失資料庫的風險。全同步複製(fully synchronous) 保證資料安全,不丟資料,損失效能。傳統半同步複製( Semi synchronous) 效能,功能都介於非同步和全同步中間。從mysq5.5開始誕生,目的是為了折中上述兩種架構的效能以及優缺點。無損複製,增強版的半同步複製( lossless replication) 資料零丟失,效能好,mysq5.7誕生MySQL主從複製技術之GTID特性
MySQL支援GTID後,一個事務在叢集中就不再孤單,在每一個節點中,如果存在具相同識別符號的情況,可以避免同一個事務,在同一個節點中出現多次的情況。
GTID的出現,最直接的效果就是,每一個事務在叢集中具有了唯一性的意義,相對於行復制來講資料安全性更高,故障切換更簡單。
MySQL主從複製技術之 GTID-GTID組成
GTID 是由 server_uuid:Sequence_Number。Server_Uuid:是一個MySQL例項的全域性唯一標識;存放為在 $datadir/auto.cnfSequence_Number:是 MySQL內部的一個事務的編號,一個 MySQL例項不會重複的序列號(保證伺服器內唯一),也表示在該例項上已經提交事務的數量,並且隨著事務提交而遞增。根據GTID可以知道事務最初是在哪個例項上提交的,方便故障排查和切換cat /mysql/data/3306/data/auto.cnf
[auto]
server-uuid=1599dcea-5a7b-11e8-94bd-000c292834b0