🆙 MySQL 8.1.0 社区版发布

今天(2023-07-18),MySQL 8.1.0 发布,这是 MySQL 变更发版模型后的第一个创新版本 (Innovation Release) 。

重磅!MySQL 8.1.0 已来!_服务器

以下是此版本的重要特性更新。

🥳 MySQL 8.1 新增特性

捕获 EXPLAIN FORMAT=JSON 输出。

这个版本扩展了 EXPLAIN FORMAT=JSONINTO 选项,它提供了在一个用户变量中存储 JSON 格式的 EXPLAIN 输出的能力,在这个用户变量中,它可以使用 MySQL JSON 函数来工作,像这样:

mysql> EXPLAIN FORMAT=JSON INTO @myex SELECT name FROM a WHERE id = 2;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT JSON_EXTRACT(@myex, "$.query_block.table.key");
+------------------------------------------------+
| JSON_EXTRACT(@myex, "$.query_block.table.key") |
+------------------------------------------------+
| "PRIMARY"                                      |
+------------------------------------------------+
1 row in set (0.01 sec)

重磅!MySQL 8.1.0 已来!_mysql_02

这个选项仅在 EXPLAIN 语句也包含 FORMAT=JSON; 时才能试用,否则,将导致语法错误。这不受 explain_format 的值影响。

INTO 可以用于任何执行计划语句,但 EXPLAIN FOR CONNECTION 除外。它不能与 EXPLAIN ANALYZE 一起使用。

客户端保留注释

之前的版本中,MySQL 客户端默认剥离注释。在 MySQL 8.1 中,默认情况已更改为保留此类注释。

mysql 客户端的 -c, --comments 参数默认为 on。

要像以前版本的 MySQL 那样执行注释剥离,需要给 MySQL 客户端传参 --skip-comments

重磅!MySQL 8.1.0 已来!_服务器_03

MySQL 复制:SOURCE_RETRY_COUNT 变更

CHANGE REPLICATION SOURCE TO 语句的 SOURCE_RETRY_COUNT 选项的默认值已更改为 10。这意味着,使用此选项的默认值和 SOURCE_CONNECT_RETRY(60) ,副本在重新连接尝试之间等待 60 秒,并在超时和故障转移之前以此比率尝试重新连接 10 分钟。

此更改也适用于已弃用的 --master-retry-count 选项的默认值。(您应该使用 SOURCE_RETRY_COUNT 替代。)

group_replication_set_as_primary() 和 DDL 语句

在选择一个新的主节点之前,group_replication_set_as_primary() 函数现在等待所有事务完成时,等待正在进行的 DDL 语句,比如 ALTER TABLE

MySQL 版本号

版本特定注释中使用的 MySQL 版本号现在支持由一个或两个数字组成的主版本,这意味着整个版本现在可以是五位数或六位数长。

版本号格式为 Mmmrr,其中 M 为主要版本号,mm 为两位数字的次要版本号,rr 为两位数字的发布号。例如:在仅由 MySQL 服务器 8.1.0 或更高版本运行的语句中,在注释中使用 80100

在 MySQL 8.1 中,版本号也可以选择由 MMmmrr 格式的六位数字组成,其中 MM 是两位数字的主版本号,MM 和 rr 分别是两位数字的副版本号和两位数字的发布号。

重磅!MySQL 8.1.0 已来!_mysql_04

错误日志加强

随着 MySQL 服务器、插件和组件的启动和关闭消息的增加,关闭过程的日志记录得到了增强。这些消息现在也被记录为关闭连接。这些附加功能应该有助于故障排除和调试问题,特别是在服务器需要很长时间才能关闭的情况下。

相关 WorkLog: WL#15369 Add progress information to the error log during shutdown

重磅!MySQL 8.1.0 已来!_MySQL_05

新增 SHOW PARSE_TREE 语句

新增 SHOW PARSE_TREE 语句,显示 SELECT 语句的 JSON 格式的解析树。此语句仅用于测试和开发,而非生产环境。它仅在调试版本中可用,或者是使用 CMake -DWITH_SHOW_PARSE_TREE 选项从源代码构建的 MySQL,在正式发布版本中并不包括或支持该语句。

示例:

