先看看MySQL最新的release 发布速度,基本上每三个月一个小版本。DBA同行们是否感觉到了压力?

MySQL 8.0.16 release notes_JAVA

看完上面的release notes 列表时,我的感受是

MySQL 8.0.16 release notes_JAVA_02

步入正题,我们了解一下MySQL最新版本的功能特性以及Percona 发布的备份工具的最新版本有哪些特性。


MySQL 8.0.16

账号管理

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

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

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

SET PERSIST partial_revokes = ON;

GRANT SELECT, INSERT ON . TO u1;

REVOKE SELECT, INSERT ON mysql.* FROM u1;

字符集

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

编译须知

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

GCC 版本 5.3
在 EL6 and EL7 使用 devtoolset-8而非 devtoolset-7 
Boost library 最低版本是 1.69.0

移除的功能特性

在新版本中,临时表的存储引擎默认使用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 | FOR CONNECTION connection_id}
   explain_type: {
    FORMAT = TRADITIONAL| JSON| TREE
   }
   explainable_stmt: {
    SELECT statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
  }

增加一个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 支持将超过指定大小消息拆分为多组消息。

xtrabackup

Percona XtraBackup 8.0.6 于5.9号发布。我们来看看值得关注的点有哪些?

1 Percona XtraBackup 8.0.6支持MyRocks存储引擎,值得注意的是Percona server需要是8.0.15以及以上版本。

2 增加--storage 选项,支持将备份直接备份到AWS S3存储,MIO,谷歌云存储上。

    $ xtrabackup --backup --stream=xbstream --extra-lsndir=/tmp --target-dir=/tmp | \
 xbcloud put --storage=s3 \
 --s3-endpoint='s3.amazonaws.com' \
 --s3-access-key='YOUR-ACCESSKEYID' \
 --s3-secret-key='YOUR-SECRETACCESSKEY' \
 --s3-bucket='mysql_backups'
 --parallel=10 \
 ${date -I}-full_backup

修复bug

1 my.cnf 中定义logbinindex 会导致恢复失败。

2 当备份期间修改了binlog row模式,在增量恢复准备阶段,恢复进程可能会异常退出。

3 如果在增量备份之前或者增量备份过程中创建undo 表空间,恢复的时候会失败。


MySQL 8.0.16 release notes_JAVA_03