MySQL 8.0.23 主要更新一览(新特征解读)

 更新时间:2021年1月25日 10:00  点击:2318

作者:管长龙
爱可生交付服务部 DBA,主要负责 MySQL 及 Redis 的日常问题处理,参与公司数据库培训的教研授课及开源社区的运营工作。
本文来源:原创投稿
* 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

上篇文章给大家介绍了MySQL8.0.23安装超详细教程 ,感兴趣的朋友点击查看。

MySQL 8.0.23 已于作日发布,目前发布频率稳定保持 3 个月一次。本次发布是维护版本,除了修复一些 Bug,此版本还增添了一些新功能。

一、不可见列

列可以定义为不可见,例如:

# 创建表时,可使其不可见(ALTER TABLE 也支持)
mysql> CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE);
mysql> INSERT INTO t1 (col1, col2) VALUES(1, 2), (3, 4);

# SQL 语句通过显式引用它来使用不可见列
mysql> SELECT * FROM t1;
+------+
| col1 |
+------+
|  1 |
|  3 |
+------+

# 如果未引用不可见的列,则该列将不会出现在结果中
mysql> SELECT col1, col2 FROM t1;
+------+------+
| col1 | col2 |
+------+------+
|  1 |  2 |
|  3 |  4 |
+------+------+

https://dev.mysql.com/doc/refman/8.0/en/invisible-columns.html

二、查询属性

允许应用程序为其查询设置每个查询元数据。

mysql> query_attributes n1 v1 n2 v2;
mysql> SELECT
     mysql_query_attribute_string('n1') AS 'attr 1',
     mysql_query_attribute_string('n2') AS 'attr 2',
     mysql_query_attribute_string('n3') AS 'attr 3';
+--------+--------+--------+
| attr 1 | attr 2 | attr 3 |
+--------+--------+--------+
| v1   | v2   | NULL  |
+--------+--------+--------+

https://dev.mysql.com/doc/refman/8.0/en/query-attribute-udfs.html#udf_mysql-query-attribute-string

三、安全

Doublewrite 文件页加密

InnoDB 自动加密属于加密表空间的 Doublewrite 文件页面,无需采取任何措施。使用相关表空间的加密密钥对 Doublewrite 文件页进行加密。同一表空间中被写入数据的加密页面也会被写入 Doublewrite 文件。属于未加密表空间的 Doublewrite 文件页面保持未加密状态。在恢复过程中,加密的 Doublewrite 文件页面是未加密状态并检查是否损坏。

https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html

提高账户确定性

为了让 TCP 连接匹配账户更具确定性,在匹配主机名指定的账户前,匹配账户的主机名部分将以以下顺序检查使用主机 IP 地址指定账户。

# 指定 IP 地址的帐户
mysql> CREATE USER 'user_name'@'127.0.0.1';
mysql> CREATE USER 'user_name'@'198.51.100.44';

# 使用 CIDR 表示法指定为 IP 地址的帐户
mysql> CREATE USER 'user_name'@'192.0.2.21/8';
mysql> CREATE USER 'user_name'@'198.51.100.44/16';

# 使用带子网掩码格式的指定为 IP 地址的账户
mysql> CREATE USER 'user_name'@'192.0.2.0/255.255.255.0';
mysql> CREATE USER 'user_name'@'198.51.0.0/255.255.0.0';

https://dev.mysql.com/doc/refman/8.0/en/connection-access.html

更精准的 FLUSH 权限

授予 RELOAD 权限的用户可以执行各种操作。在某些情况下,为了使 DBA 避免授予 RELOAD 并使用户权限更接近允许的操作,已对 FLUSH 操作的更精细的特权控制,以使客户可以执行 FLUSH OPTIMIZER_COSTS,FLUSH STATUS,FLUSH USER_RESOURCES 和 FLUSH TABLES 语句,无需 RELOAD 权限。

https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_reload

四、InnoDB

优化 TRUNCATE / DROP

当用户对 InnoDB 表空间 TRUNCATE 或 DROP 操作:

  • 对有庞大缓冲池(>32GB)实例上的大表删除
  • 对具有自适应哈希索引引用大量页面的表空间
  • TRUNCATE 临时表空间

以上情况,MySQL 现在将其标记为已删除,然后从缓冲池懒惰地释放属于已删除表空间的所有页面,或者像释放页面一样重用它们。

新增表空间 AUTOEXTEND_SIZE 属性

InnoDB 常规表 CREATE / ALTER TABLESPACE 子句和独立表空间的 CREATE / ALTER TABLE 子句新增自动扩展属性。原表空间的增长大小已在 InnoDB 内部硬编码为 1MB [默认](page_size * 一个范围内的页面数)。设置后,表空间的增长大小可以由用户决定。

# 创建或修改表时指定扩展空间大小
mysql> CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
mysql> ALTER TABLE t1 AUTOEXTEND_SIZE = 4M;

# 查询该属性值
mysql> SELECT NAME, AUTOEXTEND_SIZE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES 
    WHERE NAME LIKE 'test/t1';
+---------+-----------------+
| NAME  | AUTOEXTEND_SIZE |
+---------+-----------------+
| test/t1 |     4194304 |
+---------+-----------------+

https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-autoextend-size.html

新增 temptable_max_mmap 变量

新变量定义了 TempTable 存储引擎在开始将内部临时表数据存储到 InnoDB 磁盘内部临时表之前,被允许从内存映射文件分配的最大内存量。temptable_max_mmap = 0 设置将禁用从内存映射文件的分配。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_temptable_max_mmap