mysql> SHOW PARSE_TREE SELECT * FROM t3 WHERE o_id > 2\G
*************************** 1. row ***************************
Show_parse_tree: {
  "text": "SELECT * FROM t3 WHERE o_id > 2",
  "type": "PT_select_stmt",
  "components": [
    {
      "text": "SELECT * FROM t3 WHERE o_id > 2",
      "type": "PT_query_expression",
      "components": [
...

新增 tls-certificates-enforced-validation 系统变量

新增 tls-certificates-enforced-validation 系统变量,该变量允许 DBA 在服务器启动时强制执行证书验证,或使用 ALTER INSTANCE RELOAD TLS 语句时重新加载证书。启用强制执行后,在启动时发现无效证书将停止服务器调用,防止在运行时加载无效证书,并发出警告。

此强制校验默认为禁用状态,默认值为 OFF。

组复制 (Group Replication) 增强

添加了一些特定于组复制插件的状态变量,这些变量可以改进对网络不稳定的诊断和故障排除,为每个组成员 (group member) 提供有关网络使用情况、控制消息和数据消息的统计信息。

作为这项工作的一部分,Performance Schema 的 replication_group_communication_information 表中添加了一个新列 MEMBER_FAILURE_SUSPICIONS_COUNT 。该列的内容被格式化为一个 JSON 数组,其键是组成员 ID,其值是该组成员被认为是可疑的次数。

只有当组复制插件安装之后,才能使用这张表。否则会报这张表不存在。

mysql> show create table replication_group_communication_information\G
ERROR 1146 (42S02): Table 'performance_schema.replication_group_communication_information' doesn't exist

重磅!MySQL 8.1.0 已来!_mysql_06

新增 LDAP 变量

新增服务器系统变量,以控制当 LDAP 服务器关闭或无响应时,使用 LDAP 可插入身份验证连接到 MySQL 服务器的 MySQL 帐户必须等待的时间。对于以下简单和基于 SASL 的 LDAP 身份验证变量,新的默认超时为 30 秒:

  • authentication_ldap_simple_connect_timeout
  • authentication_ldap_simple_response_timeout
  • authentication_ldap_sasl_connect_timeout
  • authentication_ldap_sasl_response_timeout

连接和响应超时只能通过 Linux 平台上的系统变量进行配置。

MySQL 8.1 废弃特性

以下功能在 MySQL 8.1 中已弃用,并且可能会在未来的系列中删除。如果显示替代方案,则应更新应用程序以使用它们。

对于使用 MySQL 8.1 中已弃用且已在更高版本 MySQL 系列中删除的功能的应用程序,从 MySQL 8.1 复制到更高系列副本时,语句可能会失败,或者可能对源和副本产生不同的影响。为了避免此类问题,应修改使用 8.1 中已弃用功能的应用程序以避免这些问题,并尽可能使用替代方案。

8.0.34 和 8.1.0 中的废弃项

MySQL 8.0 手册中记录了 8.0.34 和 8.1.0 中弃用的功能。请参阅 MySQL 8.0 相关文档

MySQL 8.1 移除特性

以下项目已过时并已在 MySQL 8.1 中删除。 如果显示替代方案,则应更新应用程序以使用它们。

对于使用 MySQL 8.1 中删除的功能的 MySQL 8.0 应用程序,从 MySQL 8.0 复制到 MySQL 8.1 副本时,语句可能会失败,或者可能对源和副本产生不同的影响。 为了避免此类问题,应修改使用 MySQL 8.1 中删除的功能的应用程序以避免这些问题,并尽可能使用替代方案。

系统变量和 NULL

不预留或不支持将 MySQL 服务器启动选项设置为 NULL (--my-option=NULL),也并不可能让服务器将其解释为 SQL 的 NULL。MySQL 8.1 明确禁止以这种方式将启动选项设置为 NULL,并拒绝尝试执行错误操作。试图在 mysql 客户端使用 SET 或类似的方法将相应的服务器系统变量设置为 NULL 也会被拒绝。

以下列表中的服务器系统变量不受刚才描述的限制:

  • admin_ssl_ca
  • admin_ssl_capath
  • admin_ssl_cert
  • admin_ssl_cipher
  • admin_tls_ciphersuites
  • admin_ssl_key
  • admin_ssl_crl
  • admin_ssl_crlpath
  • basedir
  • character_sets_dir
  • ft_stopword_file
  • group_replication_recovery_tls_ciphersuites
  • init_file
  • lc_messages_dir
  • plugin_dir
  • relay_log
  • relay_log_info_file
  • replica_load_tmpdir
  • ssl_ca
  • ssl_capath
  • ssl_cert
  • ssl_cipher
  • ssl_crl
  • ssl_crlpath
  • ssl_key
  • socket
  • tls_ciphersuites
  • tmpdir

带有美元符号开头的标识符

MySQL 8.0 中不推荐使用美元符号 ($) 作为不带引号的标识符的首字符,并且在 MySQL 8.1.0 中受到限制。使用以美元符号开头并包含一个或多个美元符号(除了第一个美元符号之外)的不带引号的标识符现在会生成语法错误。

如果以 $ 开头的不带引号的标识符不包含任何其他 $ 字符,则不受此限制的影响。

🧋 MySQL 8.1.0 其他变更

libmysqlclient.so

现在 libmysqlclient.so 共享库中添加了几个函数,使开发人员能够访问 MySQL 服务器二进制日志:mysql_binlog_open()、mysql_binlog_fetch() 和 mysql_binlog_close()。 (Bug #110658, Bug #35282154)

重磅!MySQL 8.1.0 已来!_服务器_07

🚀 MySQL 8.1.0 下载 & 安装 & 体验

官网下载渠道已开放:MySQL Community Server 8.1.0 Innovation

其中,el7 的 rpm 完整安装包约 1.0 GB。

重磅!MySQL 8.1.0 已来!_mysql_08

下载完成后,直接 yum 安装即可。

重磅!MySQL 8.1.0 已来!_mysql_09

安装过程中会替代系统自动的 mariadb lib 包。

重磅!MySQL 8.1.0 已来!_MySQL_10

安装后,已经自动安装了 systemd 文件,直接启动 mysqld 服务。

重磅!MySQL 8.1.0 已来!_服务器_11

从 mysqld 日志文件中获取初始密码,登录后修改。

mysql> alter user root@localhost identified with mysql_native_password by 'Yan@123456';
Query OK, 0 rows affected (0.00 sec)

重磅!MySQL 8.1.0 已来!_MySQL_12

再次登录 MySQL 服务器,查看当前状态信息,可以看到服务器版本号为 8.1.0 MySQL Community Server - GPL

重磅!MySQL 8.1.0 已来!_mysql_13

REF

https://dev.mysql.com/doc/refman/8.1/en/ https://dev.mysql.com/doc/refman/8.1/en/ https://dev.mysql.com/doc/relnotes/mysql/8.1/en/news-8-1-0.html