【MySQL 8.x】重磅!MySQL 8.1.0 已来!有彩蛋~

【MySQL 8.x】重磅!MySQL 8.1.0 已来!有彩蛋~

ShawnYan Lv.6

🆙 MySQL 8.1.0 社区版发布

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

1.png

📢 发版模型

LTS 版本将遵循 Oracle Lifetime Support Policy,其中包括 5 年首要支持和 3 年扩展支持。 创新版本将被支持,直到下一个主要和次要版本发布。

MySQL 产品组合中的大多数产品都将具有创新和 LTS 版本:

  • MySQL Server、MySQL Shell、MySQL Router、MySQL NDB Cluster 将发布创新版和 LTS 版。
  • MySQL Operator for Kubernetes、InnoDB ReplicaSet、Cluster 和 ClusterSet 将发布创新和 LTS 版本。
  • MySQL 连接器将使用最新版本,但将被视为普遍可用 (GA),并将与所有受支持的 MySQL 服务器版本保持兼容。
  • MySQL Workbench 将保留在 8.0.x 上并普遍可用 (GA),并将与所有受支持的 MySQL Server 版本保持兼容。
2.png

大约每 2 年,一个次要版本将被指定为长期支持版本 (LTS)。 该版本将提供 5 年优先支持和 3 年扩展支持,与之前支持的版本相同。 这与 MySQL 5.7 及之前的版本类似。

LTS 也将是主要版本的最后一个版本。 下一个(创新)版本将增加主版本号。 例如,如果 MySQL 8.4.0 是 8.x LTS 版本,那么 MySQL 9.0 将是下一个创新版本。

🥳 MySQL 8.1 新增特性

捕获 EXPLAIN FORMAT=JSON 输出

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

1
2
3
4
5
6
7
8
9
10
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)
3.png

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

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

客户端保留注释

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

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

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

4.png

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() 函数等待所有事务完成,包括所有当前正在进行中的 DML 操作。在这个发布的版本中,也会等待所有正在进行的 DDL 语句完成,比如 ALTER TABLE。 (Bug#34664197, WL#15497)

MySQL 版本号

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

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

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

5.png

错误日志加强

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

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

6.png

新增 SHOW PARSE_TREE 语句

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

示例:

1
2
3
4
5
6
7
8
9
10
11
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,其值是该组成员被认为是可疑的次数。

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

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

新增 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)

8.png

🤠 Telemetry 遥测

MySQL 企业版现在支持使用 component_telemetry 组件以 OpenTelemetry 格式收集服务器跟踪数据。然后,这些数据被转发到一个可配置的端点,在那里它可以被任何与 OpenTelemetry 兼容的系统使用。(WL #15198 )

遥测跟踪仅支持 Linux 平台上的 MySQL 企业版。

⤵️ mysqlpump

由于 MySQL 提供了具有相同或额外功能的 mysqldump 和 MySQL Shell 等其他方法来执行数据库转储和备份,mysqlpump 已经变得多余,现在已弃用。现在调用这个程序会产生一个警告。您应该记住,mysqlpump 可能会在 MySQL 的未来版本中被删除。(WL#15652 )

9.png

⤵️ binlog_format

binlog_format 服务器系统变量现已弃用,并且可能会在 MySQL 的未来版本中删除。 与此变量关联的功能(更改二进制日志记录格式)也已被弃用。

此更改的含义是,当删除 binlog_format 时,MySQL 服务器将仅支持基于行的二进制日志记录(MySQL 8.0 中的默认设置)。 因此,新安装应仅使用基于行 (Row) 的二进制日志记录,而使用基于语句或混合日志记录格式的现有安装应迁移到基于行的格式。

系统变量 log_bin_trust_function_creators 和 log_statements_unsafe_for_binlog 仅在基于语句的日志记录上下文中有用,现在也已弃用,因此也将在 MySQL 的未来版本中删除。

现在设置或选择刚才提到的任何变量的值都会引发警告。 (WL#13966,WL#15669)

⤵️ mysql_native_password

mysql_native_password 身份验证插件现已弃用,并可能在 MySQL 的未来版本中删除。 如果帐户尝试使用 mysql_native_password 作为身份验证方法进行身份验证,CREATE USERALTER USERSET PASSWORD 操作现在会在服务器错误日志中插入弃用警告。 (Bug#35336317)

1
2
2023-07-18T15:59:24.245820Z 11 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: 
''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
10.png

🚀 MySQL 8.1.0 下载 & 安装 & 体验

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

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

11.png

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

12.png

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

13.png

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

14.png

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

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

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

16.png

REF

logo.jpg
  • Title: 【MySQL 8.x】重磅!MySQL 8.1.0 已来!有彩蛋~
  • Author: ShawnYan
  • Created at: 2023-07-18 21:35:47
  • Updated at: 2023-07-18 21:35:47
  • Link: https://shawnyan.cn/2023/mysql/mysql-8.1.0-release/
  • License: This work is licensed under CC BY-NC-SA 4.0.
if (hexo-config('comment.enable') == true && hexo-config('comment.system') != "") { if (hexo-config('comment.system') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.system') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.system') == "twikoo") { @require "./twikoo.styl" } } .comments-container display inline-block margin-top $spacing-unit width 100% #comment-anchor width 100% height 10px .comment-area-title width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family 'Consolas', '宋体', sans-serif font-weight bold i color var(--default-text-color) +redefine-tablet() margin 5px 0 font-size 1.2rem