跳转至

0. MySQL的起源和分支

MySQL的前世今生

MySQL的海豚标志的名字叫"sakila",它是由MySQL AB公司的创始人从用户在"海豚命名"的竞赛中建议的大量的名字表中选出的。

获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。

根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

初期开源数据库阶段

MySQL的历史最早可以追溯到1979年,有一个人叫Monty Widenius, 为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具,可以在4M主频和16KB内在的计算机上运行。

过了不久,他又使用C语言重写此工具,移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎。这个工具叫做Unireg。

1985 年,瑞典的几位志同道合小伙子(以David Axmark 为首) 成立了一家公司,这就是MySQL AB 的前身。

这个公司最初并不是为了开发数据库产品,而是在实现他们想法的过程中,需要一个数据库。他们希望能够使用开源的产品。

但在当时并没有一个合适的选择,没办法,那就自己开发吧。

在最初,他们只是自己设计了一个利用索引顺序存取数据的方法,也就是ISAM(Indexed Sequential Access Method)存储引擎核心算法的前身,利用 ISAM 结合 mSQL 来实现他们的应用需求。

在早期,他们主要是为瑞典的一些大型零售商提供数据仓库服务。在系统使用过程中,随着数据量越来越大,系统复杂度越来越高,ISAM 和mSQL 的组合逐渐不堪重负。

在分析性能瓶颈之后,他们发现问题出在 mSQL 上面。不得已,他们抛弃了mSQL,重新开发了一套功能类似的数据存储引擎,这就是 ISAM 存储引擎。

大家可能已经注意到他们当时的主要客户是数据仓库,应该也容易理解为什么直至现在,MySQL 最擅长的是查询性能,而不是事务处理(需要借助第三方存储引擎)。

1990年,TcX的customer 中开始有人要求要为它的API提供SQL支持,当时,有人想到了直接使用商用数据库算了,但是Monty觉得商用数据库的速度难令人满意。

于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。但不巧的是,效果并不太好。于是,Monty雄心大起,决心自己重写一个SQL支持。

1996年,MySQL 1.0发布, 在小范围内使用。到了96年10月,MySQL 3.11.1发布了,没有2.x版本。

最开始,只提供了Solaris下的二进制版本。一个月后,Linux版本出现了。 此时的MySQL还非常简陋,除了在一个表上做一些Insert,Update,Delete和Select 操作职位,没有其他更多的功能。

紧接下来的两年里,MySQL依次移植到各个平台下。它发布时,采用的许可策略,有些与众不同:允许免费商用,但是不能将MySQL与自己的产品绑定在一起发布。

如果想一起发布,就必须使用特殊许可,意味着要花银子。当然,商业支持也是需要花银子的。其它的,随用户怎么用都可以。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展打下了良好的基础。

1999-2000年,有一家公司在瑞典成立了,叫MySQL AB。 雇了几个人,与Sleepycat合作,开发出了 Berkeley DB引擎,因为BDB支持事务处理,所以,MySQL从此开始支持事务处理了。

在2000 年的时候,MySQL 公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源世界。

2000年4月,MySQL对旧的存储引擎进行了整理,命名为MyISAM。

2001年,Heikiki Tuuri向MySQL提出建议,希望能集成他们的存储引擎InnoDB,这个引擎同样支持事务处理,还支持行级锁。

所以在2001年发布的3.23 版本的时候,该版本已经支持大多数的基本的SQL 操作,而且还集成了MyISAM和InnoDB 存储引擎。MySQL与InnoDB的正式结合版本是4.0。

2004年10月,发布了经典的4.1版本。

2005年10月,有发布了里程碑的一个版本,MySQL 5.0。在5.0中加入了游标,存储过程,触发器,视图和事务的支持。在5.0 之后的版本里,MySQL明确地表现出迈向高性能数据库的发展步伐。

SUN和Oracle发展阶段

2008年1月16号 MySQL被Sun公司收购。

2009年04月20日Oracle收购Sun 公司,MySQL 转入Oracle 门下。

被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展。

因此导致自由软件社群们对于Oracle是否还会持续支持MySQL社区版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。

2010年04月22日,Oracle发布了MySQL 5.5。自此,MySQL 进入了发展的快车道,成为了最流行的数据库。

MySQL, the most popular Open Source SQL database management system, is developed, distributed, and supported by Oracle Corporation.

MySQL有很多分支,其中Percona Server for MySQL是 一个非常优秀的MySQL分支,它完全兼容Oracle官方的MySQL Server。

Percona Server for MySQL和MySQL的关系:

  • Percona Server for MySQL是基于MySQL社区版的源码进行二次开发而产生的;

  • Percona Server for MySQL修复了MySQL中一些已知的bug;

  • Percona Server for MySQL进行了功能和性能的增强;

  • 除非启动了某些特殊的功能, Percona Server for MySQL和MySQL可以无缝进行切换。

各种分支流派

percona简介

Percona是原MySQL运维部总监Peter和Vadim在2006年离开后创建的,因其本身是运维出身,所以他做的这个分支基本上也是为运维人员服务的。

一些DB常用的工具XtraBackup和Percona Toolkit,都是出自此公司。

