溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中怎么實現(xiàn)半同步復(fù)制

發(fā)布時間:2021-07-26 15:09:29 來源:億速云 閱讀:165 作者:Leah 欄目:數(shù)據(jù)庫

MySQL中怎么實現(xiàn)半同步復(fù)制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

半同步復(fù)制:

什么是半同步復(fù)制?我們知道在默認情況下,MySQL的復(fù)制是異步的,這意味著主服務(wù)器及其從服務(wù)器是獨立的。異步復(fù)制可以提供***的性能,因為主服務(wù)器在將更新的數(shù)據(jù)寫入它的二進制日志(Binlog)文件中后,無需等待驗證更新數(shù)據(jù)是否已經(jīng)復(fù)制到從服務(wù)器中,就可以自由處理其它進入的事務(wù)處理請求。但這也同時帶來了很高的風(fēng)險,如果在主服務(wù)器或從服務(wù)器端發(fā)生故障,會造成主從數(shù)據(jù)的不一致,甚至在恢復(fù)時造成數(shù)據(jù)丟失。

半同步復(fù)制是從MySQL5.5開始引入了一種半同步復(fù)制功能,該功能可以確保主服務(wù)器和訪問鏈中至少一臺從服務(wù)器之間的數(shù)據(jù)一致性和冗余。在這種配置結(jié)構(gòu)中,一臺主服務(wù)器和其許多從服務(wù)器都進行了配置,這樣在復(fù)制拓撲中,至少有一臺從服務(wù)器在父主服務(wù)器進行事務(wù)處理前,必須確認更新已經(jīng)收到并寫入了其中繼日志(Relay  Log)。當(dāng)出現(xiàn)超時,源主服務(wù)器必須暫時切換到異步復(fù)制模式重新復(fù)制,直到至少有一臺設(shè)置為半同步復(fù)制模式的從服務(wù)器及時收到信息。

下面我們看一下怎么從普通復(fù)制轉(zhuǎn)化為半同步復(fù)制。假設(shè)我們已經(jīng)搭建完成一主兩從的GTID復(fù)制環(huán)境:

  • MySQL1:172.16.16.35:3306

  • MySQL2:172.16.16.35:3307

  • MySQL3:172.16.16.34:3306

這個環(huán)境因為我之前測試MHA的時候已經(jīng)是搭建好了,就不在強調(diào)怎么去搭建一個普通的GTID復(fù)制環(huán)境了,下面我們看一下怎么安裝

(1)安裝插件,三臺MySQL服務(wù)器都要執(zhí)行:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

我們可以通過以下語句查看是否安裝成功:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%'; +----------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +----------------------+---------------+ | rpl_semi_sync_master | ACTIVE | | rpl_semi_sync_slave | ACTIVE | +----------------------+---------------+ 2 rows in set (0.00 sec)

在三臺MySQL的配置文件當(dāng)中添加如下的參數(shù):

rpl_semi_sync_master_enabled=1 #開啟半同步復(fù)制

rpl_semi_sync_slave_enabled=on; #打開半同步復(fù)制

然后重啟數(shù)據(jù)庫,不安裝semisync_master.so的話是不能識別這個參數(shù)的,所以說這個參數(shù)要等安裝完以后在重啟。

(2)重啟完成后,默認就是半同步復(fù)制了,開始看一下半同步相關(guān)的參數(shù):

mysql> show variables like 'rpl_se%'; +-------------------------------------------+------------+ | Variable_name | Value | +-------------------------------------------+------------+ | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 10000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_for_slave_count | 1 | | rpl_semi_sync_master_wait_no_slave | ON | | rpl_semi_sync_master_wait_point | AFTER_SYNC | | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +-------------------------------------------+------------+ 8 rows in set (0.00 sec)

下面我們看一下這些參數(shù)具體是有什么含義:

rpl_semi_sync_master_enabled :主庫是否打開半同步復(fù)制

rpl_semi_sync_master_timeout :毫秒為單位,當(dāng)主庫等待從庫ACK的實踐超過這個值,就會自動轉(zhuǎn)化為異步復(fù)制

rpl_semi_sync_master_trace_level :master的trace  級別,分為四個(1,16,32,64),分別記錄不同的信息,32能夠輸出更詳細的網(wǎng)絡(luò)延遲等信息,也是默認值

rpl_semi_sync_master_wait_for_slave_count  :至少有N個slave接收到日志,一主多從的情況下只要有一個slave的ACK返回給了主庫,就會進行commit

rpl_semi_sync_master_wait_no_slave:默認為ON,當(dāng)半同步復(fù)制轉(zhuǎn)換為異步復(fù)制后,如果從庫的日志追趕上了主庫,會自動轉(zhuǎn)換為半同步復(fù)制,設(shè)置為OFF的話就不會再進行轉(zhuǎn)換。

rpl_semi_sync_slave_enabled :從庫是否打開半同步復(fù)制功能

rpl_semi_sync_slave_trace_level :trace 級別

rpl_semi_sync_master_wait_point :這是MySQL5.7新增的功能,可以設(shè)置兩個值A(chǔ)FTER_SYNC  和AFTER_COMMIT,AFTER_COMMIT的模式下master將每個事務(wù)寫入binlog ,傳遞到slave 刷新到磁盤(relay  log),同時主庫提交事務(wù)。master等待slave 反饋收到relay log,只有收到ACK后master才將commit  OK結(jié)果反饋給客戶端。AFTER_SYNC 情況下master 將每個事務(wù)寫入binlog , 傳遞到slave 刷新到磁盤(relay  log)。master等待slave 反饋接收到relay log的ack之后,再提交事務(wù)并且返回commit OK結(jié)果給客戶端。  即使主庫crash,所有在主庫上已經(jīng)提交的事務(wù)都能保證已經(jīng)同步到slave的relay log中。我們推薦使用默認AFTER_SYNC  的情況,這樣可以提高性能,減少等待時間。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI