MySQL主主复制 外键_MySQL 组复制介绍
一、組復(fù)制是個什么鬼?
先從 MySQL 的復(fù)制技術(shù)談起,首先是?MySQL?的異步復(fù)制
異步復(fù)制模式下,Master上執(zhí)行事務(wù)產(chǎn)生 binlog,slave 通過連接 master 抓取 binlog 的內(nèi)容接收到本地的 relaylog 上,然后 apply 對應(yīng)的事務(wù),產(chǎn)生 slave 服務(wù)器上自身的 binlog(由--log-slave-update 參數(shù)決定)。流程圖如下:
其次是半同步復(fù)制,流程圖如下
異步復(fù)制模式下,如果 slave 全部宕機(jī),則在 master 上的事務(wù)無法同步到 slave 上,存在一定的數(shù)據(jù)安全風(fēng)險。
半同步復(fù)制解決了數(shù)據(jù)安全風(fēng)險的問題,在半同步環(huán)境下要求至少有一臺 slave 接收到 master 的binlog并成功寫入到本地的 relaylog, master 上的事務(wù)才可以成功提交,這樣對主庫的事務(wù)提交速度會產(chǎn)生一定影響,半同步在數(shù)據(jù)安全和數(shù)據(jù)庫性能兩者之間做了一個中和。
在實際使用過程中,可以通過配置參數(shù)(rpl_semi_sync_master_timeout 單位是毫秒,默認(rèn)為10000,即10s)設(shè)定若 slave 在多長時間沒有ack返回,同步模式由半同步自動修改為異步同步模式。(mysql半同步工作原理和oracle dataguard的最大保護(hù)模式雷同)
組復(fù)制分單主模式和多主模式,mysql 的復(fù)制技術(shù)僅解決了數(shù)據(jù)同步的問題,如果 master 宕機(jī),意味著數(shù)據(jù)庫管理員需要介入,應(yīng)用系統(tǒng)可能需要修改數(shù)據(jù)庫連接地址或者重啟才能實現(xiàn)。(這里也可以使用數(shù)據(jù)庫中間件產(chǎn)品來避免應(yīng)用系統(tǒng)數(shù)據(jù)庫連接的問題,例如 mycat 和 atlas 等產(chǎn)品)。組復(fù)制在數(shù)據(jù)庫層面上做到了,只要集群中大多數(shù)主機(jī)可用,則服務(wù)可用,也就是說3臺服務(wù)器的集群,允許其中1臺宕機(jī)。組復(fù)制的流程圖如下:
組復(fù)制的特點:
● 高一致性
基于原生復(fù)制及 paxos 協(xié)議的組復(fù)制技術(shù),并以插件的方式提供,提供一致數(shù)據(jù)安全保證;
●?高容錯性
只要不是大多數(shù)節(jié)點壞掉就可以繼續(xù)工作,有自動檢測機(jī)制,當(dāng)不同節(jié)點產(chǎn)生資源爭用沖突時,不會出現(xiàn)錯誤,按照先到者優(yōu)先原則進(jìn)行處理,并且內(nèi)置了自動化腦裂防護(hù)機(jī)制;
●?高擴(kuò)展性
節(jié)點的新增和移除都是自動的,新節(jié)點加入后,會自動從其他節(jié)點上同步狀態(tài),直到新節(jié)點和其他節(jié)點保持一致,如果某節(jié)點被移除了,其他節(jié)點自動更新組信息,自動維護(hù)新的組信息;
●?高靈活性
有單主模式和多主模式,單主模式下,會自動選主,所有更新操作都在主上進(jìn)行;
多主模式下,所有 server 都可以同時處理更新操作。
二、什么樣的應(yīng)用場景適合用組復(fù)制?
1、彈性的數(shù)據(jù)庫復(fù)制環(huán)境
組復(fù)制可以靈活的增加和減少集群中的數(shù)據(jù)庫實例
2、高可用的數(shù)據(jù)庫環(huán)境
組復(fù)制允許數(shù)據(jù)庫實例宕機(jī),只要集群中大多數(shù)服務(wù)器可用,則整個數(shù)據(jù)庫服務(wù)可用
3、替代傳統(tǒng)主從復(fù)制結(jié)構(gòu)的數(shù)據(jù)庫環(huán)境
三、組復(fù)制的有哪些先決條件?
1、只支持innodb存儲引擎
2、每張表都需要有主鍵
3、只支持ipv4網(wǎng)絡(luò)環(huán)境
4、要求高網(wǎng)絡(luò)帶寬(通常是千兆內(nèi)網(wǎng))和低網(wǎng)絡(luò)延遲
以下的參數(shù)在mysql數(shù)據(jù)庫實例上必須要配置
1、--log-bin=bin-log ????#記錄mysql的binlog
2、--log-slave-update ???#記錄slave上進(jìn)行apply relay-log時的binlog
3、--binlog-format=row ?#binlog的格式為行模式
4、--gtid-mode=on ?????#開啟gtid模式
5、--master-info-repository=TABLE ??#將master-info信息記錄到mysql表當(dāng)中
6、--relay-log-info-repository=TABLE??#將relay-log信息記錄到mysql表當(dāng)中
7、--transaction-write-set-extraction=XXHASH64??#每個事務(wù)收集的wirte set和encode使用xxhash64哈希算法
8、開啟多線程復(fù)制
--slave-parallel-workers=N??#N為具體的復(fù)制線程個數(shù)
--slave-preserve-commit-order=1?#slave上apply relay-log時事務(wù)順序提交
--slave-parallel-type=LOGICAL_CLOCK??#使用多線程復(fù)制
四、組復(fù)制有哪些限制條件?
1、Replication Event Checksums
由于代碼設(shè)計的原因,目前組復(fù)制還不能支持binlog的checksum,如果要使用組復(fù)制,需要配置binlog-checksum=none
2、Gap Locks
組復(fù)制校驗的進(jìn)程不支持間隙鎖,mysql間隙鎖的設(shè)計是為了解決幻讀問題
3、Table Locks and Named Locks
組復(fù)制校驗的進(jìn)程不支持表級鎖和named locks
4、SERIALIZABLE Isolation Level
組復(fù)制不支持串行事務(wù)級別
5、Concurrent DDL versus DML Operations
組復(fù)制的多主模式不支持并行的DDL和DML操作
6、Foreign Keys with Cascading Constraints
組復(fù)制的多主模式不支持帶有級聯(lián)約束類型的外鍵
7、Very Large Transactions
組復(fù)制不支持巨大的事務(wù)
參考:
https://dev.mysql.com/doc/refman/5.7/en/group-replication.html
總結(jié)
以上是生活随笔為你收集整理的MySQL主主复制 外键_MySQL 组复制介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django添加mysql数据库_Dja
- 下一篇: mybatis获取mysql存储过程ou