av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

講解一下MySQL半同步模式機制

MySQL主從復(fù)制包括異步模式、半同步模式、GTID模式以及多源復(fù)制模式,本篇文章重點講解一下mysql的半同步模式。

創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)西市,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

一,為什么要使用半同步復(fù)制?

MySQL復(fù)制默認是異步復(fù)制,Mysql Master Server將自己的Binary Log通過復(fù)制線程傳輸出去以后,Mysql Master Sever就自動返回數(shù)據(jù)給客戶端,但并不知道Slave是否或何時已經(jīng)接收且已處理,因此存在一定的概率備庫與主庫的數(shù)據(jù)是不對等的。在異步復(fù)制的機制的情況下,如果Master宕機,事務(wù)在Master上已提交,但很可能這些事務(wù)沒有傳到任何的Slave上。假設(shè)有Master->Salve故障轉(zhuǎn)移的機制,此時Slave也可能會丟失事務(wù)。有些情況下需要保持主備庫的強一致性,此時啟用MySQL的半同步復(fù)制特性則是非常完美的。semi_sync_replication是google為mysql開發(fā)的一個基于半同步的補丁,從mysql5.5之后,mysql為了保證主從庫數(shù)據(jù)一致性,引進了semi-sync功能。

在半同步復(fù)制的架構(gòu)下,當(dāng)master在將自己binlog發(fā)給slave上的時候,要確保slave已經(jīng)接受到了這個二進制日志以后,才會返回數(shù)據(jù)給客戶端。對比兩種架構(gòu):異步復(fù)制對于用戶來說,可以確保得到快速的響應(yīng)結(jié)構(gòu),但是不能確保二進制日志確實到達了slave上;半同步復(fù)制對于客戶的請求響應(yīng)稍微慢點,但是他可以保證二進制日志的完整性。

二,半同步復(fù)制原理

半同步復(fù)制的概念:

1,當(dāng)Slave主機連接到Master時,能夠查看其是否處于半同步復(fù)制的機制。

2,當(dāng)Master上開啟半同步復(fù)制的功能時,至少應(yīng)該有一個Slave開啟其功能。此時,一個線程在Master上提交事務(wù)將受到阻塞,直到得知一個已開啟半同步復(fù)制功能的Slave已收到此事務(wù)的所有事件,或等待超時。

3,當(dāng)一個事務(wù)的事件都已寫入其relay-log中且已刷新到磁盤上,Slave才會告知已收到。在 Master 實例上,有一個專門的線程(ack_receiver)接收備庫的響應(yīng)消息,并以通知機制告知主庫備庫已經(jīng)接收的日志,可以繼續(xù)執(zhí)行。

4,如果等待超時,也就是Master沒被告知已收到,此時Master會自動轉(zhuǎn)換為異步復(fù)制的機制。當(dāng)至少一個半同步的Slave趕上了,Master與其Slave自動轉(zhuǎn)換為半同步復(fù)制的機制。

5,半同步復(fù)制的功能要在Master,Slave都開啟,半同步復(fù)制才會起作用;否則,只開啟一邊,它依然為異步復(fù)制。

6,半同步特性的出現(xiàn),就是為了保證在任何時刻主備數(shù)據(jù)一致的問題。相對于異步復(fù)制,半同步復(fù)制要求執(zhí)行的每一個事務(wù),都要求至少有一個備庫成功接收后,才返回給用戶。

二,半同步復(fù)制的實現(xiàn)

配置主節(jié)點:

1. mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';#安裝插件
2. Query OK,0 rows affected (0.07 sec)
3.  
4. mysql> show global variables like '%semi%';
5. +------------------------------------+--------------+
6. |Variable_name|Value|
7. +------------------------------------+--------------+
8. | rpl_semi_sync_master_enabled | OFF |
9. | rpl_semi_sync_master_timeout |10000|
10. | rpl_semi_sync_master_trace_level |32|
11. | rpl_semi_sync_master_wait_no_slave | ON |
12. | rpl_semi_sync_master_wait_point | AFTER_COMMIT |
13. +------------------------------------+--------------+
14. 5 rows inset(0.00 sec)
15.  
16. mysql>setglobal rpl_semi_sync_master_enabled=on;#啟用插件
17. Query OK,0 rows affected (0.02 sec)
18.  
19. mysql>setglobal rpl_semi_sync_master_timeout=2000;#設(shè)置超時時間
20. Query OK,0 rows affected (0.00 sec)
21.  
22. mysql> show global variables like '%semi%';
23. +------------------------------------+--------------+
24. |Variable_name|Value|
25. +------------------------------------+--------------+
26. | rpl_semi_sync_master_enabled | ON |
27. | rpl_semi_sync_master_timeout |2000|
28. | rpl_semi_sync_master_trace_level |32|
29. | rpl_semi_sync_master_wait_no_slave | ON |
30. | rpl_semi_sync_master_wait_point | AFTER_COMMIT |
31. +------------------------------------+--------------+
32. 5 rows inset(0.00 sec)
33.  

