MySQL 8.0.16 稳定版(GA)已于上个月发布,距推出 8.0.15 仅过去了两个月。继续看看 MySQL 8.0.16 有哪些新特性。

  账号管理

  具有 DROP ROLE 权限的用户只能删除被锁定的账户,而不能删除未锁定的账号。

  引入 System users 概念。具有 SYSTEM_USER 权限的用户,区别于普通用户(没有 SYSTEM_USER 权限的用户)。普通用户只能维护普通用户的账号,不能维护 System users 的账号。

  之前的版本中,赋权限的时候没有方法排除指定的 schema 的访问权限,比如赋予用户除了 mysql 之外的所有数据库的访问权限。新版本中可以通过开启参数 partial_revokes。来实现上述功能。

  SET PERSIST partial_revokes = ON;GRANTSELECT, INSERTON . TO u1;REVOKESELECT, INSERTON mysql.* FROM u1;

  字符集

  支持中文字符校验字符集 utf8mb4_zh_0900_as_cs。

  移除的功能特性

  在新版本中,临时表的存储引擎默认使用 innodb,故 internal_tmp_disk_storage_engine 已经被移除。

  功能改进和修改

  explain 增加 FORMAT=TREE 的选项。帮助我们理解 sql 执行计划的执行过程。

  {EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FORCONNECTION connection_id} explain_type: { FORMAT = TRADITIONAL| JSON| TREE } explainable_stmt: { SELECTstatement | DELETEstatement | INSERTstatement | REPLACEstatement | UPDATEstatement }

  增加一个 api 内部调用的接口用于监控脏页的变化

  MySQL 将执行以下场景的 where 条件做对比的步骤从执行阶段提前到优化阶段。

  1.当常量和某个字段作比较,且常量的值大于该字段类型的最大值,比如 a 是 tinyint ,

  select * from t where a<256

  会被直接转换为

  select * from t where ture;

  2.和 null 作比较也被优化。如果 a 字段是可以为 null 的, SELECT * FROM t WHERE a IS NOT NULL.

  目前还不支持 between 和 and。

  MGR 增加参数 group_replication_autorejoin_tries 控制节点加入集群的次数,超过指定次数则加入失败。默认值为0,也就是说 MRG 成员不主动尝试加入集群。 对于网络不太稳定的基础环境,启用该参数可以减少人肉运维操作,提高'幸福感'。

  之前的版本中,MGR 成员相互传递大量信息可能会导致部分节点接收失败并且从集群中移除。因为接受大量消息会导致接收消息的线程被 group communication engine (XCom, a Paxos variant) 占用很长时间,其他节点会认为该节点无法响应。8.0.16 版本通过参数 group_replication_communication_max_message_size 支持将超过指定大小消息拆分为多组消息。

  编译须知

  MySQL 8.0 对编译的工具有比较新的版本需求,比如要求

  GCC 5.3 版本

  在 EL6 and EL7 使用 devtoolset- 8 而非 devtoolset- 7

  Boost library 最低版本是 1.69 . 0