• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

如何选择MySQL版本?

MySQL 彭东稳 7年前 (2017-05-19) 27443次浏览 已收录 0个评论

一、MySQL官方版本

Oracle MySQL目前可分为4个版本:MySQL社区版、MySQL标准版、MySQL企业版、MySQL集群版。

  • MySQL社区版

可免费下载使用的开源版本,遵循GPL协议,包括如下的这些特性。可插拔的存储引擎架构;多存储引擎支持InnoDB、MyISAM、NDB(MySQL Cluster即采用NDB存储引擎)、Memory、Merge、Archive、CSV等;主从复制,组复制;分区;存储过程、触发器、视图;信息数据库(Information-Schema),sys信息库;MySQL连接器。

目前已经发布了MySQL 5.0、MySQL 5.1、MySQL 5.5、MySQL 5.6、MySQL 5.7、MySQL 8.0一共6个GA版本。一般来说,后面的版本比前面的版本功能更强、扩展性更好。

以下3个版本是给商业用户使用的,商业客户可灵活选择多个版本,以满足特殊的商业和技术需求。

  • MySQL标准版

MySQL标准版和社区版差别不大,提供社区版所支持的各种特性。

  • MySQL企业版

MySQL企业版提供7×24小时的技术支持服务,用户可直接联系MySQL专业支持工程师,获取关于MySQL应用程序开发、部署和管理的全方位支持。

MySQL企业版提供了更全面的高级功能、管理工具和技术支持,例如:MySQL企业级备份可为数据库提供在线“热”备份,从而降低数据丢失的风险。它支持完全、增量和部分备份,以及时间点恢复和备份压缩。

MySQL线程池提供了一个高效的线程处理模型,旨在降低客户端连接和语句执行线程的管理开销。

MySQL企业级安全性提供了一些立即可用的外部身份验证模块,可将MySQL轻松集成到现有的安全基础架构中。

其他特性还有MySQL企业级审计、MySQL企业级监视器(MySQL Enterprise Monitor)和MySQL查询分析器(MySQL Query Analyzer)等。

MySQL的一些新特性出现在了企业版中,但并没有出现在社区版,这导致很多人对于MySQL产生了疑虑,但MySQL的生态已经建立成熟,官方版本和其他分支也都在稳定地发展改进中,一般的中小公司选择社区版本即可。一些行业、领域要求更好的服务,更高的稳定性,或者有其他复杂的业务需求,对于它们企业版是一个很好的选择。

  • MySQL集群(MySQL Cluster)版

Oracle收购MySQL之后,对MySQL Cluster做了大量改进,这也是Oracle力推的产品。集群版是一种分布式、无共享(share-nothing)的架构,也就是说把数据分布在各个节点的内存里。据官方宣称,集群版可比单机数据库提供更高的可用性,高达99.999%。它还有一些好处,比如自动分片、动态添加节点、支持跨IDC复制、减少维护成本等。但这个产品比较复杂,国内也缺少精通MySQL Cluster的专家,如果一定要使用,建议做好充分的测试验证工作。

据说现在的MySQL Cluster版本已经允许存储部分数据到硬盘上,但由于主要数据需要存放在内存中,因此其部署成本会比较高。另外,随着MySQL Cluster节点的增多,节点之间通信、同步的代价也越来越大,所以其扩展性也是有限的。对于海量数据,MySQL Cluster可能不是很好的方案,从理论上来讲,仅仅把热点数据加载到内存是更经济的做法。

二、MySQL分支与变种

MySQL的第一个版本3.23是由瑞典的MySQL AB公司发行的,后来被SUN公司收购,然后SUN又被Oracle公司收购,自然MySQL现在也属于Oracle公司了。这中间的故事太多可讲。我们知道MySQL的核心可以说就是InnoDB存储引擎了,支持事务,行锁,表压缩等功能;而InnoDB存储引擎由Innobase Oy公司所开发,采用GPL协议,完美与MySQL相结合。但其实在MySQL被Sun公司收购之前,2006年5月份Oracle已经把InnoDB存储引擎给收购了,这里足矣看出Oracle公司之远见,可以说即时扼制了MySQL的发展。据说是因为InnoDB当时在MySQL大会上展示了自己表压缩功能,才真正被Oracle放在心上,因为当时Oracle都不支持这个功能(Oracle旁白:我有的功能你有,我没有的你也有,我收费而你免费,这。。。)。

