首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本身进行了重构比如:hadoop1到hadoop2就是比较典型的重构,源代码的组织结构和思想发生了翻天覆地的变化,所以我们有时候并没有重视版本带来的一些问题。所以出现有些功能或者配置文件等都发生了改变,会提示某项功能不支持或者某个配置被某个项代替等诸多注意的问题。

我们通常在遇到问题的时候,第一时间就会去百度一下或者google一下,但是很多文章没有给出版本信息,导致用其他版本的问题,解决当前遇到的版本的问题。

  越来越多的企业级项目应用“见证”了MySQL数据库的飞速发展,MySQL数据库本身正在逐渐完善并走向成熟。以前会有人诟病MySQL为什么没有视图,没有存储过程,没有触发器,没有事件调度器。而现在,MySQL还没有什么呢?  我们简单来看看MySQL的发展历程。

国内的镜像地址你可以访问这里,下载相关的比较久远的版本

http://mirrors.sohu.com/mysql/       http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/
       http://mirrors.163.com/mysql/Downloads/


简单来说,MySQL数据库的发展可以概括为三个阶段:

  1、初期开源数据库阶段。

  2、Sun MySQL阶段。

  3、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数据库的基础上进行一定的修改,这是开源赋予用户的权力。
  MariaDB是由MySQL创始人之一Monty分支的一个版本
      MariaDB的官方网站为http://mariadb.org/。
      在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直到5.5版本,均依照MySQL的版本。因此,使用MariaDB5.5的人会从MySQL5.5中了解到MariaDB的所有功能。从2012年11月12日起发布的10.0.0版开始,不再依照MySQL的版号。10.0.x版以5.5版为基础,加上移植自MySQL 5.6版的功能和自行开发的新功能。
  关于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应用的数据库。
  ·专为多CPU/多核CPU服务器在高并发情况下而设计。
  ·高效的内存使用。
  ·开放源代码、开源社区,开放型设计。
  Percona Server是Percona公司分支的一个MySQL数据库版本
       官方网站为 https://www.percona.com
       https://www.percona.com/doc/percona-server/5.7/installation/yum_repo.html
        https://www.percona.com/software/mysql-database/percona-server
      该版本对高负载情况下的InnoDB存储引擎进行了一定的优化,为DBA提供一些非常有用的性能诊断工具,另外有更多的参数和命令可以用来控制服务器行为。Percona公司最大的贡献是发布了免费开源的XtraBackup工具,可实现对InnoDB存储引擎表的在线热备份操作。
 
 

mysql发展历程 各分支版本溯源的更多相关文章

  1. Linux实战教学笔记03:操作系统发展历程及系统版本选择

    标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...

  2. 3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理

    本文带你了解PowerShell发展历程,顺便整理了一点资料,方便大家查询. Windows PowerShell® 是基于任务的命令行管理程序和脚本语言,专为进行系统管理而设计. 在 .NET Fr ...

  3. unix及Linux发展历程

    unix及Linux发展历程 版权申明:本文资料为网上收集,由本人整理而成,转载请注明 一,unix诞生: Ken Thompson肯·汤普森 -------- unix之父 在1969年到1970间 ...

  4. C#与C++的发展历程第二 - C#4.0再接再厉

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 开始本系列的第二篇,这篇文章中将介绍C#4.0中一些变化,如C++有类似功 ...

  5. 不权威的国产CPU发展历程

    最近进行了一些国产化相关工作 趁着周末有时间,自己整理一下这段时间的学习内容. 毕竟不是处理器和芯片的业内人士,里面多有纰漏,请谅解. 希望可以作为入门学习的简单知识. 1.0 远古时代 unix 世 ...

  6. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  7. C#与C++的发展历程第一 - 由C#3.0起

    俗话说学以致用,本系列的出发点就在于总结C#和C++的一些新特性,并给出实例说明这些新特性的使用场景.前几篇文章将以C#的新特性为纲领,并同时介绍C++中相似的功能的新特性,最后一篇文章将总结之前几篇 ...

  8. Java的发展历程

    Java的发展历程充满了传奇色彩. 最初,Java是由Sun公司的一个研究小组开发出来的, 该小组起先的目标是想用软件实现对家用电器进行集成控制的小型控制装置. 开始,准备采用C++,但C++太复杂, ...

  9. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

随机推荐

  1. [差分数组] LeetCode789 得分最高的最小轮调

    LeetCode 得分最高的最小轮调 今天当然CV了因为今天比较忙,所以直接走算法,因为什么都不做的话并不符合社会主义核心价值观,今天小学一手查分数组. 题目:并不存在CV了还写什么题解 算法背景: ...

  2. @weakify 与 @strongify 实现原理

    为了解决 Block 造成的循环引用,iOS 开发过程中常常使用 @weakify 与 @strongify 来解决这个问题.下面就来看下 @weakify 与 @strongify 的实现原理. 准 ...

  3. 【机器学习基础】无监督学习(2)——降维之LLE和TSNE

    在上一节介绍了一种最常见的降维方法PCA,本节介绍另一种降维方法LLE,本来打算对于其他降维算法一并进行一个简介,不过既然看到这里了,就对这些算法做一个相对详细的学习吧. 0.流形学习简介 在前面PC ...

  4. ASP.NET Core 6框架揭秘实例演示[26]:跟踪应用接收的每一次请求

    很多人可能对ASP.NET Core框架自身记录的诊断日志并不关心,其实这些日志对纠错排错和性能监控提供了很有用的信息.如果需要创建一个APM(Application Performance Mana ...

  5. kubernetes集群节点多网卡,calico指定网卡

    kubernetes集群节点多网卡,calico指定网卡 1.calico如果有节点是多网卡,所以需要在配置文件中指定内网网卡 spec: containers: - env: - name: DAT ...

  6. Struts2搭建及利用OGNL表达式弹出计算器

    0x01 环境搭建 1.创建Struts2应用 创建一个动态网站项目 2.配置Tomcat启动环境 3.在WebContent目录下的WEB-INF文件夹中创建web.xml,Tomcat启动时会加载 ...

  7. linux下安装简单的文件上传与下载工具 lrzsz

    编译安装 1.从下面的网站下载 lrzsz-1.12.20.tar.gz wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 2.查看里面的I ...

  8. 火花思维java

    面试过程: 问的问题比较广,涉及java基础与互联网中间件,数据库很多知识,面试官态度非常友好,对于错的回答也做出来相应解答 面试官问的面试题: 1.redis如何保证数据一致性2.mysql的索引机 ...

  9. 为什么要使用 rabbitmq?

    (1)在分布式系统下具备异步,削峰,负载均衡等一系列高级功能; (2)拥有持久化的机制,进程消息,队列中的信息也可以保存下来. (3)实现消费者和生产者之间的解耦. (4)对于高并发场景下,利用消息队 ...

  10. spring-boot-learning-spring Security

    SpringSecurity的简单原理: 一旦启用了Spring Security,Spring IoC容器就会为你创建一个名称为springSecurityFilterChain 的Spring B ...