# MySQL 数据库的版本

mysql-5.0 : mysql-5.0 版本之前, myisam 默认支持的表大小为 4G 。从 mysql-5.0 以后, MyISAM 默认支持 256T 的表单数据。 myisam 只缓存索引数据。 2005 年的 5.0 版本又添加了存储过程、服务端游标、触发器、查询优化以及分布式事务功能。

MySQL5.1 : 2008 年发布的 MySQL 5.1 的版本,基本上就是一个增加了崩溃恢复功能的 MyISAM ,使用表级锁,但可以做到读写不冲突,即在进行任何类型的更新操作的同时都可以进行读操作,但多个写操作不能并发。

mysql5.5 : 201012 月发布 mysql5.5 版本默认存储引擎更改为 InnoDB 多个回滚段( Multiple Rollback Segments ), 之前的 innodb 版本最大能处理 1023 个并发处理操作,现在 mysql5.5 可以处理高达 128K 的并发事务,改善事务处理中的元数据锁定。例如,事物中一个语句需要锁一个表,会在事物结束时释放这个表,而不是像以前在语句结束时释放表。 增加了 INFORMATION_SCHEMA 表,新的表提供了与 InnoDB 压缩和事务处理锁定有关的具体信息。

# mysql5.6

20132 月发布。

  • 安全性进行了加强。用户的账号和密码进行了更强的加密算法,使用 sha256_passwordSHA-256 密码哈希的身份验证插件来进行加密。 mysql.user 表中新增了 password_expired 字段,过期后,所有连接的执行都会报出异常。

  • MySQL Server 的参数默认值进行了更改。如下图所示:

10101-MySQL5.6Server端参数修改的默认值.png

  • mysql5.6 版本中 InnoDB 可以限制大量表打开的时候内存占用过多的问题 InnoDB 性能加强。如大内存优化等 InnoDB 死锁信息可以记录到 error 日志,
    InnoDB 引擎也支持了 FULLTEXT 索引。并使用 MATCH() ... AGAINST 语法查询它们。 ALTER TABLE 在不复制表,不阻止对表的插入,更新和删除或两者都不进行的情况下,可以执行多种操作。 InnoDB 使用更快的新算法来检测 死锁

  • 分区功能

    • 分区的最大数量增加到 8192 。此数量包括表的所有分区和所有子分区。
  • 复制和日志记录

    • MySQL 现在支持使用全局事务标识符(也称为 GTID )进行基于事务的复制 。这样,当每个事务在原始服务器上提交并被任何从属服务器应用时,就可以识别和跟踪每个事务。
    • MySQL 基于行的复制从该版本开始支持行图像控制
  • 优化器增强功能

    • limit 查询进行了优化,如果 N 行元素小于排序缓冲区,那么就使用内存排序而不是合并文件。
    • 优化器可以更有效地处理 FROM 子句中的子查询 (即派生表)。FROM 子句中子查询的实现 被推迟到查询执行期间需要其内容时为止,从而提高了性能。在查询执行期间,优化器可以将索引添加到派生表中,以加快从中获取行的速度。
  • 数据类型

    • MySQL5.6 开始允许 TIMEDATETIMETIMESTAMP 值的小数秒,精度高达微秒( 6 位)。
      • 取消了每个表最多可以自动将 TIMESTAMP 列初始化或更新为当前日期和时间的限制。任何 TIMESTAMP 列定义都可以具有 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 子句的任意组合。此外,这些子句现在可以与 DATETIME 列定义一起使用。
  • 主机缓存。
    MySQL 现在提供有关客户端连接到服务器时发生错误的原因的更多信息,以及对主机缓存的改进访问,该缓存包含客户端 IP 地址和主机名信息,用于避免 DNS 查找。

# mysql5.7

  • Undo 从共享表空间 ibdata 文件中分离出来,可以在安装 MySQL 时由用户自行指定文件大小和数量。

  • 增加了 temporary 临时表空间,里面存储着临时表或临时查询结果集的数据。

  • Buffer Pool 大小可以动态修改,无需重启数据库实例,这是 DBA 的福音。

# MySQL 8.0 版本新特性如下:

  • InnoDB 表的数据字典和 Undo 都从共享表空间 ibdata 中彻底分离出来了,以前需要 ibdata 文件中数据字典与独立表空间 ibd 文件中数据字典一致才行, 8.0 版本就不需要了。

  • temporary 临时表空间也可以配置多个物理文件,而且均为 InnoDB 存储引擎并能创建索引,这样加快了处理的速度。

  • 用户可以像 Oracle 数据库那样设置一些表空间,每个表空间对应多个物理文件,每个表空间可以给多个表使用,但一个表只能存储在一个表空间中。

# 最后

期望与你一起遇见更好的自己

期望与你一起遇见更好的自己