Oracle拥有MySQL后,就对MySQL出了企业版和社区版,但是两个版本之间并没有什么改变。只是企业版提供MySQL监控程序和技术支持但收费也是挺贵,Oracle公司两年使MySQL企业版的费用翻了4倍,MySQL一直是Oracle数据库的强大对手之一,这其中Oracle到底想什么猫腻谁也不知道。而MySQL在两次转让的过程中,出现了好几个MySQL变种。主要有Percona server,MariaDB和Drizzle。它们都有活跃的用户社区和某种程度上的商业支持,均由独立的服务供应商支持。

  • Percona server

由MySQL性能团队成员创建的一家MySQL技术服务公司,而Percona server就是在源代码的基础上加以修改,其主要目标是对MySQL的性能和操作灵活性加以提升。当然也是开源的,跟MySQL商业版一样提供服务,技术支持,咨询等。

Percona server是个与MySQL向后兼容的替代品,它尽可能不改变SQL语法、客户端/服务器协议和磁盘上的文件格式。任何运行在MySQL上的都可以运行在percona server上而不需要修改。切换到percona只需要关闭MySQL和启动percona即可,不需要导出和重新导入数据。

Percona server包括percona XtraDB存储引擎,即改进版的InnoDB。这同样是个向后兼容的替代品。例如,如果创建一个使用innodb存储引擎的表,percona server能自动识别并用percona XtraDB替代之。Percona XtraDB同样包括在MariaDB内。其次就是percona server的一些改进已经包括在MySQL的oracle版本中,只是percona server在5.5版本中的许多改进可能要在MySQL 5.6中才会实现。

  • MariaDB

在Sun收购MySQL后,Monty Widenius这位MySQL的创建者,因不认同MySQL开发流程而离开Sun。他成立了Monty程序公司并创立了MariaDB数据库,没办法牛人就牛人,说开发就开发一个数据库。更屌的是Monty大神一共开发了三个数据库且都是以自己孩子的名字命名的,他女儿叫My用在了MySQL上、儿子叫Max名字用在了跟SAP公司合作开发的数据MaxDB上、现在的MariaDB同样是以小孙女名字Maria命名的。Monty公司的理念是以培养一个开放的开发环境以鼓励外部的参与,并且在Red Hat的7.0版本发行中已经使用MariaDB替换MySQL了。但是MySQL和MariaDB内部机制没有变化,所以学习MySQL也就是在学习MariaDB,只是MariaDB的开发者都是以前的MySQL开发者,所以更有优势。据说现在国外有很多公司已经开始转MariaDB了。

MariaDB有什么不同呢?与percona server相比,它包括了更多对服务器的扩展(percona的大部分改变是在于percona XtraDB的存储引擎,而不是服务器层)。例如,有许多是对查询优化和复制的改变。它使用Aria存储引擎取代了MyISAM来存储内部临时表。Aria最初叫Maria。除了Percona XtraDB和Aria外,MariaDB还包括许多社区的存储引擎,例如SphinxSE和PBXT。

MariaDB还是使用的InnoDB存储引擎(10.2换回InnoDB),随着MySQL与MariaDB版本跨度越来越大,其区别也就越来越多了。具体还是要看官方信息。

  • Drizzie

这个分支其实更偏向学术,一个精简版的MySQL分支,由前MySQL CTO创建的MySQL分支版本。在目前的MySQL代码基本之上,将存储过程、视图、触发器、查询缓存、PREPARE语句等等没什么必要的功能从代码中删掉,简化对数据类型和存储引擎的支持,并且进行大胆的重构,采用标准C++重构各个模块。最终要实现的目的是将MySQL的代码大大简化,理顺MySQL的架构,改善MySQL的代码质量,提高系统的稳定性和性能。将更适合Web应用、云计算组件、没有业务逻辑的数据库(又名存储过程)、多核架构等业务。网上的消息越来越少,据说官网都关闭了。

  • 中国MySQL第三方发行版

AliSQL,来自阿里巴巴阿里云RDS团队。TXSQL,来自腾讯。InnoSQL,来自网易。OneSQL,来自平民软件。

三、如何选择MySQL版本?

