溫馨提示×

溫馨提示×

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

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

MySQL半同步復(fù)制

發(fā)布時間:2020-06-28 10:52:05 來源:網(wǎng)絡(luò) 閱讀:228 作者:吳金瑞 欄目:建站服務(wù)器

    

1、半同步復(fù)制簡介

  何為半同步復(fù)制模式呢?在此我們先了解異步復(fù)制模式,這是MySQL的默認復(fù)制選項。異步復(fù)制即是master數(shù)據(jù)庫把binlog日志發(fā)送給slave數(shù)據(jù)庫,然后就沒有了然后了。在此暴露一個問題,當(dāng)slave服務(wù)器發(fā)生故障了,那么肯定會導(dǎo)致主從數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)不一致。

  為了解決上面的問題,MySQL5.5引入一種叫做半同步復(fù)制模式。開啟這種模式,可以保證slave數(shù)據(jù)庫接收完master數(shù)據(jù)庫發(fā)送過來的binlog日志并寫入自己的中繼日志中,然后反饋給master數(shù)據(jù)庫,告知已經(jīng)復(fù)制完畢。

  開啟這種模式后,當(dāng)出現(xiàn)超時,主數(shù)據(jù)庫將會自動轉(zhuǎn)為異步復(fù)制模式,直到至少有一臺從服務(wù)器接受到主數(shù)據(jù)庫的binlog,并且反饋給主數(shù)據(jù)庫。這時主數(shù)據(jù)庫才會切換回半同步復(fù)制模式。

注意:

半同步復(fù)制模式必須在主服務(wù)器和從服務(wù)器同時中開啟,否則將會默認為異步復(fù)制模式。


2、環(huán)境說明

  兩臺linux虛擬主機

  Linux版本CentOS6.6、MySQL 5.5

  ip:192.168.95.11(主)、192.168.95.12(從)


3、安裝與配置


  3.1、安裝前提

    1、必須是MySQL5.5或者以上

    2、MySQL必須有自動加載功能,即have_dynamic_loading變量為YES(因為我們是在MySQL里面來加載安裝這個功能插件)

       show variables like 'have_dynamic_loading';  #檢查是否具有自動加載功能

MySQL半同步復(fù)制

    3、主從復(fù)制已經(jīng)配置好,并且已經(jīng)ing工作著的。

      主從復(fù)制配置教程:h tt p:// w w w.cn blo gs.co m/ph pstud y2015-6/p/6485819.html


  3.2、安裝

    192.168.95.11加載安裝:

MySQL半同步復(fù)制

1 mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';2 3 mysql>show plugins;   #查看是否加載成功4 5 mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1;  #開啟半同步復(fù)制,默認是關(guān)閉的

MySQL半同步復(fù)制

MySQL半同步復(fù)制

    192.168.95.12加載安裝

MySQL半同步復(fù)制

 1 mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 2  3 mysql>show plugins;   #查看是否加載成功 4  5 mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1;  #開啟半同步復(fù)制,默認是關(guān)閉的 6  7 #重啟從服務(wù)器IO線程,手動將異步模式切換為半同步模式 8  9 mysql>STOP SLAVE IO_THREAD;10 11 mysql>START SLAVE IO_THREAD;

MySQL半同步復(fù)制

 


  3.3、配置文件
1 rpl_semi_sync_master_enabled=1  #主庫配置文件添加,表示以后啟動MySQL將會自動開啟半同步復(fù)制2 3 rpl_semi_sync_slave_enabled=1  #從庫配置文件添加,同上


4、查看相關(guān)參數(shù)

  1、主從執(zhí)行命令show variables like '%semi%';

  master:

MySQL半同步復(fù)制

  Rpl_semi_sync_master_enabled=ON表示開啟半同步復(fù)制

  Rpl_semi_sync_master_timeout=1000默認1000毫秒,即10秒超時,將切換為異步復(fù)制

  Rpl_semi_sync_master_wait_no_slave表示是否允許master每個事物都要等待slave接收確認,默認為ON

  Rpl_semi_sync_master_trace_level=32表示用于開啟半同步復(fù)制時的調(diào)試級別,默認32

  slave:

MySQL半同步復(fù)制

  Rpl_semi_sync_slave_enabled=ON表示在slave已經(jīng)開始半同步復(fù)制模式

  Rpl_semi_sync_slave_trace_level=32表示用于開啟半同步復(fù)制時的調(diào)試級別,默認32

  2、主從執(zhí)行命令show status like '%semi%';

  master

MySQL半同步復(fù)制

  Rpl_semi_sync_master_status表示主服務(wù)器使用是異步還是半同步復(fù)制

  Rpl_semi_sync_master_client表示從服務(wù)器有多少個配置成半同步復(fù)制

  Rpl_semi_sync_master_yes_tx表示從服務(wù)器確認成功提交的數(shù)量

  Rpl_semi_sync_master_no_tx表示從服務(wù)器確認失敗提交的數(shù)量

  slave:

MySQL半同步復(fù)制

  Rpl_semi_sync_slave_status表示從服務(wù)器開啟半同步復(fù)制


5、測試

  模擬slave掛掉,master等待10s仍沒接收到反饋信號,則轉(zhuǎn)為異步復(fù)制模式,繼續(xù)執(zhí)行

  首先同步創(chuàng)建數(shù)據(jù)庫aa

  1、slave執(zhí)行stop slave;關(guān)閉主從復(fù)制

  2、master在aa數(shù)據(jù)庫中創(chuàng)建表tab1,沒接收到反饋信號,等待十秒后(Rpl_semi_sync_master_timeout=1000等待超時),繼續(xù)執(zhí)行

    master:

    MySQL半同步復(fù)制

    slave:

    MySQL半同步復(fù)制

  3、master在數(shù)據(jù)庫中再創(chuàng)建tab2,不需要等待反饋,直接執(zhí)行

   【當(dāng)反饋超時時,master將切換到異步復(fù)制模式。此時是異步模式,不需要等待】

    MySQL半同步復(fù)制

  4、slave執(zhí)行start slave,數(shù)據(jù)開始同步,建立tab1、tab2,反饋給master,并切換為半同步復(fù)制

   MySQL半同步復(fù)制

  5、slave執(zhí)行stop slave;關(guān)閉主從復(fù)制

  6、master在數(shù)據(jù)庫中創(chuàng)建表tab3,此時需要等待10s,接收slave反饋信號;等待超時,切換為異步復(fù)制模式,繼續(xù)執(zhí)行

   【步驟4時,數(shù)據(jù)同步已經(jīng)反饋給master,此時master已經(jīng)是半同步復(fù)制模式】

   MySQL半同步復(fù)制


6、總結(jié)

  半同步復(fù)制模式的性能和并發(fā)比異步復(fù)制模式低的,因為每次復(fù)制都要進行反饋,相比之下多了一個步驟。

  說實話我還是不太明白為什么半同步復(fù)制就可以保持數(shù)據(jù)的完整性呢?若是slave掛了,master還不是變回異步復(fù)制。和之前的全異步?jīng)]什么區(qū)別。還有就是即使多了個信息反饋,但是反饋回來除了讓master確認還有什么作用?假若slave掛了,沒有反饋信息,那master還是沒什么進一步的處理方法呀。


向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