MySQL的历史

MySQL的历史始于1979年,那时Monty Widenius在一个叫TcX的小公司工作,他用BASIC编写了一个运在4M主频、16K内存计算机上的报表工具。随着时间的推移,这个小工具被用C重写并迁移到Unix上运行。它还仅仅是一个低级的存储引擎再配上一个报表前端。它就是大家知道的Unireg。

或许是需要在比较烂的计算机硬件上工作,抑或是依靠天生的聪明才智,Monty练就了编写非常高效代码的习惯与能力。同时他还练就了,或者是天赋了具备常人所不能及的前瞻能力,使他能在不知道未来太多开发细节的情况下,怎样让现在的代码对以后的开发有所帮助。

除了以上原因之外,因TcX是一个小公司且Monty是其合伙人之一,所以代码如何编写,Monty相当有发言权。尽管有着为数不少跟Monty一样有天赋与才华的人,但因种种原因,很少有人能左右自己的代码20年以上,但Monty做到了。

Monty的作品、天赋以及他的这种对代码的所有权为MySQL这一奇迹的出现奠定了基础。

上世纪90年代某年某月某日,TcX的客户急切要求访问其数据的SQL接口,TcX出了好几种方案,一种是把数据都加载进一个商用数据库,但Monty对这个方案的执行速度并不满意。他尝试将mSQL的代码用做SQL层,并用自己的低层级的存储引擎集成进来,但效果也不好。然后一场由压抑的天才的程序员举旗的运动爆发了:“别人不靠谱,我要自己搞!”

就这样,1996年五月份,MySQL 1.0发布给一小撮人,同年10月,MySQL 3.11.1正式发布。这个发布版只提供一个Solaris的二进制发布版,一个月后,源码和Linux二进制包也发布了。

接下来的两年中,随着新的特性逐步增加,MySQL被移植到其它的操作系统上。起初MySQL发布的时候遵循一种特殊许可证:允许MySQL可以商用,但利用MySQL所开发的软件不能再次发布。特殊许可证可以颁给那些想销售捆绑MySQL的产品的人。另外,TcX也提供商业支持有偿服务。尽管MySQL最初的目标早已实现,但这些举措为TcX对MySQL的深入开发指明了方向。

在这一段时期中MySQL发展到3.22,它支持了适度的SQL集,还带有一个比我们想象的可以由一个人可以搞定的那种要更复杂的优化器,新版本速度很快,且非常稳定。API的大量提供,让你几乎可以用任何一种地球上的编程语言编来写它的客户端。尽管如此,它还是不支持事务、子查询、外键、存储过程和视图。只在表级别存在的锁,时不时会造成响应缓慢更甚挂机。很多不得要领的MySQL爱好者只是把它拿来玩玩而已,而高级用户则乐呵呵地把数据从Oracle和SQL Server上往MySQL上迁移,以解决性能问题和降低成本,并编写代码弥补MySQL自身的缺陷不足。

大约在1999-2000,一个名叫MySQL AB的独立公司成立了,它聘请了几位开发者并与Sleepycat公司建立合作伙伴关系,提供访问Berkeley DB数据文件的SQL接口。自从Berkeley DB具备事务功能之后,它就赋于了MySQL支持事务的特质,补上了它的短板。在为集成Berkeley DB做了一些修改之后,MySQL 3.23发布了。

尽管MySQL的开发者没能完全解决掉Berkeley DB接口的所有缺点,且Berkeley DB的表也不甚稳定,但是,功夫没白费。MySQL的源码中加入的钩子,这样就可以加入任何类型的存储引擎了,当然也就可以加入支持事务的了。

到了2000年四月,有了Slashdot的支持与赞助,master/slave机制加入。不支持事务的老存储引擎ISAM被重写了,并以MyISAM的形式发布。经过大量的改良,当前版本也支持了全文搜索。MySQL AB还曾有一个跟NuShpere短期的合作,在MySQL中加入了一个支持行级锁和事务的引擎Gemini,但因法律问题于2001年结束了。也就在这时,Heikki Tuuri提议用自己的引擎集成到其中,并接手MySQL AB的工作,这个引擎就是同样支持行级锁和事务的InnoDB。

因为之前Berkeley DB已经完成了新的表处理接口,所以Heikki的集成工作变得更加的顺畅。2001年10月,MySQL/InnoDB版发布了,版本号是4.0 alpha。2002年初,MySQL/InnoDB组合已经是非常快速稳定了,但在2003年3月份,4.0版才正式宣布。

值得一提的是,版本号的变更并是不因为加入了InnoDB。MySQL的开发者只是把InnoDB当成是一个插件,完全没把它当成是他们赖以成功的法宝。从过去到现在,一个新的存储引擎的加入也不值得发布一个版本号来庆贺。实际上,跟以前的版本比较起来,4.0并没加太多的新东西。也许新加的最有意义就数查询缓存了(Query Cache),它大大提升了众多应用的性能。用来在slave上复制数据的代码也重写了,变成了两个线程,一个用来处理master上的网络IO,另一个用来处理更新。另一些是关于优化器的改良。客户端/服务器间的协议也可以用SSL加密。

2003年4月4.1 alpha版本发布,2004年6月4.1 beta版发布。这可不像4.0,这次加入了很多有意义的功能。最有意义的就是子查询,一个大家期待已久的功能。空间索引支持也加到了MyISAM引擎中。Unicode支持也被实现了。客户端/服务器协议也有了大量的改动,面对黑客的攻击它更安全,而且支持预处理语句(prepared statement)。

与4.1同步进行的还有另外一个分支版本5.0,它加入了存储过程,服务器端游标,触发器,视图,分布式事务(Xa transactions),查询优化器的显著改进以及其它的一些特性。MySQL的开发者发现如果要让4.1 稳定下就要花很大的工夫,如果他们要把新特性都加进去,就必须先搞定存储过程,这让他们痛下决心另创了一个分枝来开发5.0。5.0 alpha版最终于2003年12月发布了。曾经一度因这个造成了一些混乱——两个分枝同时处在alpha 阶段,后来(2004年10月)4.1稳定了,这个尴尬也就随之而解了。

5.0也在一年之后,也就是2005年10月,也稳定下来了。

5.1 alpha版紧随其后,于2005年11月发布,其中加了好多的新的改进,如表分区(table data partitioning),基于行的复制(row-based replication),事件调度器(event schedular),和让新存储引擎和其它插件轻松集成的标准化插件API。

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

2009年04月20日Oracle收购Sun,MySQL归Oracle麾下。

2010年04月22日发布MySQL 5.5。

2013年02年05日发布MySQL 5.6.10 GA。

发表评论