版本历史

版本 3.23(2001)

  • 一般认为这个版本是 MySQL 的真正“诞生”版本,并得到广泛使用;
  • MySQL 依然是一个平面文件(Flat File)上实现 SQL 查询的系统;
  • 重要改进:
    • 引入 MyISAM 代替老旧且诸多限制的 ISAM 引擎。
    • InnoDB 引擎也可以使用,但没有包含在默认的二进制发行版中,因为太新了。
      • 如果需要使用,需要手工编译
    • 引入全文索引和复制
      • 其中复制是 MySQL 成为互联网应用数据库的关键特性。

版本 4.0(2003)

  • 支持新语法,如:UNION 和多表 DELETE 语法
  • 重写复制,在备库使用了两个线程实现复制,避免之前一个线程所有复制工作的模式下任务切换导致的问题。
  • InnoDB 成为标配,包括了全部特性:行级锁、外键等。
  • 引入查询缓存(自那之后改动不大),同时支持 SSL 进行连接。

版本 4.1(2005)

  • 引入新的语法,如:子查询和 INSERT ON DUPLICATE KEY UPDATE
  • 开始支持 UTF-8 字符集;
  • 支持新的二进制协议和 prepared 语句。

版本 5.0(2006)

  • 出现一些“企业级”特性:视图、触发器、存储过程和存储函数。
  • 老的 ISAM 引擎被彻底移除,引入新的 Federated 等引擎。

版本 5.1(2008)

  • Sun 收购 MySQLLAB 的首个版本,研发时长达 5 年;
  • 引入分区、基于行的复制,以及 plugin API(包括可插拔存储引擎的 API)。
  • 移除了 BerkeyDB 引擎—— MySQL 最早的事务存储引擎。
  • 其他如 Federated 引擎被放弃。
  • 同时 Oracle 收购的 InnoDB Oy 发布了 InnoDB plugin。

版本 5.5(2010)

  • 这是 Oracle 收购 Sun 发布的首个版本;
  • 改善集中在性能、扩展性、复制、分区、对微软 Windows 系统的支持等;
  • InnoDB 成为默认的存储引擎。
  • 更多遗留特性和不建议使用的特性被移除。
  • 增加 PERFORMANCE_SCHEMA 库,包含了一些可测量性能指标的增强。
  • 增加了复制、认证和审计 API。
  • 半同步复制(semisynchronous replication)插件进入实用阶段。
  • Oracle 在 2011 年发布商用的认证插件和线程池(thread pooling)。
  • InnoDB 在架构方面也做了改进,如:多个子缓冲池(buffer pool)。

版本 5.6(需确认)

  • 首次对查询优化器进行大规模的改进,更多的插件 API(比如全文索引),复制的改进,以及 PERFORMANCE_SCHEMA 库增加更多的性能指标。
  • InnoDB 也做了大量的改进
  • MySQL 5.5 主要着重在基础部分的改进和加强,引入部分新特性;而 MySQL 5.6 则在 5.5 的基础上提升服务器的开发和性能。

版本 6.0(已取消)

  • 概念模糊,早在 5.1 版本就宣布要开发 6.0 版本;
  • 传说:6.0 版本拥有大量的新特性,包括在线备份、服务器层面对所有存储引擎的外键支持,以及子查询的改进和线程池;
  • 后版本号被取消,Sun 将其改为 5.4 版本进行开发,最后发布变成 5.5 版本。
  • 其中 6.0 的很多特性将在 5.5 和 5.6 中体现。

版本 8.0

待补充

版本总结

  • 早期版本是一个破坏性创新,有诸多限制,并且功能比较二流;但它的特性支持和低成本使用,使其快速增长为互联网杀手级应用;
  • 在 5.X 版本中引入视图和存储过程,期望成为“企业级”应用,但并不算成功;
    • MySQL 5.0 充满了 Bug,在 5.0.50 后才算稳定。
    • 这个情况在 5.1 也依然没有太多改善。
    • MySQL 5.5 算历史上质量最高的版本,Oracle 收购后帮助其在企业级应用发现发展提供更好帮助。


      版本测试

image.png
image.png

测试环境:

  • 机器:Cisco UCS C250
  • CPU:6 核,每核两线程
  • 内存:384 GB
  • 测试数据集:5.2GB
  • MySQL buffer pool 设置为 4 GB
  • 采用 Sysbench 的 read-only 只读测试进行压测,并采用 InnoDB 引擎,数据可放入内存,因此是 CPU 密集型测试
  • 每次测试持续 60 分钟,每 10 秒获取一次吞吐量结果,前面 900 秒用于预热数据,以免预热的 I/O 影响测试结果。

测试结果:

  • 第一个趋势:在采用 InnoDB Plugin 的版本,在高并发的时候性能明显更好;而旧版本在高并发确实存在问题;
  • 第二个趋势:新的版本在单线程时,性能比旧版本差。原因如下:
    • 新版本的 SQL 语法更复杂,且针对复杂查询增加很多特性和改进,对于简单的查询反而会带来更多的性能开销;
    • 而旧版本对于简单的查询反而有利。