【转帖】MySQL 8.0.32如期而至

mysql,如期而至 · 浏览次数 : 0

小编点评

**如何设置 EXPLAIN 分析结果的默认格式?** 在 MySQL 8.0.32 中,可以使用 `group_replication_consistency` 参数来设置 `after` 模式,但 `explain_format` 参数依然保持默认值。 为了设置 EXPLAIN 分析结果的默认格式,可以使用以下方法: 1. 在 `server_system_variables` 中设置 `explain_format`: ```sql `server_system_variables` ``explain_format`='JSON'` ``` 2. 在 ``explain`` 中设置 `format`: ```sql ``explain` `format='TREE'` ``` **如何设置 `group_replication_consistency` 参数?** `group_replication_consistency` 参数用于设置 `after` 模式,可以指定不同的结果格式。 默认情况下, `group_replication_consistency` 参数值为 ``after`,``auto`` 和 ``default`` 都会使用 `JSON` 格式。 **示例:** ```sql ``server_system_variables` ``explain_format`='JSON'` ```explain` `format='TREE'` ``group_replication_consistency`='after'` ``` **其他设置:** * ```explain_format`` 参数可以设置不同的格式,例如 `JSON`、`XML`、``TREE` 和 ``TEXT`。 * ```explain`` 参数可以设置 `format` 参数的值,例如 `TREE`、`JSON`、`TEXT`、``IMAGE` 或 ``VIDEO`。 * ```group_replication_consistency`` 参数可以设置不同的格式,例如 `JSON`、`XML`、``TREE` 和 ``TEXT`。

正文

MySQL 8.0版本计划

MySQL 8.0开始采用快速迭代开发模式,基本上是每隔3个月就发布一个新的小版本。去年1月18日(2022.1.18)发布MySQL 8.0.28,今年1月17日发布MySQL 8.0.32,再看看其他几个版本的时间,还真是贼守时啊。

版本发布时间上一年版本上一年发布时间
8.0.322023.1.178.0.282022.1.18
8.0.312022.10.118.0.272021.10.10
8.0.302022.7.268.0.262021.7.20
8.0.292022.4.268.0.25
2021.5.11

在这中间,出了点小意外,MySQL 8.0.29因为存在严重安全问题,刚上架没多久就被下架了,可以看下这篇文章的解读:MySQL8.0.29出现重大bug,现已下架

MySQL 8.0.32的一些变化

总的来说,8.0.32版本基本上属于修修补补状态,乏善可陈。

在这里,主要罗列我个人认为需要关注的几个要点或bug fix,想看详细变化的可以查看 MySQL 8.0.32 Release Notes, https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html。

  • 当数据表名用 "$" 开头的话,引用时必须用反引号 "`",否则会有一个WARN,例如:

  1. mysql> create table $t1(id int primary key);
  2. Query OK, 0 rows affected, 1 warning (0.02 sec)
  3. mysql> show warnings;
  4. +---------+------+-------------------------------------------------------------------------------------------------------------+
  5. | Level   | Code | Message                                                                                                     |
  6. +---------+------+-------------------------------------------------------------------------------------------------------------+
  7. | Warning | 1681 | '$ as the first character of an unquoted identifier' is deprecated and will be removed in a future release. |
  8. +---------+------+-------------------------------------------------------------------------------------------------------------+
  9. mysql> table $t1;
  10. +----+
  11. | id |
  12. +----+
  13. |  1 |
  14. |  2 |
  15. +----+
  16. 2 rows in set, 1 warning (0.00 sec)
  17. mysql> show warnings;
  18. +---------+------+-------------------------------------------------------------------------------------------------------------+
  19. | Level   | Code | Message                                                                                                     |
  20. +---------+------+-------------------------------------------------------------------------------------------------------------+
  21. | Warning | 1681 | '$ as the first character of an unquoted identifier' is deprecated and will be removed in a future release. |
  22. +---------+------+-------------------------------------------------------------------------------------------------------------+
  23. mysql> table `$t1`; -- 加上反引号 "`" 就不再报告WARN
  24. +----+
  25. | id |
  26. +----+
  27. |  1 |
  28. |  2 |
  29. +----+
  30. 2 rows in set (0.00 sec)
  • 部分客户端程序采用新的压缩参数(--compression-algorithms=zstd|zlib|uncompressed)替换旧参数(--compress),新参数中可以指定不同压缩算法或不压缩。影响的客户端程序有:mysqlpump, mysqlcheck, mysql, mysqladmin, mysqlbinlog, mysqldump, mysqlimport, mysqlshow, mysqlslap, mysql_upgrade, mysqltest,而企业版备份工具mysqlbackup暂时不受影响,还采用 --compress 参数。例如:

  1. $ /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal/bin/mysqldump --set-gtid-purged=OFF -S./mysql.sock --compress test > test.sql
  2. WARNING: --compress is deprecated and will be removed in a future version. Use --compression-algorithms instead.
  3. $ /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal/bin/mysql --compress -S./mysql.sock
  4. WARNING: --compress is deprecated and will be removed in a future version. Use --compression-algorithms instead.
  • 新增选项 explain_format 用于设置 EXPLAIN 查看执行计划时的默认输出格式,支持 JSON, TREE, TRADITIONAL(或者写成 DEFAULT 也可以);当设置为 JSON 格式时,执行 EXPLAIN ANALYZE 则会报错:

  1. mysql> set @@explain_format = json;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> explain analyze select * from t1;
  4. ERROR 1235 (42000): This version of MySQL doesn't yet support 'EXPLAIN ANALYZE with JSON format'

