MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端

news2025/3/15 14:40:07

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~

MySQL 8.4.0 LTS 已经发布 ,作为发版模型变更后的第一个长期支持版本,注定要承担未来生产环境的重任,那么这个版本都有哪些新特性、变更,接下来少安将带大家一起来 get 新知识点。

INFORMATION_SCHEMA 变更

表 INFORMATION_SCHEMA.TABLESPACES 从 MySQL 8.0.22 开始被废弃,现已移除。

  • 8.4.0
mysql> select version()\G
*************************** 1. row ***************************
version(): 8.4.0-ShawnYan-debug
1 row in set (0.00 sec)

mysql> desc INFORMATION_SCHEMA.TABLESPACES;
ERROR 1109 (42S02): Unknown table 'TABLESPACES' in information_schema
  • 8.3.0
mysql> select version()\G
*************************** 1. row ***************************
version(): 8.3.0
1 row in set (0.01 sec)

mysql> desc INFORMATION_SCHEMA.TABLESPACES;
+--------------------+-----------------+------+-----+---------+-------+
| Field              | Type            | Null | Key | Default | Extra |
+--------------------+-----------------+------+-----+---------+-------+
| TABLESPACE_NAME    | varchar(64)     | NO   |     |         |       |
| ENGINE             | varchar(64)     | NO   |     |         |       |
| TABLESPACE_TYPE    | varchar(64)     | YES  |     |         |       |
| LOGFILE_GROUP_NAME | varchar(64)     | YES  |     |         |       |
| EXTENT_SIZE        | bigint unsigned | YES  |     |         |       |
| AUTOEXTEND_SIZE    | bigint unsigned | YES  |     |         |       |
| MAXIMUM_SIZE       | bigint unsigned | YES  |     |         |       |
| NODEGROUP_ID       | bigint unsigned | YES  |     |         |       |
| TABLESPACE_COMMENT | varchar(2048)   | YES  |     |         |       |
+--------------------+-----------------+------+-----+---------+-------+
9 rows in set (0.20 sec)

对于 InnoDB 表,Information Schema 中的表 INNODB_TABLESPACES 和 INNODB_DATAFILES 来提供表空间元信息。

mysql> table INFORMATION_SCHEMA.INNODB_TABLESPACES;
+------------+------------------+-------+----------------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME             | FLAG  | ROW_FORMAT           | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+------------------+-------+----------------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967294 | mysql            | 18432 | Any                  |     16384 |             0 | General    |          4096 |  26214400 |       26214400 |               0 | 8.4.0          |             1 | N          | normal |
| 4294967293 | innodb_temporary |  4096 | Compact or Redundant |     16384 |             0 | System     |          4096 |  12582912 |       12582912 |               0 | 8.4.0          |             1 | N          | normal |
| 4294967279 | innodb_undo_001  |     0 | Undo                 |     16384 |             0 | Undo       |          4096 |  16777216 |       16777216 |               0 | 8.4.0          |             1 | N          | active |
| 4294967278 | innodb_undo_002  |     0 | Undo                 |     16384 |             0 | Undo       |          4096 |  16777216 |       16777216 |               0 | 8.4.0          |             1 | N          | active |
|          1 | sys/sys_config   | 16417 | Dynamic              |     16384 |             0 | Single     |          4096 |    114688 |         114688 |               0 | 8.4.0          |             1 | N          | normal |
|          2 | yandb/t          | 16417 | Dynamic              |     16384 |             0 | Single     |          4096 |    114688 |         114688 |               0 | 8.4.0          |             1 | N          | normal |
+------------+------------------+-------+----------------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
6 rows in set (0.00 sec)

mysql> table INFORMATION_SCHEMA.INNODB_DATAFILES;
+------------------------+----------------------+
| SPACE                  | PATH                 |
+------------------------+----------------------+
| 0x30                   | ibdata1              |
| 0x34323934393637323739 | ./undo_001           |
| 0x34323934393637323738 | ./undo_002           |
| 0x31                   | ./sys/sys_config.ibd |
| 0x32                   | ./yandb/t.ibd        |
+------------------------+----------------------+
5 rows in set (0.00 sec)

知识扩展

表 INNODB_TABLESPACES 和 INNODB_DATAFILES 自 MySQL 8.0.3 发生过表名变更,如果从 MySQL 5.7 升级上来,需要注意。

Old NameNew Name
INNODB_SYS_TABLESPACESINNODB_TABLESPACES
INNODB_SYS_DATAFILESINNODB_DATAFILES

权限变更

1. FLUSH_PRIVILEGES

