本文的目的是比较MySQL与MariaDB的主要异同点。我们将在性能、安全性和主要功能方面比较这两个数据库,并列出选择数据库时需要考虑的重要事项。谁在使用MySQL和MariaDB?MySQL和MariaDB都发布了自己的用户列表。Facebook、Github、YouTube、Twitter、PayPal、诺基亚、Spotify、Netflix等都使用MySQL。使用MariaDB的包括Redhat、DBS、Suse、Ubuntu、1&1、Ingenico等。功能比较有一些令人兴奋的新功能(例如窗口功能、角色控制或公用表表达式(CTE))可能值得一提,但本文只是出于比较两种数据库的目的,所以我们这里只讨论一方具体提供什么功能,以更好地帮助读者选择适合自己的数据库。让我们来看看只有其中一个数据库专门提供的特性:1.JSON数据类型——从5.7版本开始,MySQL支持RFC7159定义的原生JSON数据类型,可以高效地访问JSON文档中的数据。考虑到JSON数据类型不是SQL标准的一部分,MariaDB不提供此增强功能。但是为了支持从MySQL拷贝数据,MariaDB给JSON定义了一个别名,其实就是一个LONGTEXT列。MariaDB声称两者之间没有显着的性能差异,但他们没有提供基准数据来支持这一说法。值得注意的是,MySQL和MariaDB都提供了一些与JSON相关的功能,以便更轻松地访问、解析和检索JSON数据。2.默认认证——在MySQL8.0中,默认的认证插件是caching_sha2_password,而不是mysql_native_password。此增强功能通过使用SHA-256算法提高了安全性。3.MySQLShell–MySQLShell是MySQL的高级命令行客户端和代码编辑器。除了SQL,MySQLShell还提供JavaScript和Python脚本功能。但是,用户无法使用mysqlsh访问MariaDB服务器,因为MariaDB不支持MySQLX协议。4.加密——MySQL加密重做/撤销日志(可配置),但不加密临时表空间或二进制日志。相反,MariaDB支持二进制日志和临时表加密。5.密钥管理——MariaDB提供开箱即用的AWS密钥管理插件。MySQL也提供了一些用于密钥管理的插件,但它们只在企业版中可用。6.sysschema——MySQL8.0提供了sysschema,一组帮助数据库管理员和软件工程师更好地理解通过Performanceschema收集的数据的对象。sys模式对象可用于优化和诊断,尽管MariaDB不提供此增强功能。7.validate_password插件-validate_password插件主要用于测试密码和提高安全性。MySQL默认启用此插件,而MariaDB则没有。8、超级只读——MySQL通过提供超级??只读模式增强了read_only功能。如果启用了read_only,则服务器仅允许具有SUPER权限的用户执行客户端更新。如果还启用了super_read_only,则服务器会阻止具有SUPER权限的用户执行客户端更新。9.Invisiblecolumns——这个特性在MariaDB上可用,MySQL不支持这个特性。该特性允许创建未出现在SELECT*语句中的列,并且在插入时,如果这些列的名称未出现在INSERT语句中,则无需为这些列提供值。10.线程池——MariaDB支持连接线程池,这对于短查询和CPU密集型工作负载(OLTP)非常有用。在MySQL的社区版中,线程数是固定的,限制了这种灵活性。MySQL计划在企业版中加入线程池功能。性能近年来,出现了很多MySQL和MariaDB引擎性能的基准测试。我们认为“MySQL和MariaDB哪个更快?”这个问题没有明确的答案。这在很大程度上取决于具体用例、查询、用户数量和连接数等。但是,如果您想知道,这里有一些我们发现的最佳基准测试结果。请注意,这些测试是在一组特定的数据库+引擎(例如MySQL+InnoDB)组合上执行的,因此得出的结论仅与该特定组合相关。MySQL8.0(InnoDB)和MariaDB10.3.7(MyRocks)基准比较:https://minervadb.com/index.php/2018/06/01/benchmarking-innodb-and-myrocks-performance-using-sysbench/MariaDB性能10.1和MySQL5.7在商用硬件上的比较:https://mariadb.org/maria-10-1-mysql-5-7-commodity-hardware/MySQL8.0和MariaDB10.3.5的性能比较以及UTF8的影响:http://dimitrik.free.fr/blog/archives/2018/04/mysql-performance-80-and-utf8-impact.html复制两个数据库提供了将数据从一台服务器复制到另一台服务器的功能。它们之间的主要区别是大多数MariaDB版本允许您从MySQL复制数据,这意味着您可以轻松地将MySQL迁移到MariaDB。但反过来并不容易,因为大多数MySQL版本不允许从MariaDB复制数据。此外,值得注意的是,MySQLGTID与MariaDBGTID不同,因此在将数据从MySQL复制到MariaDB后,GTID数据将相应调整。以下是两个数据库的复制配置的一些差异:MySQL默认的二进制日志格式是基于行的,而在MariaDB中默认的二进制日志格式是混合的。log_bin_compress-这个配置决定了二进制日志是否可以被压缩。此增强功能是MariaDB独有的,因此MySQL不支持。MySQL和MariaDB之间的不兼容性MariaDB的文档列出了MySQL和MariaDB之间的数百个不兼容性。因此,我们无法通过简单的方案在这两个数据库之间进行迁移。大多数DBA都希望MariaDB只是MySQL的一个分支,以便可以轻松完成两者之间的迁移。但是从***发布的几个版本来看,这个想法是不现实的。MariaDB实际上是MySQL的一个分支,这意味着在它们之间迁移时需要考虑很多事情。存储引擎MariaDB比MySQL支持更多的存储引擎类型。不过话又说回来,数据库能支持多少存储引擎并不重要,重要的是哪个数据库能支持适合你需求的存储引擎。MariaDB支持的存储引擎包括:XtraDB、InnoDB、MariaDBColumnStore、Aria、Archive、Blackhole、CassandraStorageEngine、Connect、CSV、FederatedX、Memory、Merge、Mroonga、MyISAM、MyRocks、QQGraph、SequenceStorageEngine、SphinxSE、Spider,托库数据库。MySQL支持的存储引擎包括:InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、Merge、Federated、Example。在Linux上安装当您在某些Linux发行版上安装MySQL时,很可能会安装MariaDB,因为它是许多(并非所有)Linux发行版的默认设置。RedHatEnterprise/CentOS/Fedora/Debian发行版默认安装MariaDB,而其他发行版(如Ubuntu)默认安装MySQL。云平台上的可用性MariaDB可作为在亚马逊网络服务(AWS)、微软Azure和RackspaceCloud上运行的服务提供。MySQL也可在上述三个平台上使用,并作为托管服务在谷歌云服务平台上运行。因此,如果您正在使用GoogleCloudPlatform并希望云提供商为您管理服务,请考虑使用MySQL,除非您想自己安装和管理MariaDB实例。许可MariaDB根据GPLv2许可获得许可,而MySQL提供两种许可选项-GPLv2(针对社区版)和企业许可。MySQL的两个许可证之间的主要区别在于可用的功能和支持服务。用户可以使用MariaDB的所有特性,但MySQL却不是这样。MySQLCommunityEdition不包括线程池等功能,这些功能会对数据库和查询性能产生重大影响。发布频率和更新通常,MariaDB的发布频率高于MySQL。发帖太频繁既有好处也有坏处。从好的方面来说,用户可以更及时地收到功能和错误修复。不利的一面是,要使MariaDB保持最佳状态需要做更多的工作。技术支持MySQL的支持团队(包括MySQL开发人员和支持工程师)为客户提供24/7服务。Oracle提供多种支持选项,包括扩展支持、持续支持和高级支持,具体取决于客户要求。MariaDB支持团队的支持工程师包括MariaDB和MySQL数据库专家(许多功能最初由MySQL团队开发),他们为生产系统提供24/7企业级支持。MySQL的持续开发主要由Oracle的MySQL团队完成,而MariaDB的开发则通过公开投票和邮件列表讨论进行。此外,任何人都可以向MariaDB提交补丁,MariaDB开发团队将考虑将这些补丁添加到主代码库中。因此,在某种程度上,MariaDB是由社区开发的,而MySQL主要是由Oracle开发的。结论好吧,我们不能为您做决定。我们所能做的就是向您提出一些有针对性的问题,然后您自己决定:您是否针对两个数据库测试了您的产品性能?哪个表现更好,为什么?您打算使用其中一个数据库独有的哪些功能?您要使用其中一个数据库专门提供的数据库引擎吗?能够对数据库的开发过程产生影响对您来说有多重要?能够对下一个功能更改进行投票对您来说有多重要重要吗?您是要为企业版付费还是使用社区版?社区版的功能是否满足您的需求?您的操作系统默认支持您选择的数据库吗?部署工作量大吗?您选择哪个云提供商?他们是否提供包含您选择的数据库的托管服务?您打算将来从一种数据库类型迁移到另一种数据库类型吗?如果是这样,您是否考虑过兼容性和复制方面的问题?如果你能回答这些问题,你可能就清楚哪个数据库更适合你了。
