版本

1.0

1996.5,四人使用

3.11.1

1996.10,no 2.x,Solaris binary

1996.11 linux

3.23

MySQL AB公司,集成 Berkeley DB 存储引擎源码改造中,奠定可插拔式存储引擎架构基础

4.0

InnoDB,支持事务,行锁

5.0

游标,存储过程,触发器,视图,XA 事务

5.1

定时器(Event scheduler),分区,行复制

5.5

​ 2010,Oracle收购后的版本

  • 默认 InnoDB
  • Metadata Locking (MDL) Framework 元数据锁,替换 LOCK_open mutex (lock)
  • Multi Rollback Segments
  • Native AIO on Linux
  • Insert/Delete/Purge Buffering 减少额外IO 操作
  • InnoDB 数据压缩
  • adaptive flush checkpoint
  • InnoDB 支持索引的快速创建,表压缩,I/O 子系统的性能提升,PURGE 操作从主线程中剥离出来,Buffer Pool 可多个 Instances
  • 半同步复制
  • utf8mb4 支持存 emoji
  • 分区表新增分区类型:RANGE COLUMNS 和 LIST COLUMNS
  • 企业版引入线程池
  • 可配置 IO 读写线程(innodb_read_io_threads,innodb_write_io_threads)。此前为 1 且不可配置
  • innodb_io_capacity控制脏页刷新数

5.6

2013

  • GTID/无损/延迟/库级并行复制
  • mysqlbinlog 可远程备份 binlog
  • time/datetime/timestamp 支持秒,datetime 8 字节减少到 5 字节
  • Online DDL,alter 不再阻塞 DML
  • 可传输表空间
  • 统计信息的持久化。避免主从之间或数据库重启后,同一个 SQL 的执行计划有差异
  • 全文索引
  • InnoDB Memcached plugin
  • EXPLAIN 可查 DELETE,INSERT,REPLACE,UPDATE
  • 分区表增强,最大 8192,分区和非分区表数据交换,操作时显式指定分区
  • Redo Log 限制从4G 扩展至 512G
  • Undo Log 可独立表空间(随机 IO更适合放到 SSD 中)。仍不支持空间自动回收
  • 可 dump 和 load Buffer pool 的状态,提升重启预热时间
  • InnoDB 拆分 kernel mutex,独立刷新线程,可多个 purge 线程
  • 优化器, ICP,MRR,BKA 等特性,子查询优化

5.7

2015

  • enhanced multi-threaded slave(简称MTS)
  • Group Replication
  • InnoDB Cluster
  • 多源复制
  • 增强半同步(AFTER_SYNC)
  • 基于 WRITESET 的并行复制
  • 在线开启 GTID 复制
  • 在线设置复制过滤规则
  • 在线修改 Buffer pool 大小
  • 同一长度编码字节内,修改 VARCHAR 大小只需修改表的元数据,无需创建临时表
  • 可设置 NUMA 架构的内存分配策略(innodb_numa_interleave)
  • 透明页压缩(Transparent Page Compression)
  • UNDO 表空间自动回收
  • 查询优化器的重构和增强
  • 可查看当前正在执行的 SQL 的执行计划(EXPLAIN FOR CONNECTION)
  • 查询改写插件(Query Rewrite Plugin),可在服务端对查询进行改写
  • EXPLAIN FORMAT=JSON 显示成本信息,可直观比较执行计划优劣
  • 虚拟列,类似 Oracle 中的函数索引
  • 新实例不默认test 库及匿名用户
  • ALTER USER 命令,修密,密码的过期策略,锁定用户等
  • mysql.user 密码字段从 password 改为 authentication_string
  • 表空间加密
  • Performance Schema 内存使用减少
  • Performance Schema 引入众多 instrumentation(Memory usage / Metadata Locking /stage Progress 看 Online DDL进度)
  • 同一触发事件(INSERT,DELETE,UPDATE),同一触发时间(BEFORE,AFTER),允许创建多个触发器
  • InnoDB 原生支持分区表,之前通过 ha_partition 接口实现
  • 分区表支持可传输表空间特性
  • SYS schema
  • 原生JSON
  • 逻辑备份 mysqlpump 支持表级多线程备份
  • 新客户端工具 mysqlsh,支持 JS, Python ,SQL。两种 API:X Dev,Admin,前者可将 MySQL 作为文档型数据库进行操作,后者用于管理 InnoDB Cluster
  • mysql_install_db 被 mysqld –initialize 代替进行实例的初始化
  • 原生支持 systemd
  • super_read_only 选项
  • 可设置 SELECT 操作的超时时长(max_execution_time)
  • SHUTDOWN 命令关闭 MySQL 实例
  • innodb_deadlock_detect 选项,高并发场景可关闭死锁检测
  • Optimizer Hints语句级控制优化器的行为,如是否开启 ICP,MRR 等,之前只有 Index Hints
  • GIS增强,使用 Boost.Geometry 替代之前的 GIS 算法,InnoDB 开始支持空间索引

