-
该
audit_log_rotate()
功能简化了审计日志文件轮换。以前,审核日志文件轮换需要手动重命名文件并设置audit_log_flush = ON
为关闭文件并使用原始名称打开一个新的日志文件。该audit_log_rotate()
函数重命名当前文件并创建一个新文件。不再需要手动重命名审计日志文件。audit_log_flush
从MySQL 8.0.31 开始不推荐使用 该变量;希望在未来版本的 MySQL 中删除对它的支持。
-
将内部性能架构函数从 _utf8* 重命名为 _utf8mb4*,因为它们从 v8.0.11 开始就使用 utf8mb4。(漏洞#34351301)
参考资料:另请参阅:Bug #27407745。
修复了 clang/ubsan 的链接器标志,以解决 LLVM/Clang 相关的整数问题,如 LLVM 错误 #16404 中所述。(漏洞#34311325)
-
更新了帮助程序脚本以使用“utf8mb3”作为字符集/排序规则,而不是“utf8”以实现未来兼容性。
用于处理 utf8mb3 字符集和排序规则的重命名函数和数据结构有助于阐明它们的 utf8mb3 用法。(错误#34263480,错误#34025412)
清理了 CMake 代码,并简化了 INFO_BIN 和 INFO_SRC。(缺陷号 34139084)
-
新的组件服务现在使服务器组件和插件能够在本地服务器内进行查询。新的 MySQL 命令服务类似于 中的 C API 函数
libmysql
,只是它们不向客户端公开协议内部结构。有关这些服务的信息,请参阅 MySQL Server Doxygen 文档,网址为 https://mysql.net.cn/doc/index-other.html。搜索:s_mysql_mysql_command_factory
s_mysql_mysql_command_options
s_mysql_mysql_command_query
s_mysql_mysql_command_query_result
s_mysql_mysql_command_field_info
s_mysql_mysql_command_error_info
-
MySQL Keyring 以前使用服务器插件实现 Oracle Cloud Infrastructure Vault Keyring 密钥库功能,但现在正在过渡到使用 MySQL 组件基础设施。新的密钥环组件与现有插件有相似之处 ,但配置不同,并且可以在使用一组类似的配置选项初始化新组件时
keyring_oci
访问使用插件创建的密钥 。keyring_oci
有关配置详细信息,请参阅 使用 Oracle Cloud Infrastructure Vault 密钥环组件。component_keyring_oci
未在启动期间使用--early-plugin-load
服务器选项加载或在启动期间或运行时使用系统变量配置:在启动期间,服务器使用清单文件确定要加载哪个密钥环组件,并且加载的组件在初始化时会查询自己的配置文件。请参阅 密钥环组件安装。
在运行时,该
ALTER INSTANCE RELOAD KEYRING
语句允许在更改其配置文件后重新配置已安装的密钥环组件。请参见ALTER INSTANCE 语句。
如果安装了密钥环组件,则性能模式
keyring_component_status
表会提供有关它的状态信息。请参阅 keyring_component_status 表。
-
重要变化: MySQL 优化器对集合操作的内部管理得到改进,效果如下:
-
带括号的查询表达式的主体现在可以嵌套与
UNION
. 例如,此处显示的查询,以前因错误而被拒绝ER_NOT_SUPPORTED_YET
,现在被允许:( (SELECT a, b, c FROM t ORDER BY a LIMIT 3) ORDER BY b LIMIT 2 ) ORDER BY c LIMIT 1;
当折叠括号内的表达式主体时,MySQL 现在遵循 SQL 标准中指定的语义,因此更高的外部限制不能覆盖内部更低的限制。这意味着表达式
(SELECT ... LIMIT 3) LIMIT 5
最多可以返回三行。UNION DISTINCT
现在UNION ALL
可以嵌套在任意组合中。
刚才列出的所有情况下支持的最大嵌套级别是 63;这遵循解析器执行的任何简化或合并。有关详细信息,请参阅 带括号的查询表达式。(漏洞 #103954)
-
-
派生表中的外部引用指向
JOIN
操作中的表,该操作不可用于子查询(错误地)报告为有效,而没有派生表的此类引用被正确报告为无效。VALUES
在一个相关问题中,放置在语句子句 内的对派生表的外部引用INSERT
不被认为是有效的,而没有派生表的类似引用被视为有效。现在,对派生表的这种引用在VALUES
.在这两种情况下,我们都通过确保将正确的名称解析上下文用于外部引用来解决问题。(错误#32678303,错误#34131822)
-
Performance 和 sys 模式现在公开了 MySQL 8.0.28 中引入的全局和会话内存限制的指标。
以下列已添加到性能模式的表中:
-
FLAGS
-
CONTROLLED_MEMORY
MAX_CONTROLLED_MEMORY
TOTAL_MEMORY
MAX_TOTAL_MEMORY
-
EVENTS_STATEMENTS_CURRENT
、EVENTS_STATEMENTS_HISTORY
和EVENTS_STATEMENTS_HISTORY_LONG
:MAX_CONTROLLED_MEMORY
MAX_TOTAL_MEMORY
-
MAX_CONTROLLED_MEMORY
MAX_TOTAL_MEMORY
-
MAX_SESSION_CONTROLLED_MEMORY
MAX_SESSION_TOTAL_MEMORY
-
PREPARED_STATEMENTS_INSTANCES
:MAX_CONTROLLED_MEMORY
MAX_TOTAL_MEMORY
以下列已添加到 sys 架构
STATEMENT_ANALYSIS
和X$STATEMENT_ANALYSIS
视图中:MAX_CONTROLLED_MEMORY
MAX_TOTAL_MEMORY
表的 PROPERTIES 列
SETUP_INSTRUMENTS
已用controlled_by_default
标志更新。FLAGS
您还可以通过设置列 的值来添加或删除非全局内存工具到受控内存工具集SETUP_INSTRUMENTS
。例如:SQL> UPDATE PERFORMANCE_SCHEMA.SETUP_INTRUMENTS SET FLAGS="controlled" WHERE NAME='memory/sql/NET::buff';
-
-
重要变化: 以前,MySQL 支持使用“ full ”作为表、列、视图、存储过程或存储函数的名称,以及表、视图或列的别名。从此版本开始,以这种方式使用“ full ” (不管字母大小写)作为不带引号的标识符现在已被弃用,并引发警告。这是为了更紧密地与 SQL 标准保持一致,其中
FULL
保留为关键字。例如,以下
CREATE TABLE
andDROP TABLE
语句现在会引发警告,如下所示:mysql> CREATE TABLE full (c1 INT, c2 INT); Query OK, 0 rows affected, 1 warning (0.03 sec) mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 4119 Message: Using FULL as unquoted identifier is deprecated, please use quotes or rename the identifier. 1 row in set (0.00 sec) mysql> DROP TABLE full; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 4119 Message: Using FULL as unquoted identifier is deprecated, please use quotes or rename the identifier. 1 row in set (0.00 sec)
要在没有警告的情况下执行语句,请用反引号 (
`
) 将每个语句中的表名括起来,如下所示:mysql> CREATE TABLE `full` (c1 INT, c2 INT); Query OK, 0 rows affected (0.03 sec) mysql> DROP TABLE `full`; Query OK, 0 rows affected (0.02 sec)
FULL
在赋值右侧 的使用不受此更改的影响。例如,SET
此处显示的语句仍然有效:mysql> SHOW VARIABLES LIKE '%metadata%'; +---------------------------------------+---------+ | Variable_name | Value | +---------------------------------------+---------+ | binlog_row_metadata | MINIMAL | | innodb_stats_on_metadata | OFF | | performance_schema_max_metadata_locks | -1 | | resultset_metadata | FULL | +---------------------------------------+---------+ 4 rows in set (0.00 sec) mysql> SET @@global.binlog_row_metadata=FULL; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE '%metadata%'; +---------------------------------------+-------+ | Variable_name | Value | +---------------------------------------+-------+ | binlog_row_metadata | FULL | | innodb_stats_on_metadata | OFF | | performance_schema_max_metadata_locks | -1 | | resultset_metadata | FULL | +---------------------------------------+-------+ 4 rows in set (0.00 sec)
有关详细信息,请参阅关键字和保留字。
-
现在可以将列直方图设置为用户指定的 JSON 值。当抽样遗漏重要值时,这会很有用。这也意味着辅助(副本)MySQL 服务器可以承担采样数据和构建直方图的工作,然后可以在不影响其性能的情况下将其用于主(源)。
此功能是通过对
ANALYZE TABLE ... UPDATE HISTOGRAM
. 以下语句将col_name
表列的直方图设置为tbl_name
直方图的 JSON 表示形式json_data
:ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON col_name USING DATA 'json_data'
之后您可以通过检查 Information Schema表 的
HISTOGRAM
列 的值来确认这一点。COLUMN_STATISTICS
有关更多信息和示例, 请参阅 直方图统计分析。
感谢 Kaiwang Chen 对 MySQL 的贡献。(错误#104040,错误#33012389)
-
在此版本中,MySQL 添加了对 SQL 标准
INTERSECT
和EXCEPT
表运算符的支持。
仅包括出现在两个结果集中的行。query_a
INTERSECTquery_b
返回结果集中query_a
EXCEPTquery_b
query_a
不在的结果中的 任何query_b
行。INTERSECT
并且EXCEPT
都支持DISTINCT
andALL
,DISTINCT
在这两种情况下都使用默认值。(这与 for 相同UNION
)。INTERSECT
之前的组EXCEPT
或UNION
,所以 被评估为。TABLE
r EXCEPT TABLE s INTERSECT TABLE t
TABLE r EXCEPT (TABLE s INTERSECT TABLE t)
有关其他信息和示例, 请参阅INTERSECT 子句和EXCEPT 子句。(错误#1309、错误#31336、错误#11747209、错误#11744757)
-
重要变更;复制: 该
Rewriter
插件根据重写器规则表重写 SQL 查询。以前,所有查询都需要重写,包括来自任何用户的查询,无论权限如何,以及内部系统查询,如复制应用程序线程、引导 MySQL 服务器和存储引擎执行的查询。此 MySQL 版本提供了一种机制,允许插件跳过某些查询的重写,例如由系统线程执行的查询和来自指定用户的查询。我们通过实施一个新的权限来做到这一点,该权限
SKIP_QUERY_REWRITE
指示其查询未被重写的用户。一个新的系统变量rewriter_enabled_for_threads_without_privilege_checks
控制是否为在禁用特权检查的情况下执行的线程跳过重写。这些线程包括升级线程、初始化线程和PRIVILEGE_CHECKS_USER
具有NULL
. 为保持向后兼容性,此变量的默认设置为 variable isON
,但推荐设置为OFF
。只有安装了插件
SKIP_QUERY_REWRITE
, 和rewriter_enabled_for_threads_without_privilege_checks
才可用。Rewriter
有关详细信息,请参阅 重写器查询重写插件。
重要变化: 对于捆绑了 OpenSSL 库的平台,用于 MySQL Server 的链接 OpenSSL 库已更新至版本 1.1.1q。在https://www.openssl.org/news/cl111.txt 和 https://www.openssl.org/news/vulnerabilities.html中描述了 OpenSSL 版本 1.1.1q 中修复的问题 。(漏洞#34414695)
-
InnoDB: 提供了两个新的状态变量,用于监视在线缓冲池大小调整操作。
Innodb_buffer_pool_resize_status_code
状态变量报告指示在线缓冲池大小调整操作阶段的状态代码。 状态变量报告一个百分比值,Innodb_buffer_pool_resize_status_progress
指示每个阶段的进度。有关详细信息,请参阅 配置 InnoDB 缓冲池大小。
InnoDB:
InnoDB
现在支持并行索引构建,这提高了索引构建性能。特别是,将排序的索引条目加载到 B 树中现在是多线程的。以前,此操作由单个线程执行。-
复制: 使用复制过滤时,副本不再引发与特权检查或被
require_row_format
过滤掉的事件验证相关的复制错误。以前,所有权限都在应用程序中检查,有些在应用过滤器之前检查,有些直到之后才检查;在这个版本中,权限检查现在被推迟到所有复制过滤器都被应用之后。此外,在此版本之前,接受者和应用require_row_format
者都进行了相等1
现在,在评估任何过滤器之前,应用程序单独执行此检查。这使得可以使用现有的复制过滤器过滤掉任何未通过验证的事务,并且副本只接受给定用户已被授予访问权限的数据库部分,只要更新数据库的这一部分仅以基于行的格式复制。另一个可能需要这样做的实例是从本地或云服务迁移到 MySQL 数据库服务时,这些服务使用入站复制用户无权访问的管理表。
权限检查防止更新副本上的关键表。检查
require_row_format
可防止复制不安全的操作;这与特权检查结合使用,因为保证不存在不安全操作消除了对某些会话上下文初始化和清理操作的需要,这反过来又消除了为这些操作授予特权的需要。与此工作相关的其他行为更改在以下列表中注明:
当接收到违反要求行格式验证的事件时,接收线程不再出错;当处理违反要求行格式验证的事件并随后由于复制过滤器而被过滤掉时,应用程序线程不再出错。
-
Query
由于缺乏设置此处列出的任何系统变量的权限,应用程序 线程不再因过滤掉的日志事件而出错 :这是因为设置变量和检查应用程序是否有权设置它现在仅在过滤发生后执行。如果一个事件被过滤掉,应用程序不会尝试设置变量,因此永远不会在检查它是否具有这样做的必要权限时失败。
Execute_load_query
当处理事件并最终因复制过滤器而被过滤掉时,应用程序 线程不再在特权检查中出错。Append_block
应用或 事件时也是如此Begin_load_query
,处理后续Execute_load_query
事件然后将其过滤掉。应用程序线程不再在特权检查或事件
require_row_format
检查中 出错Delete_file
。这些事件是不可过滤的,因为它们不包含表名或数据库名,所以我们假设它们被过滤掉了。我们假设这是安全的,因为 Delete_file 事件不会改变数据库状态。Append_block
applier thread 在处理or 事件 期间不再创建或删除文件系统中的文件Delete_file
,当有配置的用户帐户PRIVILEGE_CHECKS_USER
并且它没有FILE
权限时,也不会require_row_format
启用。对于由 更改的复制事件
--replicate-rewrite-db
,任何权限检查都适用于重写的数据库。
有关详细信息,请参阅服务器如何评估复制过滤规则和 复制过程中的副本错误。(错误#33704306,错误#33733677)
添加了新的
Resource_group_supported
状态变量以指示服务器是否支持资源组功能。(缺陷号 34264356)包含 curl 而不是链接到系统 curl 库的二进制包已升级为使用 curl 7.85.0。(错误#34138733,错误#34614578)
-
新的
thread_pool_transaction_delay
系统变量允许在工作线程开始执行新事务之前指定延迟时间(以毫秒为单位)。最大值为 300000(5 分钟)。事务延迟可用于并行事务因资源争用而影响其他操作的性能的情况。例如,如果并行事务影响索引创建或在线缓冲池大小调整操作,您可以配置事务延迟以减少这些操作运行时的资源争用。
新的
thread_pool_query_threads_per_group
系统变量允许您增加线程组中查询线程的数量,而不是默认的单个查询线程。当您使用高并发线程池算法 (thread_pool_algorithm=1
) 时,如果由于长时间运行的事务而遇到较慢的响应时间,请考虑增加该值。它不能超过 的值thread_pool_max_transactions_limit
。-
以前仅适用于 MySQL 数据库服务的线程池插件功能现在适用于 MySQL 企业版。
该
thread_pool_max_transactions_limit
变量定义线程池插件允许的最大事务数。定义一个事务限制将一个线程绑定到一个事务直到它提交,这有助于在高并发期间稳定吞吐量。该
thread_pool_dedicated_listeners
变量在每个线程组中指定一个侦听器线程来侦听来自分配给该组的连接的传入语句。当事务限制由 定义时,启用此变量是必要的thread_pool_max_transactions_limit
。它确保每个线程组都有一个可用的侦听器线程。该
TP_CONNECTION_ADMIN
特权使用户能够使用特权连接访问服务器。当达到定义的限制thread_pool_max_transactions_limit
时,新连接将无法访问服务器。特权连接忽略定义的限制thread_pool_max_transactions_limit
并允许连接到服务器以增加事务限制、删除限制或终止正在运行的事务。
WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE
Performance Schema 表中 的新字段replication_group_communication_information
显示复制组是否支持使用单个共识领导者,即使group_replication_paxos_single_leader
当前OFF
在查询成员上设置为。如果组启动时group_replication_paxos_single_leader
设置为ON
,并且其通信协议版本为 MySQL 8.0.27 或更高版本,则该字段设置为 1。激活 MySQL Server 的离线模式,这是通过将
offline_mode
系统变量的值更改为 来完成的ON
,现在CONNECTION_ADMIN
除了SYSTEM_VARIABLES_ADMIN
特权(或已弃用的SUPER
特权,涵盖这两种特权)之外还需要特权。当激活离线模式时,其用户具有特权的会话CONNECTION_ADMIN
保持连接状态,并且具有该特权的用户可以与离线服务器实例建立新连接。新要求意味着可以激活离线模式的管理员不能无意中将自己锁在外面。-
添加了只读
build_id
系统变量。在 Linux 系统上,一个 160 位的SHA1
签名是在编译时生成的;此值转换为十六进制字符串,为构建提供唯一标识符。该值在启动时写入服务器日志。此变量在 Linux 以外的平台上不受支持。
添加了 Ubuntu 22.10 支持。
-
不兼容的更改:
pfs_plugin_table
自 MySQL 8.0.14 起已弃用 的服务使用此服务的插件或组件必须更新以使用
pfs_plugin_table_v1
和 代替。(缺陷号 34361827)pfs_plugin_column_
*
-
重要变更;Replication:无论二进制日志格式如何,无论
--replicate-do-db
or 查询默认数据库过滤的日志事件--replicate-ignore-db
包括XA START
,XA END
,XA COMMIT
, andXA ROLLBACK
(但不XA PREPARE
orXA COMMIT ONE_PHASE
这可能会导致此处列出的问题之一:
当
XA START
orXA END
被过滤掉时,事务第一部分中的 XA 语句序列变得无效,这使得副本因错误而停止。当
XA START
和XA END
被保留而XA COMMIT
或XA ROLLBACK
被过滤掉时,事务可以在副本上无限期地保持准备状态。
为了防止这些问题的发生,我们不再使用 or 过滤默认 数据库的
XA START
,XA END
,XA COMMIT
, orXA ROLLBACK
语句 。(错误#106201,错误#33764808)--replicate-do-db
--replica-ignore-db
InnoDB: 升级到支持使用添加或删除的列的行版本的版本后, 具有可空列和立即添加列的表上
ALGORITHM-INSTANT
进行即时操作时发生故障ADD COLUMN
(缺陷号 34488482)InnoDB: 在同一语句中添加虚拟列和删除列
ALTER TABLE
引发了无效的调试断言失败。(漏洞#34467592)InnoDB: 删除列并将现有列重命名为删除列的名称后,列的物理位置设置不正确。(缺陷号 34463089)
InnoDB:更正 了检测到的 Valgrind 错误
mtr_t::start()
。(缺陷号 34327575)InnoDB: 对损坏的分区表的 DDL 操作引发断言失败。(缺陷号 34293555)
InnoDB: 直方图采样期间的索引块闩锁顺序违规阻止并发插入并可能导致死锁失败。(错误#34282448,错误#34174927,错误#107299)
InnoDB: 正在进行
ALTER TABLE
数据加载操作时执行的操作引发了断言失败。(缺陷号 34267618)InnoDB:
InnoDB
修复了由 Address Sanitizer (ASAN) 构建识别的 MySQL 服务器初始化期间的内存泄漏。(缺陷号 34156050)InnoDB: 在恢复期间,与从磁盘获取的加密撤消表空间页面关联的表空间对象不包含解密页面所需的加密密钥,导致失败。(缺陷号 34148143)
InnoDB: 在调试版本中,降序 b 树扫描引发了调试断言失败。(缺陷号 34144951)
InnoDB: 该
innodb_redo_log_consumer_advance()
函数无法处理无效参数。(缺陷号 34052884)InnoDB: 使用
ALGORITHM=INSTANT
添加的列在添加该列的 DDL 操作之前创建的读取视图中可见。(缺陷号 33937504)-
InnoDB: 使用包含具有特定表 ID 的用户创建表的 MySQL 5.6 数据目录升级 MySQL 实例时发生故障。在从 MySQL 5.7 升级到 MySQL 8.0 时,分配该表 ID 会导致分配冲突的数据字典表 ID。
感谢 Rahul Malik 的贡献。(缺陷号 33919635)
InnoDB: 包含内部临时表页的缓冲块在页遍历期间被重新定位,导致断言失败。(漏洞#33715694)
InnoDB: 删除带有废弃表空间的表会导致断言失败。(缺陷号 33232978)
InnoDB: 在关闭到达刷新阶段之前页面 I/O 读取未完成导致在页面更改缓冲区合并要在 I/O 读取后完成的情况下断言失败。(缺陷号 33192496)
InnoDB: 索引闩锁顺序违规
dict_table_x_lock_indexes()
导致断言失败。(缺陷号 32912868)InnoDB: 在
TRUNCATE TABLE
特定情况下,操作无法释放获取的互斥体。(错误#107858,错误#34380370)InnoDB: 在调试版本中,导入一个没有
.cfg
文件的表空间,用于立即添加或删除列的表会引发断言失败。(错误#107517,错误#34307874)-
InnoDB:
trx_undo_prev_version_build()
更正 了函数中潜在的内存泄漏感谢 Alex Xing 的贡献。(缺陷 #106952,缺陷 #34051207)
InnoDB: 在恢复期间重做空间删除时发生调试断言失败。(缺陷 #103482,缺陷 #32819101)
InnoDB:删除了指定对象池数量 的
InnoDB
启动消息,以避免与缓冲池实例数量混淆。(缺陷 #80248,缺陷 #22653060)分区:
ALTER TABLE
当语句更改其任何列的字符集 时,分区表未按预期重新分区 其根本原因是,在确定字符集更改是否可以作为就地更改操作来完成时,我们没有考虑受字符集更改影响的任何列是否是表分区表达式的一部分。由于这样的更改可能会导致表的重新分区,因此无法就地完成。现在,当计划更改字符集时,我们还会检查这是否会影响分区表达式中的任何列;如果没有,那么我们可以就地进行操作。(错误#106884,错误#34031693)复制:组复制应用程序通道 () 允许 使用
START REPLICA
和,但手动停止和启动通道会使 复制组的成员无法提交远程事务。当组复制正在运行时,这些语句现在不能用于通道。(漏洞#34231291)STOP REPLICA
group_replication_applier
ONLINE
复制: 更正了复制信息处理中的一个内部错误。(缺陷号 34214416)
复制: 在 InnoDB ClusterSet 中,如果发生提交顺序死锁和随后的重试,组复制可能会在认证期间回滚事务,并出现错误,指出事务的 GTID 已被使用。现在仅当 GTID 已在服务器实例和组中使用时才会返回错误。(缺陷号 34157846)
复制: 当单个事件导致对副本上表的同一行进行多次更新时,如果副本在源中不存在的表上具有主键,则无法应用更改。基于散列的行查找算法现在在这种情况下运行,即使主键存在于副本表中也是如此。(漏洞#34114296)
复制: 当单个语句为副本上的不同表生成多个写入事件时,副本表中额外的自动增量列仅针对最后生成的事件进行清理。如果最后一个事件不涉及带有额外自动增量列的表,则它们根本不会被清理。清理过程现在总是针对多个写入事件进行。(缺陷号 34095290)
复制: 如果
group_replication_force_members
设置了系统变量,则向客户端返回误导性错误,并且等待视图更改超时。错误和相关错误已更新,因此它们不会表明为系统变量提供的值不正确。(缺陷号 34091087)复制: Performance Schema 表中的 FILTER_RULE 列
replication_applier_filters
显示了规则不存在的过滤器的不正确数据。在这种情况下,表格现在显示空字符串。(缺陷号 33885484)-
复制: 在一些罕见的刷新或同步错误情况下,服务器可能会尝试使用文件和文件内位置的无效值更新二进制日志的端点,从而导致未定义的行为。
为了解决这个问题,我们现在只在已知文件和位置参数都有效时 调用内部函数 。(缺陷号 33818238)
update_binlog_end_pos(
binlog_file
,pos
) -
复制: 使用无效 GTID 日志事件的 SID 的操作有时会导致未定义的行为。
我们通过确保 SID 始终被初始化来解决这个问题,即使它属于无效的 GTID 日志事件。(缺陷号 33784022)
-
复制:
MAX_SIZE_LOG_EVENT_STATUS
未正确计算状态变量 () 的最大长度此处列出了此修复程序中更正的问题:
sql_require_primary_key
并且default_table_encryption
需要 2 个字节(一个用于类型 ID,一个用于变量)的最大长度
time_zone
被计算为255而不是MAX_TIME_ZONE_NAME_LENGTH
需要一个额外的字节(each)来保存用户变量的长度,存储的数据库ID的个数
binlog_accessed_db_names
,以及微秒的类型
此外,
master_data_written
实际上未使用的 已被删除。(缺陷号 33713071) 复制: 在 32 位平台上,设置
binlog_expire_logs_seconds
为2147483648
() 或更多具有导致在指定时间过去之前清除所有二进制日志的效果。(缺陷号 33670457)231
复制: 如果正在进行组配置更改,则新成员无法加入。此场景中发出的错误消息现在说明正在进行什么操作,例如主要选举、单主模式和多主模式之间的交换或组通信协议的更改。(缺陷号 32766981)
复制: 检查事务提交没有冲突且顺序正确后,组复制向提交会话报告。当事件调度程序线程启动时,组复制无法找到提交会话,导致成员进入
ERROR
状态并离开组。定位提交会话的过程已扩展为查找守护线程,用于启动事件调度程序线程。感谢娄帅的贡献。(错误#107635,错误#34312482)-
复制: 当二进制日志发送方线程在启用心跳的情况下等待更新时,它有时会错过更新信号,因此直到下一个信号发出并被线程注意到时,更改才会被复制。
我们感谢 Facebook 的贡献。(错误#104491,错误#33176377)
当
replication_optimize_for_static_plugin_config
启用系统变量以提高半同步复制的性能时,RAPID
由于通知处理问题,该插件无法在服务器中使用。该问题现已解决。(缺陷号 34549470)-
包含许多前导零的字符串在将它们转换为十进制时被错误地标记为溢出,导致返回的值是给定精度和小数位数的最大十进制值。
0
我们通过在转换之前 用单个 , 替换这种情况下的所有前导零来解决此问题。(漏洞#34479194) WSAPoll
Windows 上的poll()
函数与类 Unix 系统上 的函数之间的差异导致Windows 上的线程池代码将无效的文件描述符或套接字视为准备好进行 I/O。(缺陷号 34478731)如果 MySQL 8.0.27 或更高版本的 MySQL 实例加入了在 MySQL 8.0.26 上运行的复制组,
mysql_start_failover_channels_if_primary
则删除成员操作以匹配组其余部分的成员操作配置。但是,如果实例升级为在 MySQL 8.0.27 或更高版本上运行,则不会恢复成员操作,除非group_replication_reset_member_actions()
在随后引导该组的服务器上发出。加入成员现在检查成员操作mysql_start_failover_channels_if_primary
是否对他们可用,如果是,则将其添加到他们的成员操作配置中。(漏洞#34464526)SELECT
服务器并不总是正确处理查询列表中 使用的常量表达式 。(缺陷号 34418412)在 中添加了一个缺失的错误检查
Json_table_column::fill_column()
。(缺陷号 34416304)一些接受多个参数的字符串函数没有正确处理所有参数。(缺陷号 34393009)
如果一个视图(
v1
)访问了另一个视图(v2
),如果v2
被重新创建,则SHOW COLUMNS FROM v1
报告无效视图错误。仅当用户被授予具有角色的全局权限而不是表级权限时,才会出现此问题。如果不存在表级权限,则通过检查全局权限来修复它。(缺陷号 34341533)replication_group_member_actions
由于线程之间的冲突, 对 Performance Schema 表的查询 可能会失败。该问题现已解决。(缺陷号 34337673)在读取 const 表时在项目评估后添加了缺失错误检查。(缺陷号 34327798)
在某些情况下,派生表的重新分析和克隆并不总是正确处理。(错误#34317258,错误#34408241)
当存在多个查询块时,将条件下推到具有集合操作的派生表并不总是能正确处理。(缺陷号 34306361)
RSA 密钥创建期间的启动失败导致密钥为空或不完整。现在以故障安全方式生成密钥。(缺陷号 34274914)
-
当比较两个带有显式
COLLATE
子句的字符串值时,它们应该具有相同的排序规则,否则比较应该被拒绝,但这并不总是强制执行的。有关详细信息,请参阅 表达式中的排序规则强制性。(缺陷号 34274525)
在服务器实例上启动 Group Replication 时可能会出现死锁,但配置不兼容等错误会导致成员立即离开。服务注册表现在通过避免该问题的替代过程来管理服务的注册和注销。(缺陷号 34194893)
CREATE USER
由于意外的语法错误,无法在副本服务器上执行从二进制日志读取 的操作。(缺陷号 34178823)-
当使用而不是 (参见 SELECT 语句) 时 ,精度不匹配有时会发生在 对整数值 的
CAST
to操作中。FLOAT
SQL_SMALL_RESULT
SQL_BIG_RESULT
对于
SQL_BIG_RESULT
,该值根据 IEEE 32 位浮点值的固有精度被截断,这是正确的行为。使用SQL_SMALL_RESULT
,保留了原始整数值的精度;发生这种情况是因为该值被复制到仅支持双精度值的临时表中,这些值随后被复制回客户端。我们通过在将此类值复制到临时表时区分浮点值的类型来解决此问题,以便双精度值存储为 double 类型,单精度值存储为 float 类型。(缺陷号 34167787)
codespell
在大部分源代码上 执行,并修复了代码注释中报告的拼写错误。(缺陷号 34163323)在某些情况下,在调用内部函数指针之前检查它时,会验证错误的指针。(缺陷号 34134738)
访问路径和访问迭代器
eq_ref
都有一个use_order
成员用于确定是否使用有序索引扫描。由于eq_ref
总是最多返回一行,因此没有必要对其进行排序;因此,use_order
在这里没有任何用处,已从访问路径和相应的迭代器中删除。(缺陷号 34122706)-
改进了CMake选项,使其在加载单元测试时也能正常工作。(漏洞#34117732)
ADD_GDB_INDEX
参考资料:另请参阅:Bug #29925009。
删除了 GNU“黄金”链接器支持,包括关联的 USE_LD_GOLD CMake 选项。(缺陷号 34094324)
-
在 MySQL 5.7 数据目录(在 MySQL 5.7 中被视为模式目录)中手动创建的目录在目录名称中包含特殊字符,或者在其名称中使用特殊字符创建的模式和表使用
`#mysql50#`
前缀导致 DDL 在升级到 MySQL 8.0 后失败。?
在MYSQL 8.0中,对象名添加到数据字典时,特殊字符被替换为问号字符( )。名称不匹配导致受影响对象上的 DDL 操作失败。如果遇到无效的模式和表名称,升级现在会停止并出现错误。在 MySQL 5.7 中,您可以使用mysqlcheck 将无效的模式和表名更新为有效的编码。要识别无效名称,请运行:
mysqlcheck --check-upgrade --all-databases
要修复无效名称,请运行:
mysqlcheck --fix-db-names --fix-table-names --all-databases
在 MySQL 5.7 中,具有特殊字符的目录名称也可以使用以下 SQL 语法更新为使用有效编码:
ALTER DATABASE `directory_name` UPGRADE DATA DIRECTORY NAME;
(缺陷号 34066605)
使用 null-safe equals operator (
<=>
) 的条件现在可以被执行者视为 equijoin 条件。使用此类条件的谓词不被视为等值连接谓词,而是作为连接后评估的额外谓词。(缺陷号 34063499)添加了对使用 OpenSSL 3 编译 MySQL Enterprise Encryption 组件的支持。(缺陷号 34043029)
在源代码上执行
codespell
并修复代码注释中报告的拼写错误。(缺陷号 34006439)当一个或多个参数
GREATEST()
为时间值时,它们传递给函数的顺序可能会影响结果。(缺陷号 33996054)包含嵌套子查询的派生表上的 with a 作为带谓词的子句的一部分 返回
SELECT
了不 正确的结果。(漏洞#33971286)LEFT JOIN
WHERE
IN
使用 OpenSSL 3.0 编译时调用 和 函数
ERR_clear_error()
导致 错误vio_ssl_write()
。ssl_handshake_loop()
(缺陷号 33967647)服务器并不总是按预期处理嵌套视图。(缺陷号 33876690)
mysqlpump可能未获得使用派生表(由查询
FROM
子句生成的表)的正确权限,如果存在这些表,则会导致转储进程停止。派生表现在单独处理,并为它们设置权限。(缺陷号 33866103)SELECT
重复执行包含多个AND
、OR
或 条件 的子查询 a 的存储例程XOR
会导致过度消耗,并可能最终耗尽虚拟内存。(缺陷号 33852530)-
EXPLAIN ANALYZE
提供有关查询计划中每个迭代器的估计成本和运行时间的信息。我们期望这些数字是累积的,因此给定迭代器的成本(或时间)包括该迭代器所依赖的任何迭代器的成本。例如,连接表t1
和表的估计成本t2
,使用表扫描t1
后跟主键查找t2
,应该不小于扫描成本t1
加上基数查找的成本t2
。对于一些涉及具体化或临时表的查询,这些数字不是累积的。此外,在具体化
UNION
操作结果并随后对临时(具体化)表执行表扫描时,成本估算不正确。(错误#33834146,错误#34302461) -
用于比较两个字符串值的排序规则的强制取决于操作数的顺序。给定一个使用
utf8mb4
字符集的字符串和一个使用 的字符串,当左操作数为和 左操作数为 时,使用排序规则utf8mb3
进行比较。utf8mb4
utf8mb4
utf8mb3
utf8mb3
问题的根源在于用于强制转换 ASCII 字符串的特殊处理;由于两个字符串都是文字,因此会扫描它们的 ASCII 和非 ASCII 字符,并根据此设置 repertoire 属性。这意味着一个字符串可能被视为 ASCII 而另一个字符串则不是;当字符串被认为是 ASCII 并因此与它在比较之前被(错误地)转换
utf8mb4
的字符串兼容时 。utf8mb3
我们通过使用内部
MY_CS_PUREASCII
属性而不是MY_REPERTOIRE_ASCII
; 来解决这个问题。MY_CS_PUREASCII
严格来自字符集,而不是实际的字符串,这使得排序规则的确定具有确定性。现在在这种情况下,两个字符串都没有被识别为 ASCII,这会导致 在执行比较之前转换为,正如预期的那样utf8mb3
。utf8mb4
(缺陷号 33801312) 限制范围
connect_timeout
已扩展到完整数据包读取。(缺陷号 33723597)-
添加了新的验证以确保事件计划程序按预期在服务器上自动重新启动。(漏洞#33711304)
参考资料:另请参阅:Bug #33539082。
在没有游标的情况下执行准备好的语句时,如果先前的执行使用了游标,它可能会返回错误的结果。通过创建和保存两个查询结果对象解决了此问题,一个用于游标,一个用于不使用游标。这些对象是按需创建的,因此如果准备好的语句从未与游标一起使用,则永远不会创建特定于游标的查询结果对象。(缺陷号 33535746)
带有参数的准备好的语句可能无法更新行,但具有相同数据的相同语句在作为查询发出时确实更新了行。解决该问题的方法是为参数分配默认数据类型,尽管这可能效率低下,因为没有可用于数据类型传播的上下文并且隐式给出了字符串类型。在这种情况下,最佳做法是将此类参数声明包装在
CAST
提供所需数据类型的子句中。(错误号 33521861)对于使用 FEDERATED 存储引擎的表,如果本地服务器上的连续查询之间的延迟超过远程服务器的等待超时(
wait_timeout
设置),则在本地服务器上返回数据包错误。来自远程服务器的超时错误现在由本地服务器正确处理,它重新连接并再次执行该语句。(缺陷号 33500956)-
处理了连接优化期间可能出现的意外情况。(缺陷号 31401468)
参考资料:另请参阅:Bug #34350945。
执行后
SET @@character_set_client = @@character_set_system
,优化器提示未正确解析。(缺陷 #107820,缺陷 #34370403)-
当列不是字符串类型时,以布尔模式对表的列执行全文搜索的查询会
MyISAM
导致调试构建中的断言。这是因为在布尔模式下MyISAM
允许MATCH
没有索引的列,因此也允许整数列,这些列会不断传播。使用除此之外的任何存储引擎对表进行的此类查询MyISAM
不受此问题的影响。这是通过在列不是字符串类型时禁用子句上的常量传播来解决的
MATCH
,这样我们就可以安全地假设它只包含列引用。(错误#107638,错误#34311472) 更正了评论中的错误
my_time.cc
。感谢 Dimitry Kudryavtsev 的贡献。(错误#107633,错误#34308417)MySQL 8.0.24 对连接错误处理进行了更改,如果出现超出(exceed)等错误
max_allowed_packet
导致 mysql客户端与服务器断开连接,则之后不会重置该错误以指示断开连接。后续查询返回原错误,并没有自动重连,因为 mysql客户端没有出现断开连接错误。现在重置错误以指示断开连接并允许客户端重新连接。(缺陷 #107605,缺陷 #34303841)在 MySQL 8.0.29 中修复错误后,如果在选项文件中提供了密码,如果在登录时指定了该选项,则mysql客户端不会提示输入密码
-p
。客户端现在总是在指定选项时提示输入密码-p
并使用指定的密码,即使替代选项是从选项文件中填充的。(错误#107205,错误#34134984)已弃用的服务器选项禁用加密连接的替代方案
--ssl=off
没有按照文档或弃用警告中的说明工作。为此,将tls_version
系统变量设置为空值 (tls_version=''
) 现在可以正常工作。(错误#106459,错误#33858646)对列的聚合查询
BIT
返回了一个格式化为位字符串的值,但也BINARY
自动添加了标志。新验证现在检查并跳过设置 结果BINARY
标志BIT
。(错误#106241,错误#33781442)SHOW SLAVE STATUS
并且SHOW SLAVE HOSTS
在引入SHOW REPLICA STATUS
and之后SHOW REPLICA HOSTS
比以前使用了更多的 CPU。(错误#105924,错误#33684069)-
当
NO_SKIP_SCAN
提示提到不用于表跳过扫描的特定索引时,所有其他可能的索引也将被忽略,因此,跳过扫描不用于表上的任何索引。NO_SKIP_SCAN
发生这种情况是因为如果提示不适用于所有索引,则不会对 跳过扫描的所有可能键执行处理 。(错误#104670,错误#33251616) 随着值列表长度的增加,查询使用的 CPU 时间越来越多。(错误#102037,错误#32311183)
WHERE
column
IN (list
)