五、复制

术语替换

不推荐使用 CHANGE MASTER TO 语句,改用别名 CHANGE REPLICATION SOURCE TO。该语句的参数还具有别名,该别名用术语 SOURCE 代替术语 MASTER。例如,现在可以将 MASTER_HOST 和 MASTER_PORT 输入为 SOURCE_HOST 和 SOURCE_PORT。START REPLICA | SLAVE 语句的参数 MASTER_LOG_POS 和 MASTER_LOG_FILE 现在具有别名 SOURCE_LOG_POS 和 SOURCE_LOG_FILE。语句的工作方式与以前相同,只是每个语句使用的术语已更改。如果使用旧版本,则会发出弃用警告。

直接从禁用 GTID 的主机复制到启用 GTID 的从机

CHANGE REPLICATION SOURCE TO 语句新增选项: ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = [OFF,LOCAL,<UUID>]

允许数据在非 GTID 实例和 GTID 实例之间传输。

https://dev.mysql.com/doc/refman/8.0/en/replication-gtids-assign-anon.html

在 MTS 死锁检测基础结构中包含 MDL 和 ACL 锁

将提供多线程的 REPLICA 所需的线程序列化基础结构与 MDL 和 ACL 访问序列化基础结构集成在一起,该多线程 REPLICA 与 SOURCE 保持相同的提交顺序。其动机是能够在 REPLICA 主动处理变更流时在 REPLICA 上执行任何客户端语句。此类语句可能会创建死锁,必须对其进行检测,并最终将其破坏以继续执行。

组复制

异步复制通道的自动连接故障转移,将确保接收方的发送方列表与组复制成员身份更改同步。

六、X 协议

经典的 MySQL 协议,如果 SQL 查询使用元数据锁定或睡眠功能,则将定期检查与服务器的连接以验证其是否仍然有效。 如果不是,则可以停止查询,以便它不会继续消耗资源。以前,X 协议不执行这些检查,并假定连接仍然有效。现在已为 X 协议添加了检查。

从 MySQL 8.0.23 开始,服务器将通知所有客户端有关它是刚刚关闭连接还是自行关闭的信息。客户端可以使用此信息来决定重新连接是否有意义,然后重试。

七、其他

优化哈希联接的哈希表的实现。目的是提高性能,使用更少的内存并改善内存控制。

用标准 C++11 替换了部分旧的 InnoDB 代码。加强代码中使用原子性的规则和语义,从而使代码更符合标准。

八、弃用和移除

弃用 relay_log_info_repository 和 master_info_repository 。当用户设置或读取 relay_log_info_repository 或 master_info_repository 变量的值时,将出现弃用警告。未来,用于存储复制配置和元数据的唯一选项将在事务系统表中。

不赞成使用 FLUSH HOSTS 语句,而建议使用 TRUNCATE performance_schema.host_cache,并将在以后的 MySQL 版本中删除。

文章参考

MySQL 8.0.23 Release Notes:

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-23.html

The MySQL 8.0.23 Maintenance Release is Generally Available

https://mysqlserverteam.com/the-mysql-8-0-23-maintenance-release-is-generally-available/

到此这篇关于MySQL 8.0.23 主要更新一览(新特征解读)的文章就介绍到这了,更多相关MySQL 8.0.23 更新内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • Centos5.5中安装Mysql5.5过程分享

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [root@local ~]# wget http://www.cm...2015-03-15
  • 用VirtualBox构建MySQL测试环境

    宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
  • 忘记MYSQL密码的6种常用解决方法总结

    首先要声明一点,大部分情况下,修改MySQL密码是需要有mysql里的root权限的...2013-09-11
  • MySQL数据库备份还原方法

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
  • Navicat for MySQL 11注册码\激活码汇总

    Navicat for MySQL注册码用来激活 Navicat for MySQL 软件,只要拥有 Navicat 注册码就能激活相应的 Navicat 产品。这篇文章主要介绍了Navicat for MySQL 11注册码\激活码汇总,需要的朋友可以参考下...2020-11-23
  • Mysql命令大全(详细篇)

    一、连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql/bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密...2015-11-08
  • 基于PostgreSQL和mysql数据类型对比兼容

    这篇文章主要介绍了基于PostgreSQL和mysql数据类型对比兼容,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-25
  • Mysql中 show table status 获取表信息的方法

    这篇文章主要介绍了Mysql中 show table status 获取表信息的方法的相关资料,需要的朋友可以参考下...2016-03-12
  • mysql IS NULL使用索引案例讲解

    这篇文章主要介绍了mysql IS NULL使用索引案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-14
  • 20分钟MySQL基础入门

    这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-12-02
  • RHEL6.5编译安装MySQL5.6.26教程

    一、准备编译环境,安装所需依赖包yum groupinstall 'Development' -y yum install openssl openssl-devel zlib zlib-devel -y yum install readline-devel pcre-devel ncurses-devel bison-devel cmake -y二、编译安...2015-10-21
  • mongodb与mysql命令详细对比

    传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关...2013-09-11
  • MySQL远程连接不上的解决方法

    这篇文章主要为大家详细介绍了MySQL远程连接不上的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-26
  • Mybatis Plus 字段为空值时执行更新方法未更新解决方案

    这篇文章主要介绍了Mybatis Plus 字段为空值时执行更新方法未更新解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-03