什么網(wǎng)站詳情頁做的好百度競(jìng)價(jià)排名多少錢
1.MySQL主從復(fù)制模式
1.1異步復(fù)制
異步復(fù)制為 MySQL 默認(rèn)的復(fù)制模式,指主庫寫 binlog、從庫 I/O 線程讀 binlog 并寫入 relaylog、從庫 SQL 線程重放事務(wù)這三步之間是異步的。
異步復(fù)制的主庫不需要關(guān)心備庫的狀態(tài),主庫不保證事務(wù)被傳輸?shù)綇膸?#xff0c;如果主庫崩潰,某些事務(wù)可能還未發(fā)送到從庫,切換后可能導(dǎo)致事務(wù)的丟失。
【優(yōu)點(diǎn)】是可以有更高的吞吐量,【缺點(diǎn)】是不能保持?jǐn)?shù)據(jù)實(shí)時(shí)一致,不適合要求主從數(shù)據(jù)一致性要求較高的應(yīng)用場(chǎng)景。
1.2同步復(fù)制
同步復(fù)制的模式下,主庫在提交事務(wù)前,必須確認(rèn)事務(wù)在所有的備庫上都已經(jīng)完成提交。當(dāng)主庫執(zhí)行完客戶端提交的事務(wù)后,需要等到所有從庫也都執(zhí)行完這一事務(wù)后,才返回給客戶端執(zhí)行成功。因?yàn)橐鹊剿袕膸於紙?zhí)行完,【缺點(diǎn)】執(zhí)行過程中會(huì)被阻塞,等待返回結(jié)果,所以性能上會(huì)有很嚴(yán)重的影響,其【優(yōu)點(diǎn)】是任何時(shí)候主備庫都是一致的,主庫的崩潰不會(huì)丟失事務(wù)。
1.3半同步復(fù)制
它結(jié)合了異步復(fù)制和同步復(fù)制的優(yōu)點(diǎn)。在半同步復(fù)制中,主服務(wù)器在確認(rèn)從服務(wù)器已經(jīng)接收并且記錄了事件之后才繼續(xù)執(zhí)行其他事件,從而減少了數(shù)據(jù)丟失。MySQL5.5開始通過插件的方式支持半同步復(fù)制。
與同步復(fù)制相比,半同步復(fù)制速度快很多,因?yàn)樗恍枰辽?個(gè)從庫確認(rèn)寫入 relaylog,并不需要完成在從庫上的事務(wù)提交,同時(shí)又比異步復(fù)制更安全,因?yàn)橹鲙煸谔峤粫r(shí),事務(wù)至少已經(jīng)存在2個(gè)地方(主庫的 binlog 和從庫的 relaylog)。
由于半同步復(fù)制在提交事務(wù)前,需要從庫返還確認(rèn)信息,所以這里涉及到網(wǎng)絡(luò)的往返通信開銷,因此半同步復(fù)制只適合在網(wǎng)絡(luò)條件較好且地理上距離不遠(yuǎn)的環(huán)境部署,否則可能會(huì)因?yàn)榫W(wǎng)絡(luò)延遲大幅降低主庫性能。
2.MySQL半同步復(fù)制
MySQL官方提供的半同步復(fù)制插件semisync_master.so
和semisync_slave.so
,登錄MySQL服務(wù)器,在MySQL命令行客戶端中執(zhí)行以下命令來安裝插件:
– 在主服務(wù)器上安裝
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
– 在從服務(wù)器上安裝
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
安裝插件后,可以通過執(zhí)行SHOW PLUGINS;
命令來驗(yàn)證插件是否成功安裝,在輸出中查找rpl_semi_sync_master
和rpl_semi_sync_slave
插件,并確保它們的Status列為ACTIVE
。
如果需要卸載,則執(zhí)行UNINSTALL PLUGIN plugin_name
語句,其中plugin_name
是要卸載的插件名稱。
在主服務(wù)器的配置文件中添加:
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 10000 # 超時(shí)時(shí)間,單位毫秒
在從服務(wù)器的配置文件中添加:
[mysqld]
rpl_semi_sync_slave_enabled = 1
rpl_semi_sync_master_enabled
作用于主庫(Master)是否啟用半同步復(fù)制功能,開啟后主服務(wù)器會(huì)等待至少一個(gè)從服務(wù)器確認(rèn)它已經(jīng)接收并記錄了二進(jìn)制日志事件中的事務(wù),然后才會(huì)向客戶端報(bào)告事務(wù)已提交;
如果在從庫上嘗試設(shè)置 rpl_semi_sync_master_enabled 為 ON,MySQL 實(shí)際上會(huì)忽略這個(gè)設(shè)置。由于從庫不是復(fù)制過程中的“主”節(jié)點(diǎn),因此設(shè)置該參數(shù)不會(huì)對(duì)復(fù)制過程產(chǎn)生任何積極影響。它不會(huì)改變從庫的行為或性能。
rpl_semi_sync_slave_enabled
用于控制從庫(Slave)是否啟用半同步復(fù)制功能,開啟后從服務(wù)器會(huì)將其接收到的事務(wù)寫入中繼日志并應(yīng)用這些事務(wù)后,向主服務(wù)器發(fā)送一個(gè)確認(rèn)消息。這個(gè)確認(rèn)消息是半同步復(fù)制機(jī)制中主服務(wù)器等待的“至少一個(gè)確認(rèn)”。
在某些情況下,如果主庫無法及時(shí)從從庫接收到確認(rèn)信息(例如,從庫宕機(jī)或網(wǎng)絡(luò)故障),主庫會(huì)根據(jù) rpl_semi_sync_master_timeout
參數(shù)(單位毫秒,行內(nèi)基線為5000)設(shè)置的超時(shí)時(shí)間來決定是否繼續(xù)等待或降級(jí)為異步復(fù)制(過短的超時(shí)時(shí)間可能導(dǎo)致頻繁地切換到異步復(fù)制模式);
【降級(jí)日志】
可以通過查看復(fù)制狀態(tài)的相關(guān)變量(如SHOW STATUS LIKE 'Rpl_semi_sync_master_status';
)來推斷復(fù)制模式是否已更改
可以通過查看MySQL的錯(cuò)誤日志(Error Log)來獲取與降級(jí)相關(guān)的信息。
使用半同步復(fù)制的好處
- 提高數(shù)據(jù)一致性:與異步復(fù)制相比,半同步復(fù)制能夠確保至少有一個(gè)從服務(wù)器已經(jīng)接收到并記錄了主服務(wù)器上的事務(wù),從而提高了數(shù)據(jù)的一致性。
- 減少數(shù)據(jù)丟失的風(fēng)險(xiǎn):在發(fā)生故障轉(zhuǎn)移時(shí),由于至少有一個(gè)從服務(wù)器已經(jīng)接收到事務(wù),因此可以減少數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
- 性能適中:雖然半同步復(fù)制可能會(huì)對(duì)主服務(wù)器的性能產(chǎn)生一定影響(因?yàn)樾枰却_認(rèn)),但這種影響通常小于同步復(fù)制,并且比異步復(fù)制提供了更高的數(shù)據(jù)一致性保障。如果網(wǎng)絡(luò)延遲較高或不穩(wěn)定,可能會(huì)影響事務(wù)的提交性能。