MariaDB和MySQL全面對比:選擇數據庫需要考慮這幾點

MariaDB MySQL JSON 雲計算 DBA IT生涯 2018-11-29

誰在使用 MySQL 和 MariaDB?

MySQL 和 MariaDB 都發布了各自的用戶名單。

使用 MySQL 的有 Facebook、Github、YouTube、Twitter、PayPal、諾基亞、Spotify、Netflix 等。

使用 MariaDB 的有 Redhat、DBS、Suse、Ubuntu、1&1、Ingenico 等。

功能比較

有一些令人興奮的新功能(如窗口函數、角色控制或公共表表達式(CTE))可能值得一提,但本文只是為了比較兩個數據庫,所以我們在這裡只討論其中一方專門提供的功能,以便更好地幫助讀者選擇合適自己的數據庫。

讓我們來看一下只有其中一個數據庫專門提供的功能:

1. JSON 數據類型——從 5.7 版本開始,MySQL 支持由 RFC 7159 定義的原生 JSON 數據類型,可以高效地訪問 JSON 文檔中的數據。

MariaDB 沒有提供這一增強功能,認為 JSON 數據類型不是 SQL 標準的一部分。但為了支持從 MySQL 複製數據,MariaDB 為 JSON 定義了一個別名,實際上就是一個 LONGTEXT 列。MariaDB 聲稱兩者之間沒有顯著的性能差異,但他們並沒有提供基準測試數據來支持這個說法。

值得注意的是,MySQL 和 MariaDB 都提供了一些 JSON 相關函數,用於更方便地訪問、解析和檢索 JSON 數據。

2. 默認身份認證——在 MySQL 8.0 中,默認的身份認證插件是 caching_sha2_password,而不是 mysql_native_password。這一增強通過使用 SHA-256 算法提高了安全性。

3. MySQL Shell——MySQL Shell 是 MySQL 的高級命令行客戶端和代碼編輯器。除了 SQL 之外,MySQL Shell 還提供了 JavaScript 和 Python 腳本功能。不過用戶不能使用 mysqlsh 訪問 MariaDB 服務器,因為 MariaDB 不支持 MySQL X 協議。

4. 加密——MySQL 對重做 / 撤消日誌進行了加密(可配),但不加密臨時表空間或二進制日誌。相反,MariaDB 支持二進制日誌和臨時表加密。

5. 密鑰管理——MariaDB 提供開箱即用的 AWS 密鑰管理插件。MySQL 也提供了一些用於密鑰管理的插件,但它們僅在企業版中可用。

6. sys 模式——MySQL 8.0 提供了 sys 模式,這是一組對象,可幫助數據庫管理員和軟件工程師更好地理解通過 Performance 模式收集的數據。sys 模式對象可用於優化和診斷,不過 MariaDB 沒有提供這個增強功能。

7. validate_password 插件——validate_password 插件主要用於測試密碼並提高安全性。MySQL 默認啟用了這個插件,而 MariaDB 則不啟用。

8. 超級只讀—— MySQL 通過提供超級只讀(super read-only)模式來增強 read_only 功能。如果啟用了 read_only,服務器只允許具有 SUPER 權限的用戶執行客戶端更新。如果同時啟用了 super_read_only,那麼服務器將禁止具有 SUPER 權限的用戶執行客戶端更新。

9. 不可見列——這個功能在 MariaDB 上可用,MySQL 不支持該功能。這個功能允許創建未在 SELECT * 語句中出現的列,而在進行插入時,如果它們的名字沒有出現在 INSERT 語句中,就不需要為這些列提供值。

10. 線程池——MariaDB 支持連接線程池,這對於短查詢和 CPU 密集型的工作負載(OLTP)來說非常有用。在 MySQL 的社區版本中,線程數是固定的,因而限制了這種靈活性。MySQL 計劃在企業版中增加線程池功能。

性能

近年來,出現了很多關於 MySQL 和 MariaDB 引擎性能的基準測試。我們不認為“MySQL 或 MariaDB 哪個更快”這個問題會有一個最終的答案,它在很大程度上取決於具體的使用場景、查詢、用戶和連接數量等因素。

不過,如果你確實想知道,下面列出了我們發現的一些的基準測試結果。請注意,這些測試都是在一組特定的數據庫 + 引擎(例如 MySQL+InnoDB)組合上進行的,因此得出的結論只與特定的組合有關。

MySQL 8.0(InnoDB)和 MariaDB 10.3.7(MyRocks)基準測試對比:https://minervadb.com/index.php/2018/06/01/benchmarking-innodb-and-myrocks-performance-using-sysbench/

MariaDB 10.1 和 MySQL 5.7 在商用硬件上的性能對比:https://mariadb.org/maria-10-1-mysql-5-7-commodity-hardware/

