首先要明白事務(wù)提交的三個(gè)階段,這里不再贅述。
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),防城網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:防城等地區(qū)。防城做網(wǎng)站價(jià)格咨詢:18982081108 半同步復(fù)制:主上已經(jīng)提交了,但是日志還沒來得及傳到備庫(kù),這時(shí)候宕機(jī)了,在半同步看來,主庫(kù)其他會(huì)話看來是透明的,看到的是他提交了的數(shù)據(jù),但是如果這時(shí)候切換到slave,slave上又沒有提交,沒有看到這部分?jǐn)?shù)據(jù),這就矛盾了。而增強(qiáng)版同步,alter_sync,日志沒有傳輸?shù)絺鋷?kù),主庫(kù)這時(shí)候也沒有提交,這時(shí)候服務(wù)掛掉了,主庫(kù)其他會(huì)話看到的是未提交的數(shù)據(jù),并且也沒有傳輸?shù)絺鋷?kù),所以數(shù)據(jù)不存在丟失一說。
無損復(fù)制,已經(jīng)寫了二進(jìn)制,但是沒有提交掛掉了,但是主從數(shù)據(jù)一致,因?yàn)殡m然沒有提交,但是已經(jīng)寫了二進(jìn)制,并且已經(jīng)傳到slave。
半同步復(fù)制的搭建,半同步復(fù)制是需要安裝插件的:
可以在參數(shù)文件中,指定每次啟動(dòng)都加載plugin_load,也可以直接安裝插件。
手動(dòng):
install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
配置文件:
loose_rpl_semi_sync_master_enabled=1 #表示開啟
loose_rpl_semi_sync_slave_enabled=1 #表示開啟
loose_表示沒有這個(gè)參數(shù)就忽略掉。
當(dāng)半自動(dòng)復(fù)制的延遲超過5秒就變成異步復(fù)制,備庫(kù)的IO線程追到5秒內(nèi),就自動(dòng)又變成半同步復(fù)制。wait ACK表示IO線程接收到,并不是SQL線程應(yīng)用完。
可以增加超時(shí)時(shí)間提高數(shù)據(jù)安全性,保證數(shù)據(jù)完全不丟失,但是這也帶來了應(yīng)用響應(yīng)的問題,也就是強(qiáng)制半同步復(fù)制。
5.7增強(qiáng)半同步
rpl_semi_sync_master_wait_point=AFTER_SYNC 開啟無損復(fù)制
rpl_semi_sync_master_wait_for_slave_count=1 至少有1個(gè)從庫(kù)收到說的就是這個(gè)參數(shù)。
MTS multi- threaded slave( 并行復(fù)制 )5.7建議必須使用:
slave-parallel-type=LOGICAL_CLOCK
【DATABASE】DATABASE的并行復(fù)制,每個(gè)Coordinator線程對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)。DATABASE不再建議使用,【LOGICAL_CLOCK 】主庫(kù)上怎么并行的從庫(kù)上也是怎么并行。那么有一個(gè)問題主庫(kù)group commit那么從庫(kù)也能通過并行復(fù)制也能完成組提交嗎?是的,因?yàn)榻M提交的事務(wù)之間互相不沖突,
slave-parallel-workers=32或者16
MTS仍然為一個(gè)IO線程接收 state為 Waiting for master to send event ; SQL線程應(yīng)用時(shí)候是System lock,等待時(shí)state為 waiting for an event from Coordinator
在IO bond的情況下,開啟MTS性能提升非常明顯,純OLTP環(huán)境下開啟16或者32并行數(shù),主庫(kù)性能提升5倍左右。