MySQL 8.4.0 LTS 添加了特定于 FLUSH PRIVILEGES 语句的使用的权限。与现有的 RELOAD 权限不同,新的 FLUSH_PRIVILEGES 权限仅适用于 FLUSH PRIVILEGES 语句。此权限的范围是全局的,并且适用于用户和角色。

示例:

  1. 创建带有 FLUSH_PRIVILEGES 权限的用户。
mysql> create user u1;
Query OK, 0 rows affected (0.02 sec)

mysql> grant FLUSH_PRIVILEGES on *.* to u1;
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for u1;
+-------------------------------------------+
| Grants for u1@%                           |
+-------------------------------------------+
GRANT USAGE ON *.* TO `u1`@`%`            |
GRANT FLUSH_PRIVILEGES ON *.* TO `u1`@`%` |
+-------------------------------------------+
2 rows in set (0.00 sec)
  1. 使用 u1 用户连接数据库。
mysql> select current_user()\G
*************************** 1. row ***************************
current_user(): u1@%
1 row in set (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
  1. 回收权限后再次使用 u1 刷新权限,执行报错,提示需要 RELOAD 或 FLUSH_PRIVILEGES 权限。
mysql> flush privileges;
ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD or FLUSH_PRIVILEGES privilege(s) for this operation

同时,RELOAD 权限将继续提供向后兼容性; 具有此权限的用户在升级后仍然可以执行 FLUSH PRIVILEGES 语句。作为升级到 MySQL 8.4 版本的一部分,将执行检查以查看是否有任何用户具有 FLUSH_PRIVILEGES 权限; 如果没有,则具有 RELOAD 权限的用户也会自动分配新权限。

2. OPTIMIZE_LOCAL_TABLE

MySQL 8.4.0 LTS 添加了新的 OPTIMIZE_LOCAL_TABLE 权限。

用户必须具有此权限才能执行 OPTIMIZE LOCAL TABLEOPTIMIZE NO_WRITE_TO_BINLOG TABLE 语句。

从以前的版本升级时,已具有 SYSTEM_USER 权限的用户将被自动授予 OPTIMIZE_LOCAL_TABLE 权限。

mysql> show grants;
+-----------------------------------------------+
| Grants for u1@%                               |
+-----------------------------------------------+
GRANT USAGE ON *.* TO `u1`@`%`                |
GRANT OPTIMIZE_LOCAL_TABLE ON *.* TO `u1`@`%` |
GRANT REFERENCES ON `yandb`.* TO `u1`@`%`     |
+-----------------------------------------------+
3 rows in set (0.00 sec)

mysql> OPTIMIZE LOCAL TABLE t;
+---------+----------+----------+-------------------------------------------------------------------+
| Table   | Op       | Msg_type | Msg_text                                                          |
+---------+----------+----------+-------------------------------------------------------------------+
| yandb.t | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| yandb.t | optimize | status   | OK                                                                |
+---------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.20 sec)

mysql> OPTIMIZE NO_WRITE_TO_BINLOG TABLE t;
+---------+----------+----------+-------------------------------------------------------------------+
| Table   | Op       | Msg_type | Msg_text                                                          |
+---------+----------+----------+-------------------------------------------------------------------+
| yandb.t | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| yandb.t | optimize | status   | OK                                                                |
+---------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.19 sec)

关键字

从 MySQL 8.0 到 8.4,增加了几个关键字,标记为(R)的是保留关键字:

AUTO, BERNOULLI, GTIDS, LOG, MANUAL (R), PARALLEL (R), PARSE_TREE, QUALIFY (R), S3, and TABLESAMPLE (R).

在准备升级数据库版本时,需要确认库、表有无使用到保留关键字,如果有建议先改名。

  • 确认 SCHEMA 名称没有使用保留关键字
with t as ( 
select 'manual' as rk 
union select 'parallel' 
union select 'qualify' 
union select 'tablesample' 
)
select SCHEMA_NAME from information_schema.SCHEMATA
where lower(SCHEMA_NAME) in (select rk from t);

示例输出:

+-------------+
| SCHEMA_NAME |
+-------------+
| manual      |
+-------------+
1 row in set (0.00 sec)
  • 确认 TABLE 名称没有使用保留关键字
with t as ( 
select 'manual' as rk 
union select 'parallel' 
union select 'qualify' 
union select 'tablesample' 
)
select table_schema, table_name, table_type 
from information_schema.tables 
where lower(table_schema) in (select rk from t) or lower(table_name) in (select rk from t);

示例输出:

+--------------+------------+------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
+--------------+------------+------------+
| yandb        | manual     | BASE TABLE |
| yandb        | manuaL     | VIEW       |
+--------------+------------+------------+
2 rows in set (0.00 sec)

