mysql变化
ddatsh
版本
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 实例