MariaDB:真正的實時同步數(shù)據(jù)庫,MySQL要小心了
一、背景介紹
無論是采用binlog或者GTID的方式,其本質都是通過I/O_thread和sql_thread的形式進行的同步,因為無法避免復制延遲而飽受詬病,基于上述MariaDB引入了Galera Cluster來解決此問題。
二、Galera Cluster介紹
Galera Cluster與傳統(tǒng)的復制方式不同,不通過I/O_thread和sql_thread進行同步,而是在更底層通過wsrep實現(xiàn)文件系統(tǒng)級別的同步,可以做到幾乎實時同步,而其上的MySQL對此一無所知
這就要求MySQL能夠調用wsrep提供的API來完成,在Mariadb10.1之前的版本,支持Galera Cluster的版本是與Mariadb分開發(fā)行的,其版本名稱就成為Mariadb-Galera,Mariadb10.1以后的版本中MariaDB Galera Cluste不再單獨發(fā)行,而是以galera-25.3.12-2.el7.x86_64包的形式出現(xiàn)方面都強過MySQL。
MariaDB Galera Cluster主要功能
同步復制:真正的multi-master,即所有節(jié)點可以同時讀寫數(shù)據(jù)庫自動的節(jié)點成員控制,失效節(jié)點自動被清除新節(jié)點加入數(shù)據(jù)自動復制真正的并行復制,行級用戶可以直接連接集群,使用感受上與MySQL完全一致
MariaDB Galera Cluster的優(yōu)缺點
1.優(yōu)勢:
- 因為是多主,所以不存在Slavelag(延遲)
- 不存在丟失事務的情況
- 同時具有讀和寫的擴展能力
- 更小的客戶端延遲
- 節(jié)點間數(shù)據(jù)是同步的,而Master/Slave模式是異步的,不同slave上的binlog可能是不同的
2.缺點:
- 加入新節(jié)點時開銷大,需要復制完整的數(shù)據(jù)
- 不能有效地解決寫擴展的問題,所有的寫操作都發(fā)生在所有的節(jié)點
- 有多少個節(jié)點,就有多少份重復的數(shù)據(jù)
- 由于事務提交需要跨節(jié)點通信,即涉及分布式事務操作,因此寫入會比主從復制慢很多,節(jié)點越多,寫入越慢,死鎖和回滾也會更加頻繁
- 對網(wǎng)絡要求比較高,如果網(wǎng)絡出現(xiàn)波動不穩(wěn)定,則可能會造成兩個節(jié)點失聯(lián),Galera Cluster集群會發(fā)生腦裂,服務將不可用
還有一些地方存在局限:
- 僅支持InnoDB/XtraDB存儲引擎,任何寫入其他引擎的表,包括mysql.*表都不會被復制。但是DDL語句可以復制,但是insert into mysql.user(MyISAM存儲引擎)之類的插入數(shù)據(jù)不會被復制
- Delete操作不支持沒有主鍵的表,因為沒有主鍵的表在不同的節(jié)點上的順序不同,如果執(zhí)行select … limit …將出現(xiàn)不同的結果集
- LOCK/UNLOCK TABLES/FLUSH TABLES WITH READ LOCKS不支持單表所鎖,以及鎖函數(shù)GET_LOCK()、RELEASE_LOCK(),但FLUSH TABLES WITH READ LOCK支持全局表鎖
- General Query Log日志不能保存在表中,如果開始查詢?nèi)罩?,則只能保存到文件中
- 不能有大事務寫入,不能操作wsrep_max_ws_rows=131072(行),且寫入集不能超過wsrep_max_ws_size=1073741824(1GB),否則客戶端直接報錯
- 由于集群是樂觀鎖并發(fā)控制,因此,在commit階段會有事務沖突發(fā)生。如果兩個事務在集群中的不同節(jié)點上對同一行寫入并提交,則失敗的節(jié)點將回滾,客戶端返回死鎖報錯
- XA分布式事務不支持Codership Galera Cluster,在提交時可能會回滾
- 整個集群的寫入吞吐量取決于最弱的節(jié)點限制,集群要使用同一的配置
三、 MariaDB與Mysql的對比
1.MariaDB發(fā)展趨勢和更新頻率
畢竟基于MySQL創(chuàng)始人領銜開發(fā)的MariaDB數(shù)據(jù)庫,肯定是知道MYSQL數(shù)據(jù)庫存在的弱項,然后提供更好的兼容性和擴展性,我們基本上完全可以將MYSQL數(shù)據(jù)庫建議到MariaDB數(shù)據(jù)庫中,而且MariaDB發(fā)展速度和升級速度遠遠優(yōu)先。
2.MySQL封閉且發(fā)展緩慢
由于MySQL在被收購之后更新速度與性能的優(yōu)化非常的緩慢,而且是閉源的,完全沒有Oracle之外的人參與進來,很多需要解決的問題都沒有升級進去,反之很多公司雖然也有利用自己開發(fā)的分支Mysql版本。
3.MariaDB的特點和優(yōu)勢
MariaDB基于事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,MariaDB默認的存儲引擎是Aria,不是MyISAM。Aria可以支持事務,但是默認情況下沒有打開事務支持,因為事務支持對性能會有影響。MariaDB是一個采用Maria存儲引擎的MySQL分支版本,是由原來 MySQL 的作者Michael Widenius創(chuàng)辦的公司所開發(fā)的免費開源的數(shù)據(jù)庫服務器。
4.MariaDB與MySQL對比
這個直觀的區(qū)別在于MariaDB能夠快速的查詢和處理數(shù)據(jù),且占用資源相對是少于MySQL數(shù)據(jù)庫的,而且在運行速度、以及支持對 Unicode 的排序問題優(yōu)于MYSQL數(shù)據(jù)庫。