客户端

  1. mysql_upgrade 移除

在之前的文章 MySQL 升级:使用 mysql_upgrade 注意事项(再见 mysql_upgrade) 中介绍过 mysql_upgrade 的变化。

MySQL 8.4.0 移除了该客户端。

  1. mysqlpump 移除

移除了已弃用的 mysqlpump 客户端,及其关联的 lz4_decompress 和 zlib_decompress 辅助工具。

请使用 mysqldump 或 MySQL Shell 的转储程式。

  1. mysqldump 新选项

mysqldump 新增选项 --output-as-version,用于确定与复制和时间相关的语句所使用的术语级别,从而创建兼容老版本的备份。

该选项有3个可选值,SERVER,BEFORE_8_0_23,BEFORE_8_2_0,默认为 SERVER

BEFORE_8_2_0 将输出已弃用的事件 DISABLE ON SLAVE 术语

BEFORE_8_0_23 将使用已弃用的 SLAVE/CHANGE MASTER 术语来表示复制命令

  1. 客户端注释保留

这里还有一个变更点值得注意。在之前的版本中,MySQL 客户端默认剥离注释。从 MySQL 8.1 开始,默认情况已更改为保留此类注释。

更多精彩

[MySQL]

  • 再见 mysql_upgrade
  • MySQL 8.1.0 已来!
  • 从鸟山明到 MySQL 5.7 EOL
  • MySQL Server 8.3.0 重要变更解析
  • MySQL 数据库认证考试介绍(2024 版)
  • 如何选择适合的 MySQL Connector/J 版本
  • MySQL 8.4.0 LTS 发布 (MySQL 第一个长期支持版本)
  • MySQL 8.4.0 LTS 变更解析:InnoDB 参数默认值变化
  • MySQL 8.4.0 LTS 变更解析:MySQL 的复制与组复制
  • MySQL 8.4.0 LTS 变更解析:源码编译(类库变更)和密码插件

[Oracle]

  • Oracle 数据库全面升级为 23ai
  • python-oracledb 已率先支持 Oracle 23ai
  • 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
  • SOP for Oracle 23ai:Python 连接 Oracle 的两种方法

-- / END / --

foot.png

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1695158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UIKit之猜图器Demo

需求 实现猜图器Demo 功能分解: 1>下一题切换功能 2>点击图片后能放大并背景变暗(本质是透明度的变化)。再次点击则缩小,删除暗色背景。 3> 答案区按钮点击则文字消失,选择区对应文字恢复。 4> 选择区…

python爬虫登录到海康相机管理页面

简述 1.最近接到个任务是在管理页面更改相机的某个参数,下载官方的sdk貌似没有提供这个接口,所以只能自己写爬虫登录发请求了。 1.主要步骤 1.1 发送get请求获取到salt,sessionID,challenge等信息 http://admin:123456192.168.…

将 MOV 转换为 MP4 的 10 个最佳工具

在当今的数字时代,内容创作和消费正处于巅峰,对多功能和兼容媒体格式的需求从未如此之高。在众多可用的视频格式中,MOV 和 MP4 因其在各种设备和平台中的广泛使用而脱颖而出。然而,将 MOV 文件转换为更通用兼容的 MP4 格式的需求已…

OZON的物流有哪些,OZON物流Unitrade

随着跨境电商的快速发展,OZON作为俄罗斯领先的电商平台,其物流服务的重要性不言而喻。对于卖家而言,选择合适的物流合作伙伴,不仅关乎商品的运输效率,更直接关系到店铺的口碑和消费者的购物体验。本文将带您深入了解OZ…

傲软抠图一款专为抠图打造的AI智能抠图应用,智能识别人物物体抠图软件,无广vip版 v1.8.1

软件介绍 傲软抠图,作为一款高度专业化的智能人工智能图片处理软件,被设计专门用于执行精确的图像提取功能。该程序利用其先进的算法能动地识别和分辨图像中的人物或物体轮廓,并能够从原始图片材料中分离出带有透明背景的目标图像。除了自动…

容器化:ES和Kibana

1 缘起 最近在学习使用ES, 为了找一个功能强大的可视化工具,之前使用了ES-Head,可以满足学习需求。 闲暇时间又折腾了另一个工具Kibana, 分享如下。 Kibana优点: 用户友好性:Kibana提供直观易用的用户界面…

IC卡水表抄表是什么?什么叫IC卡水表抄表?

一、什么叫IC卡水表抄表 IC卡水表抄表是一种现代化水资源管理方法,主要是通过集成智能IC卡科技的水表开展计量检定和传送数据。用户在预付模式中,根据IC卡在线充值后再用,用水量会自动保存在卡上,大大提高了抄表效率精确性。 二…