原来的 EXPLAIN FORMAT=? 语法仍然支持,但不支持设置为 DEFAULT,只能写成 TRADITIONAL:

  1. mysql> explain format=tree select * from t1;
  2. ...
  3. mysql> explain format=json select * from t1;
  4. ...
  5. mysql> explain format=traditional select * from t1;
  6. ...
  7. mysql> explain format=default select * from t1;
  8. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default select * from t1' at line 1
  • 在MGR中设置 group_replication_consistency = AFTER,当某个Secondary节点因为网络不稳定时,可能会触发报错 Transaction 'GTID' does not exist on Group Replication consistency manager while receiving remote transaction prepare.。这是因为事务event在 View_change_log_event 后写入导致。在8.0.32中,修复了这个问题,将事务event先于 View_change_log_event 写入,就可以避免该问题。不过要再次强调,MGR中强烈建议不要设置为 AFTER模式,具体可以参考这篇文章:为什么MGR一致性模式不推荐AFTER

  • 当从MySQL 5.7升级到8.0时,如果某个库中有大量的表,内存可能会消耗过多内存。这是因为在升级时,一次性读取所有表并执行 CHECK TABLE .. FOR UPGRADE。在8.0.32中,调整为逐个表检查是否可升级,就可以避免这个问题了。

有些bug fix的描述信息比较少,或者指向内部bug id无法看到细节,这里就不再罗列了。

延伸阅读

  • MySQL 8.0.32 GA

  • Changes in MySQL 8.0.32, https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html

  • Server System Variables - explain_format, https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_explain_format

  • EXPLAIN Statement, https://dev.mysql.com/doc/refman/8.0/en/explain.html#explain-execution-plan

Enjoy MySQL :)


《深入浅出MGR》视频课程

戳此小程序即可直达B站

https://www.bilibili.com/medialist/play/1363850082?business=space_collection&business_id=343928&desc=0


文章推荐:


想看更多技术好文,点个“在看”吧!

文章知识点与官方知识档案匹配,可进一步学习相关知识

与【转帖】MySQL 8.0.32如期而至相似的内容:

【转帖】MySQL 8.0.32如期而至

MySQL 8.0版本计划 MySQL 8.0开始采用快速迭代开发模式,基本上是每隔3个月就发布一个新的小版本。去年1月18日(2022.1.18)发布MySQL 8.0.28,今年1月17日发布MySQL 8.0.32,再看看其他几个版本的时间,还真是贼守时啊。 版本发布时间上一年版本上一年发布时

[转帖]MySQL 8.0: When to use utf8mb3 over utf8mb4?

https://dev.mysql.com/blog-archive/mysql-8-0-when-to-use-utf8mb3-over-utf8mb4/ MySQL 8.0: When to use utf8mb3 over utf8mb4? Posted on May 19, 2017 by 

[转帖]MySQL 8.0.19 instant add column,亿级数据秒速增加字段

一、MySQL DDL 的方法 MySQL 在大型表上的 DDL 会带来耗时较久、负载较高、额外空间占用、MDL、主从同步延时等情况。需要特别引起重视,而MySQL 的 DDL 有很多种方法。 MySQL 本身自带三种方法,分别是:copy、inplace、instant。 copy 算法为最古老的

[转帖]MySQL 8.0 Instant Add Column功能解析

https://zhuanlan.zhihu.com/p/408702204 概述 DDL(Data Definition Language)是数据库内部的对象进行创建、删除、修改的操作语言,主要包括:加减列、更改列类型、加减索引等类型。数据库的模式(schema)会随着业务的发展不断变化,如果没有

[转帖]MySQL 8.0新特性和性能数据

https://plantegg.github.io/2022/07/03/MySQL8.0%E7%9A%84%E4%B8%80%E4%BA%9B%E6%95%B0%E6%8D%AE/ MySQL 8.0带来了很多新特性 针对性能方面介绍全在这个PPT( http://dimitrik.free.f

【转帖】MySQL 8.0 hash join有重大缺陷?

我并不这么看。 友情提醒:本文建议在PC端阅读。 徐春阳老师发文爆MySQL 8.0 hash join有重大缺陷。 文章核心观点如下:多表(比如3个个表)join时,只会简单的把表数据量小的放在前面作为驱动表,大表放在最后面,从而导致可能产生极大结果集的笛卡尔积,甚至耗尽CPU和磁盘空间。 就此现

[转帖]【MySQL】MySQL 8.0 redo log写入性能问题分析

http://kernelmaker.github.io/MySQL_8_core 最近对比了MySQL 5.6和8.0在8核环境下oltp_write_only的性能,发现8.0写入性能(QPS 6-7万)反而低于5.6版本的(QPS 14万),所以进一步测试分析了下redo log这里可能导致性

[转帖]MySQL Performance : 8.0 and UTF8 impact

http://dimitrik.free.fr/blog/posts/mysql-performance-80-and-utf8-impact.html 2018-04-26 00:58 | MySQL, Performance, UTF8 by Dimitri The world is movin

[转帖]第一章 MySQL 8.0 介绍及安装配置

第一章 MySQL 8.0 介绍及安装配置 https://www.jianshu.com/p/d190c6b3520d 本课程,适合具备一定Linux运维或者开发基础的朋友,课程定级中、高级DBA。只要掌握80%,轻松助力薪资15k-25K。课程内容均来自与MySQL官网+MySQL源码。配套精品

[转帖]【MySQL 8】MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了

https://www.cnblogs.com/paul8339/p/17026571.html 阅读目录 账户与安全 索引增强 原子DDL操作 通用表达式(CTE) 其他 MySQL 8新特性选择MySQL 8的背景:MySQL 5.6已经停止版本更新了,对于 MySQL 5.7 版本,其将于 2