这家公司声称他们提供的软件都是免费的,他们的收入主要来与开源社区,企业的支持,以及使用他们软件的公司的支付他们提供support的费用。

Percona公司最主要的产品还是MySQL分支产品:Percona Server。Percona Server 声称可以"完全与 MySQL 兼容",这是与其他更改了大量基本核心 MySQL 代码的分支的最大区别。因此从理论上讲,从Mysql迁移到Percona Server,无需更改程序中的任何代码。

Percona公司在MySQL数据库优化方面做了非常多的工作,例如,Percona Server在官方InnoDB存储引擎的基础上开发了XtraDB存储引擎,可以认为XtraDB是InnoDB存储引擎的增强版。

与MySQL5.1内置的InnoDB相比,单位时间执行事务数量是后者的2.7倍。XtraDB引擎能做到的向下兼容,创建数据表的时候,InnoDB引擎会自动被替换成XtraDB引擎,用户和客户端根本感觉不到区别。(注意这里只是说Mysql 5.1的情况,现在MySQL已经发展到8.0了,情况已经不同)。

完全兼容Mysql意味着,Percona Server需要跟着Mysql 官方版本一起演进。

Percona Server采取的策略是:先兼容MySQL然后再进行优化,所以用户可以很容易的从MySQL迁移到Percona Server上面,而不用去考虑兼容性的问题。Percona Server会在每个官方版本的基础上,添加一些新的功能特性。

Percona Server 和 Oracle MySQL Server 的对比

需要注意的是,Percona Server 虽然是开源的,但是他们自己管理代码,不接受外部开发人员的贡献,以这种方式确保他们对产品中所包含功能的控制。

MariaDB简介

MariaDB 的主要创建者是 Monty Widenius,也是 MySQL 的初始创建者。2008年Sun以10亿美金收购MySQL,结果Sun又把Microsystems和MySQL转手卖给Oracle,Monty愤而出走,创立MariaDB分支。

从某种程度来说,可能MariaDB才是一脉相承过来的原汁原味的MySQL。(出走也许是因为担心 Oracle 是否会投入精力,来保持MySql在数据库领域的领先地位)

与Percona Server不同,MariaDB是一个"开放"的分支,Monty为了避免它闭源特别成立了一个基金会( https://mariadb.org/),把MariaDB放在基金会里,基金会无法进行商业活动,也就不会步MySQL的后尘。

当然,也有一个对应的 MariaDB公司,提供内部QA稳定性测试、商业套件、订阅服务、培训、甚至定制化开发服务等,所以即使MariaDB这个公司被收购了,也不会影响到MariaDB本身的发展。

MariaDB基金会分为白金、金牌和铜牌三个级别的赞助会员,普遍来自于MariaDB项目的贡献者或用户。值得一提的是,在2017年的3月与6月,阿里云和腾讯云先后成为MariaDB的白金赞助商。

在早期,MariaDB 还声称自己是 MySQL 的替代,从 MySQL 切换到 MariaDB 时,无需更改任何基本代码。然而众多因素,导致MariaDB这个分支上也比官方MySQL走得更快一些,对内核进行了大量的修改。这里有众多因素:

  • MariaDB 自身"开放"的定位
  • 基金会的赞助商的推动

虽说基金会不能进行商业活动,但是如阿里云/腾讯云,本身也是公有云的提供商,面对大量的中小企业客户需求,他们在数据库层面所有的功能改进或者bugfix,贡献给基金会的时候,更容易被采纳。

这意味着,实际上Maridb高版本已经不是100%兼容 Oracle MySQL 官方版本了。

如何选择合适的分支

毫无疑问,Oracle 官方 MySQL 是一款非常出色的产品,是一个非常适合大多数使用情况的数据库。从 DB-Engines Ranking 上,可以看到官方的 MySQL 高居第2,MariaDB 排名在15,Percona Server for MySQL 甚至没有出现在截图上(排名90)。

MariaDB 排名如此之高,原因有很多:自身的功能特性,同时是Red Hat、SUSE等提供的LAMP架构安装包的默认数据库,还有一些赞助商是公有云厂商。

对于一些没有数据库内核研发能力的团队,还是建议使用Percona Server或官方的Oracle MySQL。

Percona Server虽然排名是最靠后的,也许是大多数DBA最喜爱的,国内很多大型互联网公司都使用Percona Server。

原因在于:MariaDB新特性很多,有很多新功能,其实有些我们不需要,还容易出bug。Percona Server分支更稳定,对DBA运维更加友好。

那为什么Percona Server排名这么低呢?这可能与Percona Server的定位有关,其只支持Linux操作系统,作为生产数据库使用。

而官方MySQL、MariaDB都支持多种操作系统,例如Windows、OS X、Solaris等,无疑扩大了受众。

另外,对于官方MySQL、MariaDB都有公有云厂商将其以DBSaaS的方式提供服务,但是,没有公有云厂商使用Percona Server。

学习书籍

Database System Concepts 7th

数据库系统概念

习题答案https://github.com/noahabe/database_system_concepts_answers

Database System Concepts 6th