日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

2.6.2.MySQL主从复制的原理

發布時間:2024/9/3 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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主从复制的原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。