rpl_semi_sync_master_enabled是控制Master是否開啟半同步,開啟或不開啟,將其設(shè)置為ON或OFF(1or0).

rpl_semi_sync_master_timeout是控制Master等待多長時間被告知Slave已收到,也就是所謂的超時時間。

rpl_semi_sync_slave_enabled是控制Slave是否開啟半同步,開啟或不開啟,將其設(shè)置為ON或OFF(1or0)。

監(jiān)控半同步復(fù)制的狀態(tài)變量(幾個常用的):

Rpl_semi_sync_master_clients:查看有多少個開啟半同步復(fù)制的插件的Slave

Rpl_semi_sync_master_status:查看在Master上半同步復(fù)制是否正在運行,其值為ON時,說明Master已啟用半同步且已被告知有Slave收到;其值為OFF時,說明Master沒啟用半同步或是沒被告知,由于timeout等原因。

Rpl_semi_sync_master_no_tx:查看有多少事務(wù)沒有用半同步復(fù)制的機制進行復(fù)制。

Rpl_semi_sync_master_yes_tx:查看有多少事務(wù)是通過半同步復(fù)制機制成功復(fù)制。

Rpl_semi_sync_slave_status:查看Slave上半同步復(fù)制是否正常運行,其值為ON時,說明Slave正通過半同步復(fù)制且Slave I/O正在運行;為OFF時,反之。

使用相同步驟配置從節(jié)點,完成后需要重啟io_thread,不重啟當(dāng)執(zhí)行時會超時,超時后則自動降為異步:

1. MariaDB[mydb]> install plugin rpl_semi_sync_master soname 'semisync_master.so';
2. MariaDB[mydb]>setglobal rpl_semi_sync_master_enabled=on;
3.  
4. MariaDB[mydb]> stop slave io_thread;
5. Query OK,0 rows affected (0.01 sec)
6.  
7. MariaDB[mydb]> start slave io_thread;
8. Query OK,0 rows affected (0.00 sec)
9.  
10. mysql> show global status like '%semi%';#查看半同步客戶端
11. +--------------------------------------------+-------+
12. |Variable_name|Value|
13. +--------------------------------------------+-------+
14. |Rpl_semi_sync_master_clients|0|
15. |Rpl_semi_sync_master_net_avg_wait_time|0|
16. |Rpl_semi_sync_master_net_wait_time|0|
17. |Rpl_semi_sync_master_net_waits|0|
18. |Rpl_semi_sync_master_no_times|1|
19. |Rpl_semi_sync_master_no_tx|3|
20. |Rpl_semi_sync_master_status| OFF |
21. |Rpl_semi_sync_master_timefunc_failures|0|
22. |Rpl_semi_sync_master_tx_avg_wait_time|0|
23. |Rpl_semi_sync_master_tx_wait_time|0|
24. |Rpl_semi_sync_master_tx_waits|0|
25. |Rpl_semi_sync_master_wait_pos_backtraverse|0|
26. |Rpl_semi_sync_master_wait_sessions|0|
27. |Rpl_semi_sync_master_yes_tx|0|
28. +--------------------------------------------+-------+
29. 14 rows inset(0.00 sec)

然后自行驗證吧!

總結(jié):使用半同步復(fù)制機制,性能也許會受到影響,但其主要是為了維持數(shù)據(jù)完整性,安全性的的一個策略,雖會損失一點性能,但還是值得的。


新聞標(biāo)題:講解一下MySQL半同步模式機制
本文地址:http://uogjgqi.cn/article/ccshoho.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流