MariaDB:真正的實時同步數據庫,MySQL要當心了

1、背景介紹

不管是採用binlog或者GTID的方式,其本質都是經過I/O_thread和sql_thread的形式進行的同步,由於沒法避免複製延遲而飽受詬病,基於上述MariaDB引入了Galera Cluster來解決此問題。mysql

2、Galera Cluster介紹

Galera Cluster與傳統的複製方式不一樣,不經過I/O_thread和sql_thread進行同步,而是在更底層經過wsrep實現文件系統級別的同步,能夠作到幾乎實時同步,而其上的MySQL對此一無所知sql

這就要求MySQL可以調用wsrep提供的API來完成,在Mariadb10.1以前的版本,支持Galera Cluster的版本是與Mariadb分開發行的,其版本名稱就成爲Mariadb-Galera,Mariadb10.1之後的版本中MariaDB Galera Cluste再也不單獨發行,而是以galera-25.3.12-2.el7.x86_64包的形式出現方面都強過MySQL。數據庫

MariaDB Galera Cluster主要功能服務器

同步複製:真正的multi-master,即全部節點能夠同時讀寫數據庫自動的節點成員控制,失效節點自動被清除新節點加入數據自動複製真正的並行複製,行級用戶能夠直接鏈接集羣,使用感覺上與MySQL徹底一致網絡

MariaDB Galera Cluster的優缺點併發

1.優點:異步

  • 由於是多主,因此不存在Slavelag(延遲)
  • 不存在丟失事務的狀況
  • 同時具備讀和寫的擴展能力
  • 更小的客戶端延遲
  • 節點間數據是同步的,而Master/Slave模式是異步的,不一樣slave上的binlog多是不一樣的

2.缺點:分佈式

  • 加入新節點時開銷大,須要複製完整的數據
  • 不能有效地解決寫擴展的問題,全部的寫操做都發生在全部的節點
  • 有多少個節點,就有多少份重複的數據
  • 因爲事務提交須要跨節點通訊,即涉及分佈式事務操做,所以寫入會比主從複製慢不少,節點越多,寫入越慢,死鎖和回滾也會更加頻繁
  • 對網絡要求比較高,若是網絡出現波動不穩定,則可能會形成兩個節點失聯,Galera Cluster集羣會發生腦裂,服務將不可用

還有一些地方存在侷限:ide

  1. 僅支持InnoDB/XtraDB存儲引擎,任何寫入其餘引擎的表,包括mysql.*表都不會被複制。可是DDL語句能夠複製,可是insert into mysql.user(MyISAM存儲引擎)之類的插入數據不會被複制
  2. Delete操做不支持沒有主鍵的表,由於沒有主鍵的表在不一樣的節點上的順序不一樣,若是執行select … limit …將出現不一樣的結果集
  3. LOCK/UNLOCK TABLES/FLUSH TABLES WITH READ LOCKS不支持單表所鎖,以及鎖函數GET_LOCK()、RELEASE_LOCK(),但FLUSH TABLES WITH READ LOCK支持全局表鎖
  4. General Query Log日誌不能保存在表中,若是開始查詢日誌,則只能保存到文件中
  5. 不能有大事務寫入,不能操做wsrep_max_ws_rows=131072(行),且寫入集不能超過wsrep_max_ws_size=1073741824(1GB),不然客戶端直接報錯
  6. 因爲集羣是樂觀鎖併發控制,所以,在commit階段會有事務衝突發生。若是兩個事務在集羣中的不一樣節點上對同一行寫入並提交,則失敗的節點將回滾,客戶端返回死鎖報錯
  7. XA分佈式事務不支持Codership Galera Cluster,在提交時可能會回滾
  8. 整個集羣的寫入吞吐量取決於最弱的節點限制,集羣要使用同一的配置

3、 MariaDB與Mysql的對比

1.MariaDB發展趨勢和更新頻率

畢竟基於MySQL創始人領銜開發的MariaDB數據庫,確定是知道MYSQL數據庫存在的弱項,而後提供更好的兼容性和擴展性,咱們基本上徹底能夠將MYSQL數據庫建議到MariaDB數據庫中,並且MariaDB發展速度和升級速度遠遠優先。函數

2.MySQL封閉且發展緩慢

因爲MySQL在被收購以後更新速度與性能的優化很是的緩慢,並且是閉源的,徹底沒有Oracle以外的人蔘與進來,不少須要解決的問題都沒有升級進去,反之不少公司雖然也有利用本身開發的分支Mysql版本。

3.MariaDB的特色和優點

MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,MariaDB默認的存儲引擎是Aria,不是MyISAM。Aria能夠支持事務,可是默認狀況下沒有打開事務支持,由於事務支持對性能會有影響。MariaDB是一個採用Maria存儲引擎的MySQL分支版本,是由原來 MySQL 的做者Michael Widenius創辦的公司所開發的免費開源的數據庫服務器。

4.MariaDB與MySQL對比

這個直觀的區別在於MariaDB可以快速的查詢和處理數據,且佔用資源相對是少於MySQL數據庫的,並且在運行速度、以及支持對 Unicode 的排序問題優於MYSQL數據庫。

相關文章
相關標籤/搜索