介绍MARIADB数据库。
详细讨论MySQL和MariaDB之间的区别以及性能的全面对比。
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区使用GPL授权进行维护。发展这一分支的一个原因是:Oracle收购MySQL后,MySQL的闭源存在潜在风险,所以社区会采取分支的方式来规避这一风险。
MariaDB被设计为完全兼容MySQL,包括API和命令行,这使得它很容易替代MySQL。
由MySQL的创建者迈克尔·维德纽斯所主导开发的MariaDB,早些时候以10亿美元的价格,把它创建的公司MySQL卖给了SUN,后来SUN被Oracle收购,MySQL的所有权也落在了Oracle的手里。
玛利亚的名字来自于迈克尔·维德纽斯的女儿玛利亚(英语:玛利亚)。
在5.5版之前,MariaDB一直遵循MySQL的版本。所以人们在使用MariaDB5.5时,可以从MySQL5.5中学习MariaDB的所有特性。自2012年11月12日10.0.0版本发布以来,MySQL的版号就没有变化。10.0.x版本是基于5.5版本,外加MySQL5.6版本中引入的特性和自己开发的新特性。
就存储引擎而言,10.0.9版本使用XtraDB(命名为Aria)取代了MySQL的InnoDB。
MariaDB的API和协议与MySQL是兼容的,并且增加了一些特性来支持非阻塞操作和进程报告。
这就是说,所有使用MySQL的连接器、程序库和应用程序都可以在MariaDB上运行。
基于这一点,Fedora担心OracleMySQL的封闭软件项目,计划在Fedora19中用MariaDB取代MySQL。
MYSQL与MARIADB的全面对比。
哪些人使用MySQL和MariaDB?
MySQL和MariaDB都发布了他们各自的用户名。
有Facebook,Github,YouTube,Twitter,PayPal,诺基亚,Spotify,Netflix等等都在使用MySQL。
Redhat,DBS,Suse,Ubuntu,1&1,Ingenico等等都在使用MariaDB。
马利亚数据库和MySQL功能比较。
有些令人兴奋的新功能(窗口函数、角色控制或通用表表达式(CTE))可能值得注意,但是本文仅针对两个数据库进行比较,因此我们在这里只讨论其中一个专门提供的功能,以便更好地帮助读者选择适合自己的数据库。
下面看看仅由这些数据库之一提供的特定功能:
一、JSON资料型别。
MySQL从5.7版本开始,支持由RFC7159定义的本地JSON数据类型,以便有效地访问JSON文档中的数据。
由于JSON数据类型不属于SQL标准,MariaDB没有提供这种增强。但是为了支持从MySQL中复制数据,MariaDB定义了一个JSON别名,即LONGTEXT列。MariaDB声称这两种方法在性能上没有明显的差别,但是他们没有提供基准测试数据来支持这种说法。
值得一提的是,MySQL和MariaDB都提供了一些JSON相关功能,可以更方便地访问、解析和检索JSON数据。
二、缺省认证。
对于MySQL8.0,默认的认证插件是caching_sha2_password,而非mysql_native_password。这种改进使用SHA-256算法改善了安全性。
三、MySQLShell。
MySQLShell是MySQL高级的命令行客户端和代码编辑器。MySQLShell在SQL的基础上,还提供了Javascript和Python脚本功能。但是,由于MariaDB不支持MySQLX协议,用户无法使用mysqlsh访问MariaDB服务器。
四、加密。
重做/撤消日志由MySQL加密(可匹配),但不加密临时表空间或二进制日志。MariaDB支持二进制日志和临时表加密。
五是密钥管理。
MariaDB提供了现成的AWS密钥管理插件。MySQL还提供了一些密钥管理插件,但是它们只在Enterprise中可用。
6s模式下。
MySQL8.0提供了sys模式,这是一组可以帮助数据库管理员和软件工程师更好地理解通过性能模式收集到的数据的对象。系统模式对象可用于优化和诊断,尽管MariaDB没有提供这种增强。
7.validate_password插件
Validate_password插件主要用来测试密码和增强安全性。该插件是MySQL默认启用的,而MariaDB没有启用。
八、超级只读
通过提供超级的只读(superread-only)模式,MySQL增强了read_only功能。在read_only被启用时,服务器只允许拥有SUPER权限的用户执行客户端更新。若super_read_only被同时启用,服务器将禁止拥有SUPER权限的用户执行客户端更新。
9.看不到的栏。
MariaDB上提供了此功能,MySQL不支持此功能。该特性可以创建SELECT*语句中没有出现的列,并且在执行插入操作时,如果INSERT语句中没有显示这些列的名称,则无需为它们提供值。
十、线程池
MariaDB支持连接线程池,它对短期查询和占用大量CPU的工作负载(OLTP)非常有用。社区版本的MySQL中的线程数量是固定的,因此限制了这种灵活性。MySQL计划在Enterprise版本中添加线程池功能。
性能指标:MYSQL和MARIADB
近几年来,出现了许多关于MySQL和MariaDB引擎性能的数据。对于“哪个MySQL更快,哪个MariaDB更快”这一问题,我们并不认为最终答案是肯定的,主要取决于特定的使用场景、查询数量、用户数量和连接数量等因素。
如果你真的想知道,下面是一些我们最近发现的一些基准测试结果。要注意的是,这些测试都是针对一组特定的数据库+引擎组合(例如MySQL+InnoDB)进行的,所以结论只涉及特定的组合。
MySQL8.0(InnoDB)与MariaDB10.3.7(MyRocks)之间的基准对比:
MariaDB10.1与MySQL5.7在商业硬件上的比较:
MariaDB10.3.5与MySQL8.0性能对比与UTF8的影响:
网址:
重复函数。
这两个数据库都具有将数据从一台服务器复制到另一台的能力。他们最大的不同之处在于,MariaDB的大部分版本允许你从MySQL复制数据,这意味着你可以很容易地将MySQL迁移到MariaDB。但是这并不容易,因为大多数MySQL版本不允许从MariaDB中复制数据。
另外,MySQLGTID与MariaDBGTID不同,因此在将数据从MySQL拷贝到MariaDB之后,GTID数据会进行相应的调整。
在复制配置方面,这两个数据库之间存在一些差异:
MySQL的默认二进制日志格式是基于行的,而在MariaDB中则是混合格式。
log_bin_compress——此配置确定二进制日志是否可以被压缩。MariaDB仅有此功能,所以MySQL不支持此功能。
mySQL和MariaDB不兼容。
在MariaDB的文档中,MySQL和MariaDB之间有数百个不兼容的问题。所以,我们不能通过简单的方式在两个数据库之间迁移。
多数数据库管理员希望MariaDB仅仅是MySQL的一个branch,因此很容易在这两者之间迁移。但是,从最近几个版本来看,这一想法并不现实。MariaDB实际上是MySQL的一个fork,这意味着在它们之间的迁移有很多事情要考虑。
我的存储引擎和MariaDB。
MariaDB支持的存储引擎类型比MySQL多。不过话又说回来,不管数据库能支持多少个存储引擎都没关系,关键是哪一个数据库能满足您的需求。
MariaDB支持以下存储引擎:
InnoDB,MariaDBColumnStore,Aria,Archive,Blackhole,CassandraStorageEngine,Connect,CSV,FederatedX,Memory,Merge,Mroonga,MyISAM,MyRocks,QQGraph,SequenceStorageEngine,SphinxSE,Spider,TokuDB。
支持的MySQL存储引擎包括:
MyISAM,InnoDB,Memory,CSV,Archive,Blackhole,Merge,Federated,Example。
安装在Linux上。
在某些Linux发行版上安装MySQL时,最终可能会安装MariaDB,因为MariaDB是许多(并非所有)Linux发行版的默认设置。
MariaDB默认安装RedHatEnterprise/CentOS/Fedora/Debian发行版,而Ubuntu等其他发行版默认安装MySQL。
可用性在云平台上。
该MariaDB是在AmazonWebServices(AWS)、微软Azure和RackspaceCloud上运行的服务。
在上述三个平台上,MySQL都是可用的,同时它也作为托管服务运行在谷歌云服务平台上。
所以,如果你使用的是谷歌云平台,并且想让云供应商为你管理服务,那么考虑使用MySQL,除非你想自己安装和管理MariaDB实例。
有MySQL和MariaDB的许可证。
MariaDB采用了GPLv2许可证,而MySQL则提供了两种许可证选择:针对社区版本的GPLv2许可证和企业许可证。
这两种MySQL许可的主要区别是可用的特性和支持服务。MariaDB的所有功能用户都能使用,但MySQL不能。社区版的MySQL并不包括诸如线程池之类的特性,它们对数据库和查询性能有很大的影响。
出版次数和更新。
MariaDB通常比MySQL发布得更频繁。过于频繁的发布既有好处也有坏处。良好的一面是,用户能更及时地接收到功能和错误修正。在坏的方面,要使MariaDB保持最新状态,就需要增加工作量。
科技支持
MySQL技术支持团队(包括开发人员和技术支持工程师)为客户提供24小时服务。Oracle根据客户的需求提供了多种支持选择,包括扩展支持、持续支持和高级支持。在MariaDB支持团队中,支持工程师包括MariaDB和MySQL数据库专家(因为许多功能最初都是由MySQL团队开发的),他们为生产系统提供全天候的企业支持。
开发工作在进行中。
开发人员主要来自Oracle的MySQL团队,而MariaDB开发人员则通过公开投票和邮件列表进行讨论。另外,任何人都可以向MariaDB提交补丁,而MariaDB开发团队会考虑把补丁添加到代码主库中。所以在某种程度上,MariaDB是由社区开发的,而MySQL则主要由Oracle开发。
总结。
我们不能替你做决定。而我们所能做的就是有针对性地向您提问,然后您自己作出决定:
您有没有分别在两个数据库上测试过您产品的性能?哪个比较好,为什么呢?
您有没有打算使用这些数据库中特别提供的功能?
您有没有打算使用专门为您设计的数据库引擎?
对您而言,能够对数据库的开发流程产生影响有多重要?参加下一次功能变化的投票对您来说有多重要?
您是要为企业版支付费用还是使用社区版?这个社区版本的功能能满足您的要求吗?
您的操作系统默认支持您选择的数据库吗?不需要大量工作就可以部署它吗?
您正在使用哪一个云供应商?它们提供托管服务吗?包括您选择的数据库。
您是否打算将来从一个数据库类型迁移到另一个数据库类型?若有,您是否考虑到兼容性和复制问题?