MySQL 8.0 和 MariaDB 10.3.5 性能對比及 UTF8 的影響:http://dimitrik.free.fr/blog/archives/2018/04/mysql-performance-80-and-utf8-impact.html

複製

兩個數據庫都提供了將數據從一個服務器複製到另一個服務器的功能。它們的主要區別是大多數 MariaDB 版本允許你從 MySQL 複製數據,這意味著你可以輕鬆地將 MySQL 遷移到 MariaDB。但反過來卻沒有那麼容易,因為大多數 MySQL 版本都不允許從 MariaDB 複製數據。

此外,值得注意的是,MySQL GTID 不同於 MariaDB GTID,所以將數據從 MySQL 複製到 MariaDB 後,GTID 數據將相應地做出調整。

以下是這兩個數據庫在複製配置方面的一些差別:

MySQL 的默認二進制日誌格式是基於行的,而在 MariaDB 中,默認的二進制日誌格式是混合式的。

log_bin_compress——這個配置決定了是否可以壓縮二進制日誌。這個增強功能是 MariaDB 獨有的,因此 MySQL 不支持。

MySQL 和 MariaDB 之間的不兼容性

MariaDB 的文檔中列出了 MySQL 和 MariaDB 之間的數百個不兼容問題。因此,我們無法通過簡單的方案在這兩個數據庫之間進行遷移。

大多數數據庫管理員都希望 MariaDB 只是作為 MySQL 的一個 branch,這樣就可以輕鬆地在兩者之間進行遷移。但從發佈的幾個版本來看,這種想法是不現實的。MariaDB 實際上是 MySQL 的一個 fork,這意味著在它們之間進行遷移需要考慮很多東西。

存儲引擎

MariaDB 比 MySQL 支持更多的存儲引擎類型。但話說回來,數據庫可以支持多少個存儲引擎並不重要,重要的是哪個數據庫可以支持適合你需求的存儲引擎。

MariaDB 支持的存儲引擎包括:XtraDB、InnoDB、MariaDB ColumnStore、Aria、Archive、Blackhole、Cassandra Storage Engine、Connect、CSV、FederatedX、Memory、Merge、Mroonga、MyISAM、MyRocks、QQGraph、Sequence Storage Engine、SphinxSE、Spider、TokuDB。

MySQL 支持的存儲引擎包括:InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、Merge、Federated、Example。

在 Linux 上安裝

當你在某些 Linux 發行版上安裝 MySQL 時,最後可能安裝的是 MariaDB,因為它是很多(不是全部)Linux 發行版的默認設置。

Red Hat Enterprise/CentOS/Fedora/Debian 發行版默認會安裝 MariaDB,而其他發行版(如 Ubuntu)默認安裝 MySQL。

雲平臺上的可用性

MariaDB 可作為運行在 Amazon Web Services(AWS)、微軟 Azure 和 Rackspace Cloud 上的服務。

MySQL 在上面提到的三個平臺上也是可用的,同時還可以作為託管服務在谷歌雲服務平臺上運行。

因此,如果你正在使用谷歌雲平臺,並希望雲提供商為你管理服務,那麼可以考慮使用 MySQL,除非你希望自己安裝和管理 MariaDB 實例。

許可

MariaDB 採用了 GPL v2 許可,而 MySQL 提供了兩個許可選項——GPL v2(用於社區版)和企業許可。

MySQL 的兩個許可之間的主要區別在於可用的功能和支持服務。用戶可以使用 MariaDB 的所有功能,但對於 MySQL 來說並非如此。MySQL 的社區版不包含線程池等功能,而這些功能會對數據庫和查詢性能產生重大影響。

發佈頻率和更新

通常,MariaDB 的發佈頻率比 MySQL 更頻繁。太高的發佈頻率既有利也有弊。從好的方面來說,用戶可以更及時地收到功能和錯誤修復。從不好的方面來說,為了讓 MariaDB 保持的狀態,需要更多的工作量。

技術支持

MySQL 的支持團隊(包括 MySQL 開發人員和支持工程師)為客戶提供全天候服務。甲骨文提供了多種支持選項,包括擴展支持、持續支持和高級支持,具體取決於客戶的要求。MariaDB 支持團隊的支持工程師包括了 MariaDB 和 MySQL 數據庫專家(因為很多功能最初是由 MySQL 團隊開發的),他們為生產系統提供全天候的企業級支持。

正在進行中的開發

MySQL 的開發者主要是甲骨文的 MySQL 團隊,而 MariaDB 開發通過公開投票和郵件列表討論的方式進行。此外,任何人都可以向 MariaDB 提交補丁,MariaDB 開發團隊會考慮將這些補丁添加到主代碼庫中。因此,從某種程度上說,MariaDB 是由社區開發的,而 MySQL 主要由甲骨文開發。

相關推薦

推薦中...