MySQL的历史:先被Sun公司收购,然后再被Oracle公司收购,以及它怎样成功度过了这些管理职务上的变动。这个故事有太多事情可讲。MySQL不再只可从Oracle获取。在两次转让的过程中,出现了好几个MySQL变种。尽管大部分人都只愿意要Oracle“官方”版本的MySQL,但这些变种非常重要,并且对所有MySQL用户产生了一个很大的改变——甚至是那些从来没有打算使用它们的用户。
在过去几年里,出现了几个MySQL变种,但到目前为止主要有三个久经考验的主流变种:Percona Server,MariaDB和Drizzle。它们都有活跃的用户社区和某种程度上的商业支持,均由独立的服务供应商支持。
Percona Server因致力于解决客户问题而衍生。 Percona Server有三个主要的目标。
透明
增加允许用户更紧密地査看服务器内部信息和行为的方法。包含的特性有类似SHOW STATUS中的计数器,INFORMATION_SCHEMA中的表,以及慢査询日志中特别增加的详细信息。
性能
Percona Server包含许多性能和可扩展性方面的改进。原始性能非常重要,但Percona Server还加强了性能的可预测性和稳定性。其中主要集中于InnoDB。
操作灵活性
Percona Server包含许多移除限制的特性。尽管某些限制看起来不起眼,但这些限制可能会使操作人员和系统管理员在让MySQL作为架构的一部分而可靠并稳定运行时,感到非常困难。
Percona Server是个与MySQL向后兼容的替代品,它尽可能不改变SQL语法、客户端/服务器协议和磁盘上的文件格式。任何运行在MySQL上的都可以运行在Percona Server上而不需要修改。切换到Percona Server只需要关闭MySQL和启动Percona Server,不需要导出和重新导入数据。切换回去也不麻烦,而这一点实际上非常重要:许多问题是通过临时切换解决的,使用增强的方法来诊断,然后切回到标准MySQL。
我们只对标准MySQL中需要并且可以产生显著好处的地方做改进。我们相信大部分用 户坚持使用由Oracle发行的MySQL官方版本可能是最好的选择,并且努力与原版保持尽可能地相同。
Percona Server包括Percona XtraDB存储引擎,即改进版本的InnoDB。这同样是个向后兼容的替代品。例如,如果创建一个使用InnoDB存储引擎的表,Percona Server能自动识别并用Percona XtraDri替代之。Percona XtraDB同样包括在MariaDB内。
Percona Server的一些改进已经包括在MySQL的Oracle版本中,许多其他改进也只是稍作修改而重新实现。结果,Percona Server变成了许多特性的“抢鲜”版,这些特性随后将在标准MySQL中出现。
在Sun收购MySQL后,Monty Widenius,这位MySQL的创建者,因不认同MySQL开发流程而离开Sun。他成立了Monty程序公司,创立了MariaDB,以培养一个“开放的开发环境以鼓励外部的参与”。MariaDB的目标是社区开发,Bug修复和许多的新特性——特别是与社区开发的特性相集成。再引用Monty的一句话,“MariaDB的远景是面向用户和客户驱动,以及更多社区的补丁和插件。”
MariaDB有什么不同呢?与Percona Server相比,它包括了更多对服务器的扩展。(Percona Server的大部分改变是在于Percona XtraDB存储引擎,而不是服务器层。)例如,有许多是对査询优化和复制的改变。它使用Aria存储引擎取代了MyISAM来存储内部临时表(被用于复杂的査询,例如DISTINCT或子査询)。Aria最初叫Maria,在不确定的Sun时代是打算替代InnoDB的。它是MyISAM的崩溃安全的版本。
除Percona XtraDB和Aria外,MariaDB还包括许多社区的存储引擎,例如SphinxSE和PBXT。
MariaDB是原版MySQL的超集,因此已有的系统不需要任何修改就可以运行,就像Percona Server—样。然而,MariaDB对有些场景可以更好地胜任,例如复杂的子査询或多表关联。它同样有MyISAM分段的键缓存,这样特性使得MyISAM在现代的硬件上可以更好地扩展。
关于MariaDB更多的改进可参考:http://askmonty.org上的文档或http://askmonty.org/blog/the-2-year-old-mariadb等
Drizzle是真正的MySQL分支,而非只是个变种或增强版本。它并不与MySQL兼容,尽管区分上还并不是大相径庭。在许多场合并不能简单地将MySQL后端替换为Drizzle,因为它对SQL语法修改太大了。
Drizzle创建于2008年,致力于更好地服务MySQL用户。其创建目标是更好地满足网页应用的核心功能。它是个很了不起的改进,与MySQL相比更简单,选择更少;例如,它只使用utf8作为存储字符集,并且只有一种类型的BLOB。它主要针对64位硬件编译,且支持IPv6网络。
Drizzle数据库服务器的一个关键目标是消除MySQL上异常和遗留的行为,例如声明了NOT NULL列但发现数据库中莫名其妙地存储了NULL。你可以在MySQL上找到的差劲的实现或难使用的特性已经被删除,例如触发器、査询缓存和INSERT ON DUPLICATE KEY UPDATE。
在代码层,Drizzle构建于一个精简内核和插件的微核心架构之上。服务器的核心比起MySQL已经精简许多。几乎任何东西都是插件——甚至类似SLEEP()的函数。这使得Drizzle在源码级非常简单并非常高效。
Drizzle使用了诸如Boost的标准开源库,并遵从代码、构建架构和API方面的标准。它对类似复制等特意使用了Google协议缓冲公开消息格式,并且使用修改版的InnoDB作为标准存储引擎。
Drizzle团队很早就开始着手做服务器的基准测试,用基于业界标准的1024个线程基准来评估髙并发的性能。并发越大性能增加越高,对性能改进非常大。
Drizzle是一个社区开发的项目,在开源社区比MySQL更吸引人。该服务器的许可证是 纯GPL的,没有双重的许可证。然而,MySQL客户端一服务器协议依靠一个基于BSD许可证的新客户端库完成,而这对于幵发商业系统是最重要的一个方面。这意味着你可以通过用Drizzle的客户端库来连到MySQL的方式构建一个专属应用,并且不需要为MySQL客户端库购买商业许可证或将软件基于GPL发布。MySQL的libmysql客户端库是众多公司为MySQL购买商业许可证的最主要的原因之一,没有这个链接到libmysql的商业许可证,这些公司就要被迫在GPL下发行软件。而这不再必要,因为现在公司可以使用Drizzle的库来替代。
但据我们了解,Drizzle虽已在某些产品环境下部署但还没有广泛应用。Drizzle项目的理念是抛弃向后兼容的束缚,而这意味着相对于迁移一个已有的应用而言,它更适合新的应用。
现在,或曾经,有许多MySQL服务器的变种。许多大型公司,例如Google、Facebook和eBay,都维护着这一服务器的修改版,以完全匹配其需求和部署场景。许多源码已可公开获取;也许最著名的例子就是Facebook和Google做的MySQL补丁。
另外还有几个分支或再发行,例如OurDelta、DorsalSource,还有只存在了很短一段时间的Henrik Ingo的一个发行。
最后,许多人没有意识到当他们从GNU/Linux发行包软件库中安装MySQL时,其实获取的是一个修改后的服务器版本-在某些场合下,有大量的修改。Red Hat和Debian(相应的Fedora和Ubuntu)都发行了非标准版本的MySQL,Gentoo以及实际上任何其他GNU/Linux发行也都如此。与其他我们提及的变种相比,这些发行并没有指出对服务器源码做了哪些修改,因为它们保留了MySQL的名字。
过去我们遇到过许多关于MySQL修改版的问题。这是我们倾向于倡导使用Oracle版本的MySQL的一个原因,除非有很强有力的理由来使用其他版本。
很多MySQL的信息已经改变了,可能本篇文章知识有些过时,可以查询官网获得最新信息。
MySQL分支和变种很少有大量的代码被采用到MySQL代码的主干树上,但却很大程度上影响了MySQL开发的方向和节奏。在某些情况下,它们提供了一个出众的替代选择。
应该使用分支代替Oracle官方的MySQL?我们并不认为这通常有必要。如何选择一般基于理解(从来没有完全的精确)或商业原因,例如与Oracle有一个企业范围的关系。通常有两类人倾向不使用官方版本的服务器。
为什么选择某个分支?我们总结如下。如果你想与官方MySQL版本尽量保持紧密,并且想获取更好的性能、指导和有用的特性,那就选择Percona Server。如果你觉得MariaDB对服务器的大量修改更优,或想要一个在社区内更广泛发行的存储引擎,就选择MariaDB。如果你想要一个轻量精简版的数据库服务器并且并不介意是否与MySQL兼容,或想让自己对数据库的改进更容易,那就追随Drizzle。
讲到Percona,一般认为所有的提供商都有许多关于官方版本MySQL的经验,然而很自然地Percona对于PerconaServer最有经验,而Monty公司最熟悉MariaDB。当寻求官方发行的MySQL的Bug修复时这会有影响。只有Oracle能保证一个Bug在官方的MySQL发行中被修复;其他供应商可以提供修复但没有把它们加入到官方发行中的权力。这回答了为什么选择某个分支:有些人选择分支就是因为其服务供应商提供的MySQL版本完全可控,并且可以方便地修复和改进。