MySQL不同版本介绍
tbghg

经常听到什么MySQL5.5-5.7、8.0,但是中间的就没咋听说过,今天来探究下这个版本到底是啥情况。

版号说明

以5.5.60这个版本的MySQL为例,说明版本号的每个数字含义(mysql-5.5.60.tar.gz)

  1. 第一个数字(5)主版本号:文件格式改动时,将作为新的版本发布
  2. 第二个数字(5)发行版本号:新增特性或者改动不兼容时,发行版本号需要更改
  3. 第三个数字(60)发行序列号:主要是小的改动,如bug的修复、函数添加或更改、配置参数的更改等

MySQL产品线

3.X至5.1.X

这是早期MySQL的版本。常见早期的版本有:4.1.7、5.0.56等。

5.4.X到5.7.X

这是为了整合MySQL AB公司社区和第三方公司开发的新存储引擎。吸收新的实现算法,更好的支持SMP架构。为提升性能做了大量代码重构。

MySQL 在2017年发布了新的版本8.0,但是在此之前的上一个版本是5.7

早在2008年,Sun收购MySQL AB以前,公司内部已经在进行着版本号6的开发工作了(5.0在2005年发布)。然而,版本6的MySQL制定的目标和计划过于激进,步子迈得有点儿大,随着收购的顺利完成,项目也被砍掉了。 至于版本号7,则是用在了MySQL Cluster上。由于新版的MySQL带来了许多的重大更新,开发者们决定是时候把版本号往前滚动一下了,于是便有了8。

同时因为7发布时间较晚,发布时已经有其他手段解决MySQL集群技术问题,所以并没有很好的推广使用。

大版本间的区别

5.5

  1. innodb 就是从 5.5 这个版本开始成为 默认的存储引擎
  2. 引入了真 UTF8 ——> utf8mb4
  3. 5.5的时候引入了MDL(meta data lock)元数据锁

MySQL5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,一般情况下使用utf8也就够了。

5.6

官方文档:What Is New in MySQL 5.6

也可以参考MySQL大版本间的区别,不再赘述了

挑几个说一下:

  • Innodbflush 刷盘操作从主线程移动到其他线程
  • Innodb可以创建 全文索引
  • 可以用 EXPLAIN 来查看 DELETEINSERTREPLACEUPDATEDML 操作的执行计划。在这之前,它只支持 SELECT 操作

5.7

同样只挑几个说一下

  • MySQL 5.7.8开始,MySQL支持原生JSON类型
  • 之前:对于触发器事件(INSERT、UPDATE、DELETE)和操作时间(BEFORE、AFTER)的组合,一个表最多只能有一个触发器,即在某个触发时间点只能有一个触发事件
    现在:允许在某个时间点,有多个触发事件
  • 由于文件系统 The Fusion-io Non-Volatile Memory (NVM)Linux 上提供了原子操作,这导致 innodbdoublewrite 变得冗余,所以在该文件系统上,会自动关闭 doublewrite
  • 支持多线程来刷新缓冲池中的脏页面

8.0

MySQL 8.0是有中文文档的:MySQL 8.0 中的新功能

挑几个重点的:

  • 索引支持降序排序
  • 支持正则表达式
  • 可以为这些类型增加默认值 BLOBTEXTGEOMETRYJSON
  • MySQL 8.0.20 开始,doublewrite 缓冲区存储在 doublewrite 文件中
  • 不再支持 查询缓存

MySQL8.0为啥删除查询缓存?

缓存的意义在于快速查询提升系统性能,可以灵活控制缓存的一致性

MySQL缓存的限制

  1. MySQL基本没有手段灵活的管理缓存失效和生效,尤其对于频繁更新的表
  2. SQL必须完全一致才会导致cache命中
  3. 为了节省内存空间,太大的result set不会被cache (小于 query\_cache\_limit)
  4. MySQL缓存在分库分表环境下是不起作用的
  5. 执行SQL里有触发器、自定义函数时,MySQL缓存也是不起作用的
  6. 在表的结构或数据发生改变时,基于该表相关cache立即全部失效

替代方案:应用层组织缓存,最简单的是使用redisehcached

参考文章

 评论
评论插件加载失败
正在加载评论插件