机器学习预测-CNN手写字识别

介绍 这段代码是使用PyTorch实现的卷积神经网络(CNN),用于在MNIST数据集上进行图像分类。让我一步步解释: 导入库:代码导入了必要的库,包括PyTorch(torch)、神经网络模块&#xff0…

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成

0 工具准备 1.STM32CubeMX1 前言 本文介绍基于STM32CubeMX,使用stm32h743xi的对FDCAN2进行配置的方法。 2 初始化代码生成 2.1 选择FDCAN引脚 本例选择PB5、PB6作为FDCAN2的RX、TX引脚。 2.2 选择FDCAN时钟源 本例选择PLL2Q作为FDCAN时钟源,频率…

Redis(1)-Jedis连接配置

问题 阿里云安装并启用Redis后,尝试在本地用Jedis调用,发现报错 public class Jedis01 {Testpublic void connect(){Jedis jedis new Jedis("101.37.31.211", 6379); // 公网ipjedis.auth("123"); // 密码String ping jedis.pin…

可转债日内自动T+0交易,行情推送+策略触发+交易接口

说明 目前这个项目已编译打包,下载即可测试,直接生成多平台可执行文件,详见运行方法。行情部分与策略弱相关,拆分解耦单独作为一个项目。行情项目请移步GitHub - freevolunteer/hangqing: A股行情订阅工具,支持股票/可转债level2/level2数据&…

Golang实现递归复制文件夹

代码 package zdpgo_fileimport ("errors""os""path/filepath""strings" )// CopyDir 复制文件夹 // param srcPath 源文件夹 // param desPath 目标文件夹 // return error 错误信息 func CopyDir(srcPath, desPath string) error {…

机器学习第十次课

前言 因为考了一次试,所以没讲太多新东西,唯一的问题是有的知识刚讲完就考了,导致我爆了...... 正文 主要讲的就是一个贝叶斯分类模型,这是属于生成式的分类器了 Bayesian decision theory 我的理解是贝叶斯公式则是利用条件概率和全概率公式计算后验概率,就这么简单 但是…

智慧农业可视化大屏,当个农民是不是小伙伴的梦想。

智慧农业可视化大屏是指通过数据可视化技术,将农业生产过程中的各种数据、指标和信息以图表、图像等形式展示在大屏上,以便农业从业者能够直观地了解农田、作物、气象、设备等方面的情况,从而进行农业生产的监控、管理和决策。以下是智慧农业…

怎么快速批量导出文本二维码?文件批量生码的方法和步骤

随着互联网的快速发展,二维码的应用也越来越广泛,现在很多二维码会用来展示物品信息,将编辑好的文字内容生成二维码之后,让其他人通过扫码的方式来获取相关内容。那么当有多条信息时,有什么方法能够一次批量生成二维码…

PHP质量工具系列之php_CodeSniffer

PHP_CodeSniffer 是一组两个 PHP 脚本:主脚本 phpcs 对 PHP、JavaScript 和 CSS 文件进行标记,以检测是否违反定义的编码标准;第二个脚本 phpcbf 自动纠正违反编码标准的行为。PHP_CodeSniffer 是一个重要的开发工具,可以确保你的…

04Django项目基本运行逻辑及模板资源套用

对应视频链接点击直达 Django项目用户管理及模板资源 对应视频链接点击直达1.基本运行逻辑Django的基本运行路线:视图views.py中的 纯操作、数据返回、页面渲染 2.模版套用1.寻找一个好的模版2.模板部署--修改适配联动 OVER,不会有人不会吧不会的加Q1394…

AI大模型到底能帮我干什么?

这周百度文心一言大模型正式发布了,不少网民拿着各种段子搞笑和玩梗。我在的其中某个微信群里,一位老兄针对当下的大模型,发出来如下的问题: 大家这么玩梗真没意思 我一直没弄明白这些大模型怎么帮助我工作 这个问题有一定的代表性…

关于sklearn决策树手动指定节点进行剪枝调整的实现

一、决策树剪枝 决策树的剪枝方式有两种,预剪枝和后剪枝,后剪枝在python的sklearn方法中提供了CCP代价复杂度剪枝法(Cost Complexity Pruning)具体实现代码如下: # -*- coding: utf-8 -*- from sklearn.datasets imp…

Java入门基础学习笔记44——String

为什么要学习String的处理呢? 开发中,对字符串的处理是非常常见的。 String是什么?可以做什么? java.lang.String 代表字符串。可以用来创建对象封装字符串数据,并对其进行处理。 1、创建对象 2、封装字符串数据 3…