在选择MySQL的版本时,要根据生产情况来决定,是对现有生产环境中的数据库进行版本升级呢?还是部署新的数据库呢?如果已经在生产环境中部署了MySQL,那么我们不需要急着将其升级到最新版本,旧的版本已经在生产环境中长期稳定地运行,而新版本刚出来时,往往并不是那么稳定,通常都会有一些Bug需要修复。不稳定版本将导致生产系统的不稳定,所以,如果不是急需新版本的某种特性,或者旧版本有严重的安全隐患,建议继续使用旧的MySQL版本即可。如果新版本已经稳定成熟且生产环境中的版本过于陈旧,那么可以考虑升级旧的MySQL版本。MySQL的发展已经有10多年了,截至2016年6月,Oracle已经发布了MySQL 5.5、MySQL 5.6、MySQL 5.7,MySQL 8.0,其中MySQL 5.6/5.7已经比较成熟,可以考虑把生产环境中的MySQL 5.1升级到MySQL 5.6,如果需要MySQL 5.7的一些新特性,那么可以考虑将非核心的一些系统升级到MySQL 5.7。

升级到新版本,往往可以获得一定程度上的性能提升,所以,有计划地把生产环境中的MySQL 5.1系统升级为最新的稳定成熟版本是值得的。如果升级的代价比较大,那么保持现状也是可以的。如果生产数据库的部署是标准的,那么可以考虑编写一个自动升级的脚本。先统一升级从库,再升级主库。由于升级主库可能对服务的可用性造成影响,因此需要和相关方协调好时间计划。如果前端有带数据库自动切换功能的中间件,或者应用层能够比较友好地处理主从切换,那么把数据库流量临时切换到从库,可以大大减少对生产服务的影响。

对MySQL的分支选择也要慎重,2008年SUN公司收购了MySQL AB,但次年Oracle又收购了SUN,MySQL也是交易的一部分,这之后,Oracle的一系列举动让许多用户和开发者开始质疑MySQL在Oracle旗下的命运,进而开始选择其他替代品。对于MySQL分支的选择,不做过多的叙述,现实中,已经有一些重量级公司放弃了MySQL,转向MySQL的其他分支,如MariaDB、Percona Server,但对于绝大部分中小公司来说,使用官方的MySQL或其他分支(如MariaDB),都是比较好的选择,能够满足绝大部分的需求。建议是如果公司尚在起步阶段,选择Oracle官方的版本即可。我们选择一个产品往往会基于一个重要的理由,它必须是由一个可靠的、成熟的公司或组织来维护的,这能够确保这个产品会得到长久、稳定的支持。技术发展的目的是解放生产力,如果官方版本仍然能够为企业带来好处,那么坚持使用原来的产品往往是一种比较好的选择,开源和闭源的分裂将是长期的,也是可以共存的,只要是对企业有利的,就不应该拒绝继续使用,除非你有明确的理由放弃它。

我个人更倾向于官方MySQL,特别是MySQL 5.6/5.7/8.0版本,修复了大量的Bug,性能提高了很多。其实Percona从5.6版本开始慢慢做的优化和有用的新功能就少了,而他之前做的优化,MySQL 5.6/5.7基本都集成了。而MariaDB虽然是MySQL创始人Monty主导的,在调优或某些方面确实很有优势,特别是复制或优化器方面的工作,有些新功能做的也很快;但是唯一遗憾的就是MariaDB没有核心存储引擎,目前还是使用InnoDB存储引擎,而MySQL最核心的InnoDB存储引擎也是Oracle旗下的。而对于复制或优化器这些工作,只要Oracle肯话经历去搞,也一定不会比MariaDB差,要相信Oracle可是地表最强的数据库公司,也是最懂数据库的公司,没有之一。从目前的趋势来看,Oracle从MySQL 5.5开始接手后,到目前的8.0系列,可以看到确实做了大量的工作。特别是在8.0系列,推出了组复制,文档支持,InnoDB进行了重构等,都可以看出官方MySQL在往一个很好的方向发展。当然,也有人担心MySQL会被Oracle干掉,短期来说应该不会;MySQL可以说是Oracle进军互联网的一张重要王牌(传统行业基本被Oracle数据库垄断),相信Oracle不会放弃这个市场。

从MySQL 5.6到8.0看去,可以发现MySQL慢慢地在不断地重构各个模块,这个非常重要,这样这个软件才有生命力,好比Linux系统;相比较MariaDB还是可能用着那套旧代码,慢慢地会跟官方版本差距越来越大可能,官方也可能越来越有优势。当然,两者之间慢慢地可能连兼容都是个问题了。最后一个问题就是官方社区版是不支持线程池,而MariaDB和Percona支持,这个。。。。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (4)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!