MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端
↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~
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 Name | New Name |
|---|---|
| INNODB_SYS_TABLESPACES | INNODB_TABLESPACES |
| INNODB_SYS_DATAFILES | INNODB_DATAFILES |
权限变更
1. FLUSH_PRIVILEGES
MySQL 8.4.0 LTS 添加了特定于 FLUSH PRIVILEGES 语句的使用的权限。与现有的 RELOAD 权限不同,新的 FLUSH_PRIVILEGES 权限仅适用于 FLUSH PRIVILEGES 语句。此权限的范围是全局的,并且适用于用户和角色。
示例:
-
创建带有 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)
-
使用 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)
-
回收权限后再次使用 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 TABLE 和 OPTIMIZE 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)
客户端
-
mysql_upgrade 移除
在之前的文章 MySQL 升级:使用 mysql_upgrade 注意事项(再见 mysql_upgrade) 中介绍过 mysql_upgrade 的变化。
MySQL 8.4.0 移除了该客户端。
-
mysqlpump 移除
移除了已弃用的 mysqlpump 客户端,及其关联的 lz4_decompress 和 zlib_decompress 辅助工具。
请使用 mysqldump 或 MySQL Shell 的转储程式。
-
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 术语来表示复制命令
-
客户端注释保留
这里还有一个变更点值得注意。在之前的版本中,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 / --
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)
本文由 mdnice 多平台发布
相关文章:
MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端
↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~ MySQL 8.4.0 LTS 已经发布 ,作为发版模型变更后的第一个长期支持版本,注定要承担未来生产环境的重任,那么这个版本都有哪些新特性、变更,接下来少…...
LeetCode 124 —— 二叉树中的最大路径和
阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 二叉树的问题首先我们要想想是否能用递归来解决,本题也不例外,而递归的关键是找到子问题。 我们首先来看看一棵最简单的树,也就是示例 1。这样的一棵树总共有六条路径…...
美甲店会员预约系统管理小程序的作用是什么
女性爱美体现在方方面面,美丽好看的指甲也不能少,市场中美甲店、小摊不少,也跑出了不少连锁品牌,70后到00后,每个层级都有不少潜在客户,商家需要获取和完善转化路径,不断提高品牌影响力与自身内…...
..堆..
堆 堆是完全二叉树,即除了最后一列之外,上面的每一层都是满的(左右严格对称且每个节点都满子节点) 最后一列从左向右排序。 默认大根堆:每一个节点都大于其左右儿子,根节点就是整个数据结构的最大值 pr…...
【LLM多模态】综述Visual Instruction Tuning towards General-Purpose Multimodal Model
note 文章目录 note论文1. 论文试图解决什么问题2. 这是否是一个新的问题3. 这篇文章要验证一个什么科学假设4. 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?5. 论文中提到的解决方案之关键是什么?6. 论文中的…...
探索Linux中的神奇工具:重定向符的妙用
探索Linux中的神奇工具:重定向符的妙用 在Linux系统中,重定向符是一个强大的工具,用于控制命令的输入和输出,实现数据流的定向。本文将详细介绍重定向符的基本用法和一些实用技巧,帮助读者更好地理解和运用这个功能。…...
Kubernetes 文档 / 概念 / 工作负载 / 工作负载管理 / Job
Kubernetes 文档 / 概念 / 工作负载 / 工作负载管理 / Job 此文档从 Kubernetes 官网摘录 中文地址 英文地址 Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的…...
办公自动化-Python如何提取Word标题并保存到Excel中?
办公自动化-Python如何提取Word标题并保存到Excel中? 应用场景需求分析实现思路实现过程安装依赖库打开需求文件获取word中所有标题去除不需要的标题创建工作簿和工作表分割标题功能名称存入测试对象GN-TC需求标识符存入测试项标识存入需求标识符 完整源码实现效果学…...
基于Java、SpringBoot和uniapp在线考试系统安卓APP和微信小程序
摘要 基于Java、SpringBoot和uniapp的在线考试系统安卓APP微信小程序是一种结合了现代Web开发技术和移动应用技术的解决方案,旨在为教育机构提供一个方便、高效和灵活的在线考试平台。该系统采用Java语言进行后端开发,使用SpringBoot框架简化企业级应用…...
抖音a-bogus加密解析(三)
要补的环境我给提示,大家自行操作,出了问题就是因为缺环境,没补好 window global; // reading _u未定义 window.requestAnimationFrame function () {} // XMLHttpRequest 未定义 window.XMLHttpRequest function () {} window.onwheelx …...
IS-IS DIS
原理概述 OSPF 协议支持4种网络类型, IS-IS 协议只支持两种网络类型,即广播网络和点到点网络。与 OSPF 协议相同, IS-IS 协议在广播网络中会将网络视为一个伪节点( Pseudonode ,简称 PSN ),并选举出一台 DIS ( Designa…...
random和range
含义: random(1,10) 不包含10,用于生成随机数。它可以生成浮点数或整数,取决于具体的使用方式。 range(0,1) 不包含1,用于生成一个整数序列。它可以生成一个指定范围内的连续整数序列。 区别在于&#x…...
研二学妹面试字节,竟倒在了ThreadLocal上,这是不要应届生还是不要女生啊?
一、写在开头 今天和一个之前研二的学妹聊天,聊及她上周面试字节的情况,着实感受到了Java后端现在找工作的压力啊,记得在18,19年的时候,研究生计算机专业的学生,背背八股文找个Java开发工作毫无问题&#x…...
Golang:gammazero/deque是一个快速环形缓冲区deque(双端队列)实现
gammazero/deque是一个快速环形缓冲区deque(双端队列)实现。 文档 https://github.com/gammazero/deque 安装 go get github.com/gammazero/deque代码示例 先入先出队列 package mainimport ("fmt""github.com/gammazero/deque&quo…...
C++ 时间处理-统计函数运行时间
1. 关键词2. 问题3. 解决思路4. 代码实现 4.1. timecount.h4.2. timecount.cpp 5. 测试代码6. 运行结果7. 源码地址 1. 关键词 C 时间处理 统计函数运行时间 跨平台 2. 问题 C如何简单便捷地实现“函数运行时间的统计”功能? 3. 解决思路 类的构造函数&#x…...
JAVA面试题大全(十五)
1、Zookeeper 是什么? zookper是一个分布式的,开放源码的分布式应用程序协调服务。是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护…...
使用python对指定文件夹下的pdf文件进行合并
使用python对指定文件夹下的pdf文件进行合并 介绍效果代码 介绍 对指定文件夹下的所有pdf文件进行合并成一个pdf文件。 效果 要合并的pdf文件,共计16个1页的pdf文件。 合并成功的pdf文件:一个16页的pdf文件。 代码 import os from PyPDF2 import …...
Day50 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结
代码随想录算法训练营Day50 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结 LeetCode 309.最佳买卖股票时机含冷冻期 题目链接:LeetCode 309.最佳买卖股票时机含冷冻期 思路: 四个状态。 保持持有股票,保持卖出股票…...
Steam在连接至服务器发生错误/连接服务器遇到问题解决办法
Steam作为全球最大的数字游戏分发平台,构建了一个活跃的玩家社区,用户可以创建个人资料,添加好友,组建群组,参与讨论,甚至直播自己的游戏过程。通过创意工坊,玩家还能分享自制的游戏模组、地图、…...
kafka 工作流程文件存储
爬虫组件分析 目录概述需求: 设计思路实现思路分析1.kafka 工作流程2.kafka 文件存储 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