8.0

2018

  • 原生 InnoDB 数据字典 mysql.ibd 不再置于 mysql 目录下
  • Atomic DDL
  • 重构了 INFORMATION_SCHEMA,其中,部分表已重构为基于数据字典的视图,在此之前,其为临时表。
  • PERFORMANCE_SCHEMA 查询性能提升,其已内置多个索引
  • 不可见索引
  • 降序索引
  • 直方图
  • 公用表表达式(Common table expressions)
  • 窗口函数(Window functions)
  • 角色(Role)
  • 资源组(Resource Groups),目前能被管理的资源只有 CPU
  • innodb_dedicated_server 选项,可基于内存动态设置 innodb_buffer_pool_size,innodb_log_file_size 和 innodb_flush_method
  • 快速加列(ALGORITHM=INSTANT)
  • JSON 字段部分更新(JSON Partial Updates)
  • 自增主键持久化
  • 可持久化全局变量(SET PERSIST)
  • 默认字符集由 latin1 修改为 utf8mb4
  • 默认开启 UNDO 表空间,且支持在线调整数量(innodb_undo_tablespaces)。5.7默认不开启,若要开启,只能初始化时设置
  • 备份锁
  • Redo Log 允许多个用户线程并发写入 log buffer,可动态修改 innodb_log_buffer_size
  • 默认认证插件mysql_native_password 更改为 caching_sha2_password
  • 默认内存临时表MEMORY 引擎更改为 TempTable 引擎,后者支持以变长方式存储 VARCHAR,VARBINARY 等变长字段。8.0.13 支持 BLOB 字段
  • Grant 不再隐式创建用户
  • SELECT … FOR SHARE 和 SELECT … FOR UPDATE 引入 NOWAIT 和 SKIP LOCKED 选项,解决电商场景热点行问题
  • 正则表达式增强,REGEXP_INSTR(),REGEXP_LIKE(),REGEXP_REPLACE(),REGEXP_SUBSTR()
  • 查询优化器会考虑数据是否在 Buffer Pool 中。之前假设数据都在磁盘中
  • ha_partition 接口从代码层移除,分区表只能用 InnoDB
  • 更多细粒度权限替代 SUPER 权限,现在授予 SUPER 权限提示 warning
  • GROUP BY 语句不再隐式排序
  • 表空间加密可对 Redo Log 和 Undo Log 进行加密
  • information_schema 中 innodb_locks 和 innodb_lock_waits 表移除,performance_schema 中的 data_locks 和 data_lock_waits 表取代
  • performance_schema.variables_info 记录参数来源及修改情况
  • 客户端报错信息统计(performance_schema.events_errors_summary_xxx)
  • 查询响应时间分布(call sys.ps_statement_avg_latency_histogram())
  • 支持直接修改列名(ALTER TABLE … RENAME COLUMN old_name TO new_name)
  • 用户密码可设置重试策略(Reuse Policy)
  • 移除PASSWORD()函数。无法通过“SET PASSWORD … = PASSWORD(‘auth_string’) ”命令修改用户密码
  • 代码层移除 Query Cache 模块
  • BLOB, TEXT, GEOMETRY 和 JSON 字段允许设置默认值
  • RESTART 命令重启 MySQL 实例