MySQL 8.0.32如期而至

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 8核16GB
简介: MySQL 8.0版本计划MySQL 8.0开始采用快速迭代开发模式,基本上是每隔3个月就发布一个新的小版本。去年1月18日(2022.1.18)发布MySQL 8.0.28,今年1月17日发布MySQL 8.0.32,再看看其他几个版本的时间,还真是贼守时啊。
版本 发布时间 上一年版本 上一年发布时间
8.0.32 2023.1.17 8.0.28 2022.1.18
8.0.31 2022.10.11 8.0.27 2021.10.10
8.0.30 2022.7.26 8.0.26 2021.7.20
8.0.29 2022.4.26 8.0.25
8.0.24
2021.5.11
2022.4.20

在这中间,出了点小意外,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,例如:
mysql> create table $t1(id int primary key);
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                     |
+---------+------+-------------------------------------------------------------------------------------------------------------+
| Warning | 1681 | '$ as the first character of an unquoted identifier' is deprecated and will be removed in a future release. |
+---------+------+-------------------------------------------------------------------------------------------------------------+
mysql> table $t1;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                     |
+---------+------+-------------------------------------------------------------------------------------------------------------+
| Warning | 1681 | '$ as the first character of an unquoted identifier' is deprecated and will be removed in a future release. |
+---------+------+-------------------------------------------------------------------------------------------------------------+
mysql> table `$t1`; -- 加上反引号 "`" 就不再报告WARN
+----+
| id |
+----+
|  1 |
|  2 |
+----+
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 参数。例如:
$ /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
WARNING: --compress is deprecated and will be removed in a future version. Use --compression-algorithms instead.
$ /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal/bin/mysql --compress -S./mysql.sock
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 则会报错:
mysql> set @@explain_format = json;
Query OK, 0 rows affected (0.00 sec)
mysql> explain analyze select * from t1;
ERROR 1235 (42000): This version of MySQL doesn't yet support 'EXPLAIN ANALYZE with JSON format'

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

mysql> explain format=tree select * from t1;
...
mysql> explain format=json select * from t1;
...
mysql> explain format=traditional select * from t1;
...
mysql> explain format=default select * from t1;
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无法看到细节,这里就不再罗列了。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
算法 C语言 C++
嵌入式PID算法理论+实践分析
嵌入式PID算法理论+实践分析
489 0
|
5月前
|
消息中间件 NoSQL Java
SpringBoot框架常见的starter你都用过哪些 ?
本节介绍常见的Spring Boot Starter,分为官方(如Web、AOP、Redis等)与第三方(如MyBatis、MyBatis Plus)两类,用于快速集成Web开发、数据库、消息队列等功能。
361 0
|
8月前
|
存储 监控 Linux
Linux: 检测磁盘坏块 你得会吧!
Linux: 检测磁盘坏块 你得会吧!
477 19
Linux: 检测磁盘坏块 你得会吧!
|
弹性计算 运维 安全
《幻兽帕鲁》游戏服务器搭建全攻略:不懂技术也能轻松上手!
随着2024年《幻兽帕鲁》和《雾锁王国》等热门游戏的火爆上线,越来越多的玩家渴望与小伙伴们共同探索游戏世界,享受团队合作的乐趣。但如何快速搭建一个稳定、流畅的游戏服务器,成为了许多玩家的难题。幸运的是,现在有一种方法(阿里云),即使你不懂技术,也能在短短一分钟内完成服务器的部署。
63627 87
|
大数据 数据处理 计算机视觉
使用LabVIEW进行大数据数组操作的优化方法
使用LabVIEW进行大数据数组操作的优化方法
442 3
|
监控 安全 数据安全/隐私保护
|
前端开发 JavaScript 编译器
Svelte框架:编译时优化的高性能前端框架
Svelte是一款由Rich Harris于2016年创建的高性能前端框架,以其编译时优化著称。它将复杂UI逻辑转化为高效的JavaScript,减少运行时开销。Svelte的核心理念是将编译时和运行时的复杂性分离,通过模板语法、组件系统、响应式系统和编译器实现高性能。关键优化策略包括声明式更新、模板内联、计算属性缓存、事件处理优化和代码分割。Svelte提供热模块替换、类型检查和丰富的生态系统,如SvelteKit。其响应式系统基于Reactive Statements,自动更新组件。
432 0
|
存储 API Android开发
Android 11 来袭,一起来看看怎么适配(一)
Android 11 来袭,一起来看看怎么适配
|
算法
基于MPPT算法的PV光伏阵列电网模型simulink仿真
基于MPPT算法的PV光伏阵列电网模型simulink仿真
433 0
基于MPPT算法的PV光伏阵列电网模型simulink仿真