2.6.2.MySQL主从复制的原理
MySQL主從復制的原理
MySQL復制技術介紹
主從復制是MySQL數據庫的一種容災備份方案;是mysql自帶的功能,無需借助第三方工具,MySQL的主從復制并不是數據庫磁盤上的文件直接拷貝,而是通過邏輯的binlog日志復制到要同步的服務器本地,然后由本地的線程讀取日志里面的SQL語句重新應用到mysql數據庫中。
MySQL主從復制的應用場景
應用場景
??? 數據備份與容災、讀寫分離、業務拆分
使用公司
??? 適合于初創公司,小型電商/互聯網公司,一些小型云環境
切換技術
??? 手工切換,時間:>30分鐘(含重做主從關系,數據校驗等)
??? 自動切換,時間:按分鐘計算
MySQL主從復制是如何工作的?
復制一共分3個步驟
01 master將改變記錄到二進制日志 (binary log)中
(這些記錄叫做二進制日志事件, binary log events)
02 slave將 master的 binary log events拷貝到它的中繼日志(relay log);
03 slave重做中繼日志中的事件,將日志操作還原并生成數據。
01 master記錄二進制日志。在每個事務更新數據完成之前, master在二日志記錄這些改變。 MySQL將事務串行的寫入二進制日志,在事件寫入二進制日志完成后,master通知存儲引擎提交事務。
02 slave將 master的 binary log拷貝到它自己的中繼日志。
首先, slave開始一個工作線程:I/O線程。
I/O線程在 master上打開一個普通的連接,然后開始 binlog dump process
Binlog 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 數據庫支持單向、雙向、鏈式級聯、環狀等不同業務場景的復制。在復制過程中,一臺服務器充當主服務器(Master),接收來自用戶的內容更新,而一個或多個其他的服務器充當從服務器(Slave),接收來自主服務器 binlog文件的日志內容,解析出SQL重新更新到從服務器,使得主從服務器數據達到一致。
不推薦的方式
MySQL主從復制技術之同步方式
?
MySQL有四種同步方式
異步復制(asynchronous)
? 搭建簡單,使用非常廣泛,從mysql誕生之初,就產生了這種架構,性能非常好,可謂非常成熟。但是這種架構數據是異步的,所以有丟失數據庫的風險。
全同步復制(fully synchronous)
? 保證數據安全,不丟數據,損失性能。
傳統半同步復制( Semi synchronous)
? 性能,功能都介于異步和全同步中間。從mysq5.5開始誕生,目的是為了折中上述兩種架構的性能以及優缺點。
無損復制,增強版的半同步復制( lossless replication)
? 數據零丟失,性能好,mysq5.7誕生
MySQL主從復制技術之GTID特性
什么是GTID?
GTID( Global Transaction Identifiers):對于一個已提交事務的編號,事務的唯一編號,并且是一個全局唯一的編號。GTID和事務會記錄到 binlog中,用來標識事務。
GTD是用來替代以前傳統復制方法( binlog+ position),MySQL5.6.2開始支持GTD。
MySQL支持GTID后,一個事務在集群中就不再孤單,在每一個節點中,如果存在具相同標識符的情況,可以避免同一個事務,在同一個節點中出現多次的情況。
GTID的出現,最直接的效果就是,每一個事務在集群中具有了唯一性的意義,相對于行復制來講數據安全性更高,故障切換更簡單。
MySQL主從復制技術之 GTID-GTID組成
GTID 是由 server_uuid:Sequence_Number。
Server_Uuid:是一個MySQL實例的全局唯一標識;存放為在 $datadir/auto.cnf
Sequence_Number:是 MySQL內部的一個事務的編號,一個 MySQL實例不會重復的序列號(保證服務器內唯一),也表示在該實例上已經提交事務的數量,并且隨著事務提交而遞增。
根據GTID可以知道事務最初是在哪個實例上提交的,方便故障排查和切換
cat /mysql/data/3306/data/auto.cnf [auto] server-uuid=1599dcea-5a7b-11e8-94bd-000c292834b0總結
以上是生活随笔為你收集整理的2.6.2.MySQL主从复制的原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.4.5 MySQL InnoDB重做
- 下一篇: 2.5.2 MySQL二进制日志介绍