MYSQL的历史
见证MySQL发展历程 各分支版本溯源
http://tech.it168.com/a2012/0621/1363/000001363446.shtml
【IT168 技术】毫无疑问,目前MySQL已经成为最为流行的开源关系数据库系统,并且一步一步地占领了原有商业数据库的市场。可以看到Google、Facebook、Yahoo、网易、久游等大公司都在使用MySQL数据库,甚至将其作为核心应用的数据库系统。而MySQL数据库也不再仅仅应用于Web项目,其扮演的角色更为丰富。在网络游戏领域中,大部分的后台数据库都采用MySQL数据库,如大家比较熟悉的劲舞团、魔兽世界、Second Life等。很少能看到有哪个网络游戏数据库不是采用MySQL数据库的。此外,MySQL数据库已成功应用于中国外汇交易中心、中国移动、国家电网等许多项目中。
越来越多的企业级项目应用“见证”了MySQL数据库的飞速发展,并预示着MySQL数据库本身正在逐渐完善并走向成熟。以前会有人诟病MySQL为什么没有视图,没有存储过程,没有触发器,没有事件调度器。而现在,MySQL还没有什么呢?经历了MySQL 5.0和5.1的发展,如今MySQL数据库迎来了重要的5.5版本。在了解MySQL 5.5带给我们的新特性之前,我们先来看看MySQL的发展历程。简单来说,MySQL数据库的发展可以概括为三个阶段:
·初期开源数据库阶段。
·Sun MySQL阶段。
·Oracle MySQL阶段。
很多人以为MySQL是最近15年内才出现的数据库,其实MySQL数据库的历史可以追溯到1979年,那时Bill Gates退学没多久,微软公司也才刚刚起步,而Larry的Oracle公司也才成立不久。那时有一个天才程序员Monty Widenius为一个名为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。没过多久,Monty又将此工具用C语言进行了重写并移植到了UNIX平台。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。
虽然TcX这个小公司资源有限,但Monty天赋极高,面对资源有限的不利条件,反而更能发挥他的潜能。Monty总是力图写出最高效的代码,并因此养成了习惯。与Monty在一起的还有一些别的同事,很少有人能坚持把那些代码持续写到20年后,而Monty却做到了。
1990年,TcX公司的客户中开始有人要求为他的API提供SQL支持。当时有人提议直接使用商用数据库,但是Monty觉得商用数据库的速度难以令人满意。于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。令人失望的是,效果并不太令人满意,于是,Monty雄心大起,决心自己重写一个SQL支持。
1996年,MySQL 1.0发布,它只面向一小拨人,相当于内部发布。到了1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris下的二进制版本。一个月后,Linux版本出现了。
在接下来的两年里,MySQL被依次移植到各个平台。在发布时,MySQL数据库采用的许可策略有些与众不同:允许免费使用,但是不能将MySQL与自己的产品绑定在一起发布。如果想一起发布,就必须使用特殊许可,意味着要花“银子”。当然,商业支持也是需要花“银子”的。其他方面,随用户怎么用都可以。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展打下了良好的基础。
MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心的多线程机制提供完全的多线程运行模式,并提供了面向C、C++、Eiffel、Java、Perl、PHP、Python及Tcl等编程语言的编程接口(API),支持多种字段类型,并且提供了完整的操作符支持。
1999~2000年,MySQL AB公司在瑞典成立。Monty雇了几个人与Sleepycat合作,开发出了Berkeley DB引擎, 因为BDB支持事务处理,所以MySQL从此开始支持事务处理了。
2000年4月,MySQL对旧的存储引擎ISAM进行了整理,将其命名为MyISAM。2001年,Heikki Tuuri向MySQL提出建议,希望能集成他的存储引擎InnoDB,这个引擎同样支持事务处理,还支持行级锁。该引擎之后被证明是最为成功的MySQL事务存储引擎。
2003年12月,MySQL 5.0版本发布,提供了视图、存储过程等功能。
2008年1月,MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。在Sun时代,Sun公司对其进行了大量的推广、优化、Bug修复等工作。
2008年11月,MySQL 5.1发布,它提供了分区、事件管理,以及基于行的复制和基于磁盘的NDB集群系统,同时修复了大量的Bug。
2009年4月,Oracle公司以74亿美元收购Sun公司,自此MySQL数据库进入Oracle时代,而其第三方的存储引擎InnoDB早在2005年就被Oracle公司收购。
2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎终于变为当前MySQL的默认存储引擎。MySQL 5.5不是时隔两年后的一次简单的版本更新,而是加强了MySQL各个方面在企业级的特性。Oracle公司同时也承诺MySQL 5.5和未来版本仍是采用GPL授权的开源产品。
随着MySQL的不断成熟及开放式的插件存储引擎架构的形成,越来越多的开发人员加入到MySQL存储引擎的开发中。而随着InnoDB存储引擎的不断完善,同时伴随着LAMP架构的崛起,在未来的数年中,MySQL数据库仍将继续飞速发展。
MySQL数据库的分支版本
MySQL是开源的数据库,这意味着任何人都可以在其源码的基础上分支出自己的MySQL版本,并且可以在原MySQL数据库的基础上进行一定的修改,这是开源赋予用户的权力。
MariaDB是由MySQL创始人之一Monty分支的一个版本。在MySQL数据库被Oracle公司收购后,Monty担心MySQL数据库发展的未来,从而分支出一个版本。这个版本和其他分支有很大的不同,其默认使用崭新的Maria存储引擎,是原MyISAM存储引擎的升级版本。此外,其增加了对Hash Join的支持和对Semi Join的优化,使MariaDB在复杂的分析型SQL语句中较原版本的MySQL性能提高很多。另外,除了包含原有的一些存储引擎,如InnoDB、Memory,还整合了PBXT、FederatedX存储引擎。不得不承认,MariaDB数据库是目前MySQL分支版本中非常值得使用的一个版本,尤其是在OLAP的应用中,对Hash Join的支持和对Semi Join的优化可以大大提高MySQL数据库在这方面的查询性能。MariaDB的官方网站为http://mariadb.org/。
关于MariaDB、MySQL、MaxDB名字的由来,这里有个不得不说的小插曲。Monty有一个女儿,名叫My,因此他将自己开发的数据库命名为MySQL。Monty还有一个儿子,名为Max,因此在2003年,SAP公司与MySQL公司建立合作伙伴关系后,Monty又将与SAP合作开发的数据库命名为MaxDB。而现在的MariaDB中的Maria是Monty小孙女的名字。
Drizzle是基于原MySQL 6.0代码分支出的一个版本,官方网站为http://www.drizzle.org/。Drizzle有个很明显的区别于MySQL的地方就是,它的核心代码很有限,目前也致力于继续保持微小内核的方式。Drizzle支持一系列的接口,其他模块能很好地以插件方式加载进来,这样用户可以按照自己的需要进行扩展。同时,对于用户来说使用了什么模块更加一目了然,更加个性化。Drizzle的特点为:
·一个更适合云计算组件和Web应用的数据库。
·高效的内存使用。
·开放源代码、开源社区,开放型设计。
Percona Server是Percona公司分支的一个MySQL数据库版本。该版本对高负载情况下的InnoDB存储引擎进行了一定的优化,为DBA提供一些非常有用的性能诊断工具,另外有更多的参数和命令可以用来控制服务器行为。Percona公司最大的贡献是发布了免费开源的XtraBackup工具,可实现对InnoDB存储引擎表的在线热备份操作。
InnoSQL是笔者分支的一个MySQL版本,其目标是提供更好的数据库性能,以及将一些富有创意的想法用于数据库的生产环境。InnoSQL完全兼容于Oracle MySQL版本,所有添加的补丁、插件、存储引擎都是动态的。如果不开启这些功能,那么它和原版本是完全一致的。目前其独有的功能有:
·InnoDB Flash Cache
·InnoDB Share Memory
·IO Statistics
InnoDB Flash Cache 将SSD作为Flash Cache(之前版本的实现为Secondary Buffer Pool)。目前一些解决方案如Facebook Flash Cache是通用的解决方案,Oracle的Flash Cache性能较为一般。InnoSQL的解决方案针对MySQL数据库的特性对SSD进行了大幅的优化,性能较直接将SSD作为持久存储性能可有1倍多的提升。
InnoDB Share Memory 将Share Memory作为InnoDB的共享内存,以此提高数据库的预热速度。预热对数据库的benchmark并没有多大的帮助,而对于生产环境中的使用却有着非常大的帮助。InnoDB Share Memory可将InnoDB缓冲池迅速恢复到数据关闭时的状态,以此来保证应用的连续性。
IO Statistics扩展了MySQL原有Slow Log的内容,现在可记录某SQL语句的逻辑读取和物理读取的IO。这有助于DBA和开发人员更好地了解SQL语句的工作,同时帮助他们更好地进行SQL语句的调优。当打开IO Statistics时,会在MySQL的Slow Log中看到类似如下的内容:
# User@Host: root[root] @ localhost [::1]
# Query_time: 0.310018 Lock_time: 0.203012 Rows_sent:
1 Rows_examined: 30000 Logical_Reads: 30145 Physical_Reads: 50
use tpcc;
SET timestamp=1324974594;
SELECT COUNT(1) FROM history;
本书的一些地方会使用InnoSQL的IO Statistics功能,并结合原MySQL的EXPLAIN命令,以此来帮助用户更好地进行SQL编程。
MySQL 发展史
http://blog.csdn.net/tianlesoftware/article/details/6999245
一.MySQL 标志说明
MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
二.MySQL 发展
MySQL的历史最早可以追溯到1979年,有一个人叫Monty Widenius, 为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具,可以在4M主频和16KB内在的计算机上运行。过了不久,又将此工具,使用C语言重写,移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎。这个工具叫做Unireg。
1985 年,瑞典的几位志同道合小伙子(以David Axmark 为首) 成立了一家公司,这就是MySQL AB 的前身。这个公司最初并不是为了开发数据库产品,而是在实现他们想法的过程中,需要一个数据库。他们希望能够使用开源的产品。但在当时并没有一个合适的选择,没办法,那就自己开发吧。
在最初,他们只是自己设计了一个利用索引顺序存取数据的方法,也就是I S A M(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明确地表现出迈向高性能数据库的发展步伐。
2008年1月16号 MySQL被Sun公司收购。
2009年04月20日Oracle收购Sun 公司,MySQL 转入Oracle 门下。
2010年04月22 发布MySQL 5.5, MySQLcluster 7.1.
现在官网可以下到的MySQL 版本是:5.5.18. Oracle 对MySQL版本重新进行了划分,分成了社区版和企业版,企业版是需要收费的,当然收费的就会提供更多的功能。
http://blog.csdn.net/tianlesoftware/article/details/6723117
Community Server可以从mysql 的官网直接下载,但是MySQL 不提供技术支持,在5.5 版本里多了如下功能:
1. 默认存储引擎更改为InnoDB
2. 多核性能提升
3. 复制功能(Replication)加强
4. 增强表分区功能
1) 非整数列分区
2) 多列分区:
3) 可用性增强:
4) 更多微调功能:
5. Insert Buffering
6. Support for Native AIO on Linux
在MySQL Enterprise Edition的收费版本里,出了Community Server 版本里的新功能之外,还有包含一下功能和组件:
MySQL Database
MySQL EnterpriseBackup
MySQL EnterpriseMonitor
MySQL WorkbenchStandard Edition