日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
講解一下MySQL半同步模式機(jī)制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

配置主節(jié)點(diǎn):

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è)置超時(shí)時(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等待多長時(shí)間被告知Slave已收到,也就是所謂的超時(shí)時(shí)間。

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

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

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

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

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

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

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

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

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)

然后自行驗(yàn)證吧!

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


分享題目:講解一下MySQL半同步模式機(jī)制
本文路徑:http://m.5511xx.com/article/ccshoho.html