有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/。
不支持从 MySQL 8.0 降级到 MySQL 5.7(或从 MySQL 8.0 版本降级到以前的 MySQL 8.0 版本)。唯一受支持的替代方法是恢复 升级 前的备份。
字符集将在未来的 MySQL 版本中
utf8mb3被替换 。utf8mb4该utf8字符集当前是 的别名utf8mb3,但届时将成为 的引用utf8mb4。为避免 的含义含糊不清utf8,请考虑utf8mb4明确指定字符集引用而不是utf8。
MySQL 源代码已使用 clang-format转换为 Google 样式规则。(漏洞#27414321)
Sun RPC 正在从
glibc. 如果不包含 Sun RPC , CMake现在会检测并使用 。(您可能会发现有必要安装 rpcgen以利用此CMake功能。)(Bug #27368272,Bug #89168)libtirpcglibclibtirpc服务器构建的 Boost 库的最低版本现在是 1.66.0。(缺陷 #27137349,缺陷 #88540)
-
从源代码构建时,提供的CMake 脚本假定 JUnit 和 Ant 已安装并可在设置路径中使用。如果不是这种情况,则构建 GCS Java 包装器会导致构建错误。为解决此 问题,已将新的CMake选项 添加到构建脚本中,其工作方式与现有选项类似。设置 为保存 Ant tarball 或已解压的归档文件的目录路径。当未设置或设置为特殊值时,构建假定二进制ant存在于 .
WITH_ANT=path_nameWITH_BOOSTCMakeWITH_ANTWITH_ANTsystem$PATH同样,在构建期间下载所需库的
CMake选项ENABLE_DOWNLOADS已经存在,例如 Google Test 发行版。现在,当ENABLE_DOWNLOADS设置好并且未找到 JUnit 或 Ant 时,它们将作为构建过程的一部分进行下载。(漏洞#26678793)
新的CMake选项
BUNDLE_RUNTIME_LIBRARIES支持将运行时库与适用于 Windows 的服务器 MSI 和 Zip 包捆绑在一起。(漏洞 #27584796,漏洞 #89771)systemd 服务文件现在增加到
LimitNOFILE10000,以适应 MySQL 8.0 中更高的默认设置。(漏洞#27530282)新的CMake选项在启用时会 为以下任何未明确设置的选项选择值: , , , , , , 。(漏洞 #27356668,漏洞 #89136)
WITH_SYSTEM_LIBSsystemWITH_EDITLINEWITH_ICUWITH_LIBEVENTWITH_LZ4WITH_PROTOBUFWITH_SSLWITH_ZLIB编译
zlib库的版本现在在运行时作为version_compile_zlib系统变量的值可用。感谢 Daniël van Eeden 提供补丁。(漏洞 #27235065,漏洞 #88825)
-
不兼容的 更改:这些 弃用 的 兼容性 模式 已被 删除:
DB2、、、、、、、、、、、、。它们不能再分配给系统变量或用作mysqldump选项的允许值。MAXDBMSSQLMYSQL323MYSQL40ORACLEPOSTGRESQLNO_FIELD_OPTIONSNO_KEY_OPTIONSNO_TABLE_OPTIONSsql_mode--compatible删除
MAXDB意味着 or 的TIMESTAMP数据类型 被视为 ,并且不再被视为。CREATE TABLEALTER TABLETIMESTAMPDATETIME对于使用 MySQL 8.0 中删除的 SQL 模式的 MySQL 5.7 应用程序,语句从 MySQL 5.7 master 复制到 MySQL 8.0 slave 时可能会失败,或者可能对 master 和 slave 产生不同的影响。为避免此类问题,应修改使用 MySQL 8.0 中删除的模式的应用程序以避免这些问题。
-
以下与帐户管理相关的功能已被删除:
用于
GRANT创建用户。相反,使用CREATE USER. 遵循这种做法使得 SQL 模式对于 语句来说变得NO_AUTO_CREATE_USER无关紧要,因此它也被删除了。GRANT用于
GRANT修改权限分配以外的帐户属性。这包括身份验证、SSL 和资源限制属性。相反,在创建帐户时使用 建立此类属性CREATE USER或之后使用 修改它们ALTER USER。-
IDENTIFIED BY PASSWORD 'hash_string'CREATE USER和GRANT的语法 相反,使用 for 和 ,其中 值的格式与命名插件兼容。IDENTIFIED WITHauth_pluginAS 'hash_string'CREATE USERALTER USER'hash_string'此外,由于
IDENTIFIED BY PASSWORD语法已被删除,log_builtin_as_identified_by_password系统变量是多余的并已被删除。 PASSWORD()功能 。此外,PASSWORD()删除意味着 语法不再可用。SET PASSWORD ... = PASSWORD('auth_string')系统
old_passwords变量。
对于使用 MySQL 8.0 中移除特性的 MySQL 5.7 应用程序,语句从 MySQL 5.7 master 复制到 MySQL 8.0 slave 时可能会失败,或者可能对 master 和 slave 产生不同的影响。为避免此类问题,应修改使用 MySQL 8.0 中删除的功能的应用程序以避免它们并尽可能使用替代方案。(漏洞 #27455708)
perror在理解其参数方面更加灵活。例如,对于
ER_WRONG_VALUE_FOR_VAR错误, perror理解以下任何参数:1231,001231,MY-1231, orMY-001231, orER_WRONG_VALUE_FOR_VAR。如果错误号在 MySQL 和操作系统错误重叠的范围内,则perror会显示这两种错误消息。(漏洞#27462408)
-
新
INFORMATION_SCHEMA.KEYWORDS表列出了被 MySQL 视为关键字的词,并为每个词指出它是否被保留。该表为应用程序提供了 MySQL 关键字信息的运行时源。请参阅 INFORMATION_SCHEMA KEYWORDS 表。此外,如果您从源代码构建 MySQL,构建过程会生成一个
keyword_list.h头文件,其中包含一组关键字及其保留状态。这个文件可以在sql构建目录下的目录中找到。此文件对于需要关键字列表的静态源的应用程序可能很有用。
使用 Debian 软件包安装或升级现在会显示一个对话框,其中包含用于将默认身份验证插件设置为
mysql_native_password. 这对于某些安装站点的向后兼容性可能很有用。(错误#27454287,错误#27667294)compile_innodb脚本不再使用 ,并已从 MySQL 发行版中删除。感谢 Alexey Kopytov 的建议。(漏洞 #27448099,漏洞 #89437)
-
一个新的性能模式表
log_status提供的信息使在线备份工具能够复制所需的日志文件,而无需在复制过程中锁定这些资源。查询表时log_status,服务器会阻止日志记录和相关的管理更改足够长的时间来填充表,然后释放资源。该log_status表通知在线备份它应该复制到 master 的二进制日志中的哪个点,以及gtid_executed记录,以及每个复制通道的中继日志。它还提供了各个存储引擎的相关信息,例如最后一个日志序列号(LSN)和为 InnoDB 存储引擎采取的最后一个检查点的 LSN。BACKUP_ADMIN访问表需要 权限log_status。(缺陷号 27599831) Performance Schema 对象现在具有默认字符集
utf8mb4. (漏洞#27407745)
-
MySQL 8.0 版本现在使用 OpenSSL 而不是 yaSSL 作为默认的 SSL 库。MySQL 不再支持使用 yaSSL 构建,并且源代码分发不再包含 yaSSL。
CMake选项不再允许 ( 使用yaSSL)作为有效值,并且默认选项值已从更改 为(使用主机系统上安装的 OpenSSL 版本)。
WITH_SSLbundledbundledsystem代替 yaSSL,wolfSSL 可用作具有 GPLv2 兼容许可证的功能等效替代方案。另外,wolfSSL(和OpenSSL一样)支持TLSv1.2协议,而yaSSL不支持。
有关使用 wolfSSL 从源代码构建 MySQL 的说明,请参阅
extra/README-wolfssl.txtMySQL 源代码分发中的文件。CMake选项现在 允许作为有效值。要使用,您必须按照 中的说明进行操作 。(漏洞#26671671)WITH_SSLwolfssl-DWITH_SSL=wolfsslREADME-wolfssl.txt 如果使用 OpenSSL 1.0.2 编译,MySQL 现在支持 FIPS 模式,并且 OpenSSL 库和 FIPS 对象模块在运行时可用。FIPS 模式对加密操作施加条件,例如对可接受的加密算法的限制或对更长密钥长度的要求。系统变量可以在
ssl_fips_mode服务器端控制 FIPS 模式。--ssl-fips-modeclient 选项允许在客户端控制这些程序的 FIPS 模式: mysql、 mysqladmin、mysqlbinlog、 mysqlcheck、mysqldump、 mysqlimport、mysqlpump、 mysqlshow、 mysqlslap、 mysqltest、 mysqlxtest、 mysql_secure_installation和 mysql_upgrade。请参阅 FIPS 支持。
-
不兼容的更改: 已实施这些几何集合更改:
支持几何集合数据类型的标准
GeomCollection名称作为GeometryCollection数据类型名称的同义词。支持函数作为
GeomCollection()函数的同义词GeometryCollection()。GeomCollection并且GeomCollection()是首选的数据类型和函数名称。
不兼容性:由于首选数据类型名称的更改,一些
INFORMATION_SCHEMA表、语句(例如SHOW CREATE TABLE和ST_GeometryType()显示数据类型信息的函数)现在显示GEOMCOLLECTION而不是GEOMETRYCOLLECTION。GEOMETRYCOLLECTION应调整 查找的应用程序以说明此更改。有关详细信息,请参阅 GeometryCollection 类和 创建几何值的 MySQL 特定函数。
减少 GIS 处理浮点结果的编译器和平台差异可以简化相关测试用例,不再需要舍入以避免虚假测试失败。感谢 Daniel Black 提供的补丁。(错误#26540102、错误#87223、错误#27462294)
当使用 MySQL 作为文档存储时,
SPATIAL现在完全支持使用 X DevAPI 在几何值列上使用索引。以前,可以创建空间索引,但空间参考系统标识符 (SRID) 未包含在索引列中,因此优化器未使用该索引。该SRID属性现已添加到索引列中。(漏洞#27568243)用于 X 插件测试的套接字文件现在限制为 22 个字符的文件名。(漏洞 #27460677,漏洞 #89464)
当空主机名用于 X 插件连接时,错误 #26328274 的修复导致调试版本中出现断言。该问题现已解决。(错误#27266584,错误#88925)
PLAIN当未设置密码的用户帐户与身份验证方法 一起使用时,X 插件不会填充密码缓存。这导致以后的身份验证尝试失败。如果用户帐户的密码为空,密码缓存现在会正确填充一个条目。(漏洞#27257722)X Plugin 现在支持
RESTARTSQL 语句,该语句是在 MySQL 8.0.4 中添加的,以使 MySQL 服务器实例能够从客户端会话中重新启动。(漏洞 #27245319)从版本 8.0.4 开始,使用 X 协议的 MySQL Shell 连接可以使用 TCP 或 Unix 套接字。此修复允许将加密协议用于 UNIX 套接字连接,因此需要加密连接的用户帐户能够连接。(漏洞 #27192091)
Bug #26647488 的修复更正了
DATETIME数据类型的处理,现在还可以正确解码从旧版本插件接收的消息,这些消息没有可用于识别数据类型的新字段。(缺陷号 27169735)当连接选项中指定的默认数据库无效时,使用 X 协议的 X 插件连接尝试不会返回错误,并且允许使用空默认数据库进行连接。使用经典 MySQL 协议的连接尝试确实返回错误并不允许连接。如果指定了无效的模式,X 协议连接尝试现在也不允许连接。(缺陷号 26965020)
X 插件现在默认加载,这意味着不再需要安装该插件。
InnoDB:表空间 的ibd2sdi序列化字典信息 (SDI) 提取实用程序
InnoDB现在支持一个--pretty选项,该选项控制 SDI 数据的 JSON 漂亮打印格式。默认情况下启用漂亮的打印格式。禁用漂亮的打印格式可以--skip-pretty减少提取的 SDI 数据的大小。(漏洞#27546514)InnoDB: 为了提高具有大型缓冲池的系统的启动性能,缓冲池初始化现在是多线程的。(漏洞 #22963374,漏洞 #80784)
-
InnoDB: 实施了以下重做日志优化:
用户线程现在可以在不同步写入的情况下并发写入日志缓冲区,并以宽松的顺序将脏页添加到刷新列表。
专用日志写入器线程现在负责将重做日志记录从日志缓冲区写入系统缓冲区,并将系统缓冲区刷新到重做日志文件。
-
添加了系统变量,用于配置等待刷新重做的用户线程使用自旋延迟:
innodb_log_wait_for_flush_spin_hwm:定义最大平均日志刷新时间,超过该时间用户线程在等待刷新重做时不再旋转。innodb_log_spin_cpu_abs_lwm:定义最小 CPU 使用量,低于此值用户线程在等待刷新重做时不再旋转。innodb_log_spin_cpu_pct_hwm:定义最大 CPU 使用率,超过该值用户线程在等待刷新重做时不再自旋。
配置选项现在是动态的
innodb_log_buffer_size,允许在服务器运行时调整日志缓冲区的大小。
有关更多信息,请参阅 优化 InnoDB 重做日志记录。
macOS: macOS 安装程序现在要求用户输入
root密码,而不是随机生成密码。(漏洞 #22608157,漏洞 #80144)macOS: macOS 安装程序中包含的 MySQL 首选项窗格现在包含一个设置,该设置指定
my.cnf服务器在启动时应读取哪个文件launchd。(缺陷 #19775549,缺陷 #74214)Solaris: 在 Solaris 上,现在可以使用 Developer Studio 12.6 构建 MySQL。(错误#27055190、错误#88316、错误#28165246、错误#91214)
-
数据目录初始化期间的日志记录(例如,使用 mysqld --initialize)已更改:
启动消息表明服务器正在初始化模式下运行。
写入一条消息指示初始化何时完成。
有关 CA 证书是自签名的消息被抑制。
(漏洞 #27557952,漏洞 #89693)
如果启用日志记录,
-log则后缀不再附加到服务器版本字符串。例如,这会影响version系统变量的值。(缺陷 #27532097,缺陷 #89626)写入错误日志的服务器关闭行现在包括服务器版本。(漏洞 #27522788,漏洞 #87910)
SHOW CREATE TABLEROW_FORMAT如果行格式是默认格式,通常不显示表格选项。这可能会在可传输表空间的表导入和导出操作期间导致问题。MySQL 现在支持一个show_create_table_verbosity系统变量,当启用时, 无论它是否是默认格式都会导致SHOW CREATE TABLE显示 。ROW_FORMAT(漏洞#27516741)性能架构内存检测开销减少了。(漏洞 #27500610)
在数据目录初始化期间,服务器使用
sql_mode=''. 现在服务器使用默认sql_mode值(除其他设置外,还包括严格模式)。(漏洞 #27476029,漏洞 #89495)中定义的归类
mysql-test/std_data/Index.xml仅用于测试目的,不应以其他方式使用。注释已添加到文件中以明确这一点,因为一些用户在非测试环境中使用它们。(漏洞#27421838)RESET PERSIST不再执行隐式提交。(漏洞#27374791)对于持久变量,
SET_TIMEPerformance Schemavariables_info表的列现在反映了变量被持久化的时间,而不是服务器启动时间。(漏洞#25677422)以前,
SHOW CREATE TABLE如果排序规则与表默认值相同,则不会显示列的排序规则,即使在创建表时明确指定了排序规则也是如此。现在,SHOW CREATE TABLE如果明确指定了排序规则,则始终显示列排序规则,即使排序规则与表默认值相同。(缺陷 #11754608,缺陷 #46239)
重要更改:
NO_ZERO_DATE启用 SQL 模式 时ALTER TABLE拒绝尝试添加DATE或DATETIME声明NOT NULL到非空表的列(如果未DEFAULT为该列指定)。由于生成的列没有默认值,此限制还阻止将生成的DATE NOT NULL或DATETIME NOT NULL列添加到非空表。由于用于生成列的表达式可用于代替缺少的默认值来确定列值,因此现在对生成的列取消了此限制。(漏洞 #27252354)重要变化: 对于
ANALYZE TABLE ... UPDATE HISTOGRAM语句,子句现在是可选的。如果未指定,则默认值为 100。(错误 #89909,错误 #27637968)WITHNBUCKETSBUCKETSInnoDB: 在将致命错误消息写入错误日志之前,服务器已停止。(缺陷号 27626478)
InnoDB: 在确定是否可以授予等待锁时,被回滚的受害者事务持有的锁被忽略。(漏洞 #27607235)
InnoDB:
Sdi_Decompressor::decompress()使用 GCC 7.2.0 编译调试版本时 发生错误 (漏洞#27565889)InnoDB: 在并行创建多个缓冲池期间注册缓冲池块时引发断言。互斥量现在用于保护缓冲池块映射中缓冲池块的注册。(漏洞 #27565865)
InnoDB: 启用标准监视器导致错误。(漏洞 #27534041)
InnoDB: 用于将列标记为隐藏的内部字段已从布尔字段更改为枚举字段,以支持额外级别的列可见性。(漏洞 #27499518,漏洞 #89553)
InnoDB: 与 zlib 相关的无效 Valgrind 故障报告有条件跳转或移动取决于未初始化的值。(漏洞 #27482740,漏洞 #89509)
InnoDB:使用存储引擎和 排序规则 了不正确的
GROUP BY结果(漏洞#27454796)TempTableNO PADInnoDB: 页面压缩函数中不正确的压缩长度值导致在第一次压缩页面时跳过打孔。(漏洞#27399897)
InnoDB: 使用不正确的
--log-bin选项值启动服务器会引发断言,随后尝试使用正确的--log-bin值或没有--log-bin选项启动服务器会继续产生断言失败。(漏洞#27393317)InnoDB:在操作 期间插入 LOB 时,未更新大对象 (LOB) 引用
UPDATE。(缺陷号 27368662)InnoDB: 重启服务器后,
TRUNCATE TABLE由于表标志与内存中存储的远程数据目录信息不一致,操作引发断言。(漏洞#27367639)InnoDB: Attempting to create a temporary table in a file-per-table tablespace using
CREATE TEMPORARY TABLE ... TABLESPACEsyntax failed 报错。临时表空间只允许在临时表空间中使用。(漏洞#27361662)InnoDB: 在另一个线程尝试分配页面之前,未释放大对象 (LOB) 第一页上的闩锁,导致死锁。(漏洞#27360492)
-
InnoDB: 通过引入跟踪最小活动事务 ID 的成员变量优化了将隐式锁转换为显式锁。
感谢翟伟祥的补丁。(漏洞 #27353468,漏洞 #89127)
InnoDB:存储引擎内部使用的表 和
mysql.innodb_ddl_log表现 不再允许对这些表执行 DDL 和 DML 操作,并且这些表不再出现在查询结果中。(缺陷 #27353455,缺陷 #89129)mysql.innodb_dynamic_metadataInnoDBINFORMATION_SCHEMAInnoDB: 升级
innodb_page_size设置为 4K 的 MySQL 5.7 实例导致mysql_upgrade失败,并显示 “指定的密钥太长;最大密钥长度为 768 字节”创建或修改系统表时出错。该错误被抑制以允许 mysql_upgradeinnodb_page_size客户端在 设置为 4K的实例上运行(缺陷号 27338431)InnoDB: 恢复过程无法正确确定 space_id 值,导致服务器退出。(漏洞#27331936)
-
InnoDB:修改索引列的可空性 的
ALTER TABLE操作引发了断言。InnoDB错误地假设必须添加新的主键而不是从现有的唯一键创建。(漏洞 #27330454,漏洞 #89087)参考:这个问题是 Bug #24397406 的回归。
InnoDB:操作 后
ALTER TABLE ... IMPORT TABLESPACE,无法从INFORMATION_SCHEMA.INNODB_COLUMNS表中正确检索元数据。(漏洞 #27322099)InnoDB:
INSERT涉及大对象 (LOB) 值 的拆分 LOB 片段后,目录条目的空间不足。(漏洞#27320977)InnoDB: 在使用 utf8mb4 字符集的服务器上,
INSERT或UPDATE在ALTER TABLE更改包含虚拟列的表的行格式的操作期间导致索引损坏。(漏洞#27319084)InnoDB:
INFORMATION_SCHEMA.INNODB_COLUMNS对于包含虚拟列的表, 从中检索的数据 (漏洞 #27316037)InnoDB: 由于密钥环文件无效,服务器在恢复后无法启动。从备份创建的密钥环文件是空的。(漏洞#27307740)
InnoDB: 后台线程之间的死锁,一个试图从缓存中逐出全文搜索表,另一个试图同步表,导致 InnoDB Cluster 节点失败。(漏洞 #27304661)
InnoDB: 纠正了
InnoDB恢复消息中的拼写错误。感谢 Daniël van Eeden 提供补丁。(错误#27287979、错误#27010613、错误#88185)InnoDB:
InnoDB在恢复 期间报告了一条消息,指出缺少加密算法支持(缺陷号 27286020)InnoDB: 丢失或不匹配的密钥环文件导致启动时断言失败。(缺陷号 27278324)
InnoDB: 返回错误,指示在检查加密表空间文件的空间 ID 时缺少加密支持。(缺陷号 27278100)
InnoDB:打印“打开文件过多”警告 的调试消息 现在仅在打开文件数达到 300 个限制时打印。(错误 #27277844)
InnoDB: 在释放间隙锁时未能跳过谓词锁会引发调试断言,就像在释放 supremum 上的间隙锁之前未能删除 supremum 记录位一样。(错误#27272806,错误#27294066)
InnoDB: 在克隆的数据目录上启动服务器时发生表空间 ID 发现失败。(漏洞#27265874)
InnoDB: 未受保护的全局变量 (
fil_n_file_opened) 在关闭服务器时导致断言。(漏洞 #27265473)InnoDB: 在检查正在使用的文件上的挂起 I/O 时,提出了一个不再有效的断言。(漏洞 #27263206)
InnoDB: 空的通用表空间导致升级到 MySQL 8.0 时失败。空数据文件应具有特定页数。(漏洞 #27261822)
InnoDB: 启动失败,因为
--innodb-directories选项指定的目录包含密钥环数据文件。该--innodb-directories选项应该只识别InnoDB表空间文件。(漏洞#27253116)InnoDB: 计算最小边界矩形 (MBR) 大小增加的函数错误地返回 0,导致 R 树损坏。(漏洞#27237472)
InnoDB:对临时表 的
REPLACE操作引发了断言。(错误#27225649,错误#27229072)InnoDB:对表 的在线
ALTER TABLE操作伴随着对同一个表的并发 DML 引发了断言。在访问 DML 日志以确定虚拟列的长度之前,未执行日志结束检查。(缺陷号 27158030)InnoDB: 当添加虚拟索引失败时,释放的虚拟索引没有从虚拟列索引列表中删除。(漏洞#27141613)
InnoDB: 在同一语句中添加虚拟列和索引导致错误。(漏洞#27122803)
InnoDB: 撤消表空间截断操作引发了断言。确定撤消表空间段是否处于非活动状态的检查无效。(漏洞#27114068)
InnoDB: 当 TempTable 存储引擎无法使用临时文件和 mmap 分配内存时,报告了一个无效错误,表明将使用定义的磁盘存储引擎。(缺陷号 26990375)
InnoDB: 在调试工具中错误地定义了闩锁顺序,导致在
INSERT操作期间违反闩锁顺序。(漏洞#26983412)InnoDB: 服务器上的表空间导入操作,默认行格式
REDUNDANT引发断言失败。(缺陷号 26960215)InnoDB: 基于生成列的存储字段允许基列具有 NULL 值。(漏洞#26958695)
InnoDB: 解析函数中子查询的评估引发了断言。(漏洞#26909960)
InnoDB: 与数据字典操作相关的锁导致性能下降
CREATE TABLE。(错误#26848711,错误#87827)InnoDB: 操作
LOCK INSTANCE FOR BACKUP能够在不等待并发 DDL 操作完成的情况下获取备份锁。(漏洞 #26831155,漏洞 #87812)InnoDB: An incorrectly specified
innodb_data_file_pathorinnodb_temp_data_file_pathvalue 返回语法错误,未指定导致初始化失败的系统变量的名称。(漏洞 #26805833)-
InnoDB: 为操作打开的处理程序
TRUNCATE TABLE导致操作断言。服务器现在在删除表之前关闭打开的处理程序。此错误的补丁还改进了
TRUNCATE TABLE与外键约束相关的错误消息,并使截断损坏的表成为可能。(缺陷号 26710839) InnoDB: 当要应用的最后一条插入日志记录被拆分成两页时,重建表的在线 DDL 操作引发断言。(错误#26696448,错误#87532)
InnoDB: 尝试生成依赖于尚未存储的页外大对象值的虚拟列值时引发断言。(漏洞#26625652)
InnoDB: R-tree 搜索计算了删除标记的记录,导致它找到的记录多于聚集索引中的记录。结果,有效的 R 树索引被标记为已损坏。(漏洞 #26381207)
InnoDB:重命名模式 的
RENAME TABLE操作未能重命名先前删除全文搜索索引时留下的全文搜索公共辅助表,导致在尝试删除旧模式时断言失败。(漏洞#26334149)-
InnoDB: 当一个线程试图读取包含 BLOB 数据的记录而另一个线程正在将相同数据写入外部页面时,会引发断言。(漏洞 #26300119)
参考资料:此问题是 Bug #23481444 的回归。
InnoDB: 外部存储列的列前缀超出了联机日志中的可用内存量。(缺陷号 25928471)
InnoDB: 删除了一个有问题的锁,该锁被引入以保护在检查点期间将动态元数据更改写入重做日志。现在改用互斥锁。检查点 LSN 也进行了调整以保护动态元数据更改。(缺陷号 25834374)
InnoDB:
InnoDB在使用列偏移量搜索自动增量列的索引时无法说明虚拟列。(缺陷号 25076416)-
InnoDB: 无效的调试条件导致缓冲池块分配失败,当清除线程试图访问未分配的块时导致断言失败。(缺陷号 23593654)
参考资料:此问题是 Bug #21348684 的回归。
InnoDB:
InnoDB由于票证获取死锁, 线程无法进入 (缺陷号 23476050)分区: 存储引擎在执行
ALTER TABLE EXCHANGE PARTITION时返回的错误没有被服务器正确处理。(缺陷号 27320682)Replication: 当 MySQL 已启动
--plugin-load='group_replication.so'但 Group Replication 未启动时,启动异步从通道会导致服务器无响应。(漏洞#27584141)复制: 已回滚的空 XA 事务不应记录在二进制日志中或添加到
gtid_executed系统变量中的事务集。但是,如果回滚的空 XA 事务是在以XA COMMIT ... ONE PHASE语句结束的空 XA 事务之后执行的,则它们会作为语句错误地添加到二进制日志中XA ROLLBACK,并且还会添加到 gtid_executed 系统变量中。该问题现已解决。(漏洞#27435974)复制: 组复制文件已从
rapid目录移动到plugin目录。(漏洞#27413789)复制: 当系统变量
gtid_next设置为 AUTOMATIC 时,回滚且未记录在二进制日志中的空 XA 事务被错误地添加到gtid_executed系统变量中的事务集中,从而导致不一致。回滚的空 XA 事务不再记录在gtid_executed. (漏洞 #27407670)复制: 组复制冲突检测使用架构和表名称作为主键等效项 (PKE) 的一部分,以检测和禁止冲突事务。系统变量的值
lower_case_table_names改变了模式和表名称的存储和外部化方式,这取决于配置的值可以将名为 T1 的表持久保存为 t1。组中的这种差异可能会导致不一致。现在,成员必须都具有相同的 值lower_case_table_names。(漏洞 #27401817)复制: 在 macOS 上的任何组复制相关配置中使用 IP 地址或主机名失败。(错误#27376511、错误#89123、错误#27604471)
复制: 在线次要成员上错误地更改组复制所需的设置可能会导致意外停止。(错误#27317478,错误#27157202)
复制:
LAST_CONFLICT_FREE_TRANSACTION性能模式表 中 的值replication_group_member_stats未在组成员之间正确同步。(漏洞#27317431)复制: 发出后
START GROUP_REPLICATION系统gtid_mode变量被锁定以防止对其值进行任何修改,直到该组在线。gtid_mode在此期间任何修改尝试 作为启动 Group Replication 过程的一部分,服务器需要设置super_read_only=off,这依赖于SET GTID_MODE. 这可能会导致 Group Replication 挂起,并且无法连接到服务器来解决这种情况。为防止这种情况,当无法获取SET GTID_MODE操作所需的锁时中止。(漏洞#27312241)复制: 当一个成员加入一个组时,加入请求有可能被拒绝。如果拒绝导致重试,例如因为正在联系的种子成员不在组中,则重试循环有可能无限继续下去。(漏洞 #27294009)
复制: 万一组启动失败,例如因为无法联系到种子成员,组会在一分钟内重试启动过程。在此期间尝试修改组复制插件选项可能会导致意外停止。现在,尝试在插件启动或停止期间修改 Group Replication 插件选项会导致错误。(漏洞#27275312)
-
复制: 默认的二进制日志有效期 30 天现在设置为
binlog_expire_logs_seconds系统变量的默认值,而不是弃用的expire_logs_days系统变量。binlog_expire_logs_seconds现在默认值为 2592000(30*24*60*60 秒),expire_logs_days现在默认为零。在 MySQL 8.0.3 和 8.0.4 中, 和 的影响
binlog_expire_logs_seconds是expire_logs_days累积的。从 MySQL 8.0.11 开始,情况不再如此,新的行为如下:如果为这两个变量指定一个非零值,则只有 的值
binlog_expire_logs_seconds用于确定二进制日志有效期,而expire_logs_days忽略 的值。如果您仅为一个变量指定非零值,则该值用于确定二进制日志有效期,并且不应用另一个的默认值。
如果您没有为这两个变量指定值,则 使用默认的 30 天
binlog_expire_logs_seconds作为二进制日志有效期。
如果您尝试在其中一个变量已设置时动态设置另一个变量,则会发出错误消息;如果您在启动时为两个变量指定非零值,则会发出警告消息。如果您为 设置值,也会发出弃用警告
expire_logs_days。要禁用二进制日志的自动清除,请为 明确指定值 0
binlog_expire_logs_seconds,并且不要为 指定值expire_logs_days。为了与早期版本兼容,如果您明确指定值 0expire_logs_days而未指定值 ,则自动清除也会被禁用binlog_expire_logs_seconds。在这种情况下,binlog_expire_logs_seconds不应用默认值。您不再需要将两个变量都设置为零以禁用自动清除。(漏洞#27252658) 复制: 尝试在配置为在启动时自动启动插件的服务器上卸载组复制插件可能会导致死锁。现在,卸载过程会检查以确保插件不在启动过程中,如果是,则优雅地失败。(缺陷号 27179336)
复制: DDL 语句
CREATE DATABASE、ALTER DATABASE和DROP DATABASE不再允许与多线程从站上的其他语句并行执行。slave_preserve_commit_order=1这些语句需要模式上的独占元数据锁,当在复制从站上设置时,理论上可能会导致死锁 (漏洞#27165446)复制: 在禁用二进制日志记录的复制从站上,一个空的 DDL 语句(例如,由于复制过滤器)引发了断言。启用二进制日志记录后,
BEGIN语句COMMIT将写入二进制日志以生成事务,但禁用二进制日志记录后这些语句不可用,从而导致断言。MySQL Server 现在检查 DDL 事务为空且未标记为已启动的情况,并在不引发断言的情况下进行处理。(缺陷号 27164661)-
复制: 一个新的系统变量
rpl_read_size可用于设置从二进制日志文件和中继日志文件读取的最小数据量(以字节为单位)。默认读取大小为 8KB。如果这些文件的繁重磁盘 I/O 活动阻碍了数据库的性能,如果文件未被操作系统缓存,则增加读取大小可能会减少文件读取和 I/O 停顿。请注意,为从二进制日志和中继日志文件读取的每个线程分配了此值大小的缓冲区,包括主服务器上的转储线程和从服务器上的协调器线程。因此,设置较大的值可能会对服务器的内存消耗产生影响。
感谢 Facebook 团队提供补丁。(漏洞 #27147095)
-
复制: 在启用了 GTID 的服务器上,如果
RESET MASTER在事务已刷新但尚未提交时使用,则服务器 GTID 将处于不正确的状态。此时,事务的 GTID 已添加到拥有的 GTID 集合中,但尚未添加到已执行的 GTID 集合中。语句清除未提交事务的内容时,GTID被从二进制日志中移除RESET MASTER,但由于GTID已经被拥有,因此无法重用,因此GTID的顺序出现了间隙。通过此修复,
RESET MASTER获取全局读锁以确保在其操作期间没有事务处于提交阶段,并且在其操作期间没有新事务进入提交阶段。如果有任何正在进行的提交,RESET MASTER请等待它们完成。重置完成后释放全局读锁,然后通知存储引擎重置成功。如果FLUSH TABLES WITH READ LOCK已经为线程执行过,RESET MASTER则不重试锁。(漏洞 #27041759) 复制: 尝试使用
SET @@SESSION.GTID_NEXT语句为不安全或空的 XA 事务设置 GTID 未得到正确处理。在gtid_mode设置为OFF或OFF_PERMISSIVE并enforce_gtid_consistency设置为OFF,为不安全的 XA 事务设置 GTID(创建或删除临时表)导致服务器的 GTID 违规计数器不一致并引发断言。测试还表明,为空 XA 事务设置 GTID 会导致将不正确的事件序列写入二进制日志。这两种情况现在都得到了正确处理。(错误#27041402,错误#88272)复制: 在旋转二进制日志时为服务器停止发出的错误消息没有说明问题的正确原因。错误消息已得到增强,将导致服务器停止的实际错误作为消息的一部分包含在内。
ER_OOM_SAVE_GTIDS对于在将最后一个二进制日志中的 GTID 集保存到表中时发生内存不足错误的情况,还添加了 一个新错误mysql.gtid_executed。(漏洞 #27040070,漏洞 #88262)复制: 组复制使用事务写入集提取来检测组成员的冲突。在详细的性能分析过程中,在此过程中发现了性能退化,已通过此错误修复进行处理。内存分配已针对写集提取进行了优化,内存复制操作已减少。此外,现在仅当当前表具有外键时才收集外键写入集。(漏洞 #27016053)
-
复制: 语句
CREATE USER IF EXISTS(orIF NOT EXISTS) 和ALTER USER IF EXISTS(orIF NOT EXISTS) 被写入二进制日志,即使查询导致错误。MySQL 服务器现在会检查导致这些查询失败的错误(例如,指定了无效的插件),并且不会记录那种情况下的语句。请注意,如果这些语句成功但由于不满足条件而对主服务器没有影响,则这些语句将写入二进制日志,因为条件可能在复制从属服务器上得到满足(参见错误#25813089,错误#85733)。(缺陷号 26680035)参考资料:另请参阅:Bug #25813089、Bug #85733。
复制: 在多主组中,当成员也配置了异步复制通道时,异步通道可能会在组复制启动之前启动。这可能会导致异步通道在成员成为群组的在线成员之前处理事务,从而在成员尝试加入群组时导致问题。此修复可确保组成员上的异步通道在成员联机之前不会启动。(缺陷号 26648393)
复制: 在 MySQL 8.0 中引入对原子 DDL 的支持后,支持原子 DDL 的复制从属可以与不支持原子 DDL 的早期 MySQL 版本的复制主分离。如果DDL语句只能应用部分,使用MySQL 8.0的slave会回滚整个DDL语句,但是使用更早版本的master可能会提交DDL语句的有效部分。如果在主从上的原子 DDL 语句提交不成功,现在会记录一条错误消息,您应该在继续之前检查主从的状态是否不同。(缺陷号 26133488)
-
复制: 当在复制主机和从机上启用 GTID,并且从机连接到带有
MASTER_AUTO_POSITION=1选项集的主机时,主机必须向从机发送从机尚未接收、提交或两者都没有的所有事务。如果任何应该由主服务器发送的事务已经从主服务器的二进制日志中清除,主服务器将错误ER_MASTER_HAS_PURGED_REQUIRED_GTIDS(1789) 发送到从服务器,并且复制不会开始。为错误提供的消息
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS已更改为在这种情况下提供有关正确操作的建议,即从服务器从另一个源复制丢失的事务,或者从更新的创建的新从服务器替换从服务器备份。该消息建议可以修改主服务器的二进制日志有效期以避免将来出现这种情况。此外,master 现在识别已清除事务的 GTID,并在警告消息ER_FOUND_MISSING_GTIDS(11809) 的错误日志中提供它们,因此您无需手动计算丢失的 GTID。(错误#26004541,错误#29769293) 复制: 对于包含 BLOB 数据类型的虚拟生成列的更新,某些存储引擎需要旧 BLOB 值和新 BLOB 值进行复制。此修复将相同的行为扩展到 JSON 和 GEOMETRY 数据类型,它们基于 BLOB 数据类型,因此在未存储旧值时会产生相同的问题。(缺陷号 25873029)
复制: MySQL 8.0.0 中的行为更改将生成列的标识从二进制日志记录的写集计算之前移到了之后。这导致 NDB 集群复制出现问题,因为如果不需要,存储引擎会从日志事件中忽略生成的列,从而导致
NULL复制从属服务器上的应用程序线程为它们设置值。生成列的标识现在已移回写入集计算之前,因此不会出现该问题。(缺陷号 25827408)复制: 在多线程复制从站(
slave_parallel_workers大于 0)上,从站滞后于主站未被Seconds_Behind_Master字段SHOW SLAVE STATUS。现在可以正确报告该值。感谢 Robert Golebiowski 提供的补丁。(漏洞 #25407335,漏洞 #84415)复制: 加号 (
+) 可以与语句中的 GTID 集一起使用,SET @@GLOBAL.GTID_PURGED以指示指定的 GTID 集与 不相交gtid_executed。GTID_SUBSET()为函数和 指定的 GTID 集也允许使用加号GTID_SUBTRACT(),但它没有意义。这些函数不能再指定加号。此外,与操作相关的错误消息SET @@GLOBAL.GTID_PURGED也得到了改进。(漏洞#24675979)复制: 当使用选项
--read-from-remote-server和--hexdump, mysqlbinlog无法在生成自动增量值、引用用户定义变量或调用的 SQL 语句之后生成二进制日志内容的十六进制转储RAND()。这些事件的事件类型后跟一个信息行查询日志事件,以及mysqlbinlog缓存原始事件,以便在收到后续行查询日志事件时打印。当接收到后续事件时,指向包含原始事件的内存的指针无效,因此无法访问原始数据以生成十六进制转储。该问题现已解决。(漏洞#24674276)复制: 对二进制日志解码过程进行了许多更改,以改进对无效或损坏的二进制日志条目的处理。(漏洞 #24365972)
复制: 在为 XA 事务引入二进制日志记录 WL#6860之后,如果在从属服务器上设置了从具有该功能的主服务器复制到不具有该功能的从服务器,则可以在调试构建中引发断言
MASTER_AUTO_POSITION=1。断言已被删除,因此调试版本现在具有与非调试版本相同的行为,并且可以尝试复制不受支持的事件类型,无论是否MASTER_AUTO_POSITION=1设置。(缺陷号 20677683)复制: 使用 时
group_replication_ip_whitelist,可以配置一个组,使其在所有成员无法相互建立内部组通信连接的情况下正常运行,从而导致行为不一致。现在,如果 IP 在白名单中或者 IP 属于 XCom 配置的当前成员,则传入连接将被接受。这可确保成员始终能够创建群组通信所需的内部网络。(错误#87834、错误#26846549、错误#27406775)Linux: 基于 Alpine Linux 的构建现在可以利用 AIO 支持。(漏洞#27327874)
macOS: 在 macOS 上, mysql_config --libs没有列出任何 SSL 库。(漏洞#27232576)
Microsoft Windows: 在 Windows 上,该
RESTART语句是通过让mysqld fork 实现的,其中一个进程充当另一个进程的监视器,另一个进程充当服务器。这使得确定要附加到调试的服务器进程变得更加困难。为了缓解这种情况,使用--gdbnow 启动服务器会抑制分叉。副作用是对于使用此选项启动的服务器,RESTART只会退出并且不会重新启动。(漏洞#27273229)JSON:在某些情况下, 该
JSON_QUOTE()函数可能会将带引号的字符串写入保存输入字符串的同一缓冲区,这可能会导致错误的结果。现在进行检查以确保它不会尝试写入它正在读取的同一缓冲区。(漏洞#27312444)-
JSON:
JSON_SEARCH()不再对缓存对象执行任何修改 表示路径Json_path的对象进行任何必要的更新这节省了路径和String之间所需的往返次数 ,从而加快了执行速度。此外, 不必要地缓存和 参数 这些参数不再被缓存,这也应该会缩短这个函数的执行时间。(漏洞 #87383,漏洞 #26614455)Json_pathStringone_or_allescape_charJSON_SEARCH()参考资料:另请参阅:Bug #21450084、Bug #77785、Bug #21472872。
根据数据字典版本信息实施检查,以防止使用由更高版本的 MySQL 版本创建的数据目录启动 MySQL 8.0 服务器。检查是必要的,以防止当前不支持的就地降级。(漏洞#27708249)
放置在服务器初始化文件中的语句不再可以访问受保护的数据字典表。(缺陷 #27674311,缺陷 #90010)
数据字典和
INFORMATION_SCHEMA版本号与新的 MySQL 服务器版本号同步。(漏洞#27674285)服务器没有正确处理某些 使用带有前缀索引的列的
LIKE查询 。BLOB(缺陷号 27660560)对于使用配置的构建
-DWITH_PROTOBUF=SYSTEM,在安装了 Protobuf 3.5 的系统上构建失败。(错误#27638713,错误#89915)与持久变量一起存储的时间戳的微秒部分
mysqld-auto.cnf始终为 000000。(缺陷 #27629719)Debian 软件包现在处理 MeCab 插件字典文件的依赖关系。Fedora 软件包现在处理两个 MeCab 软件包的依赖关系,而不仅仅是 utf-8 软件包。(错误#27612730,错误#27613539)
MySQL 8.0.11 中针对使用 systemd作为正常进程 运行 mysqld
Type=notify并使用套接字文件进行通信的平台的更改在 SLES 12.2 之前的 SLES 上不起作用。(漏洞 #27604999)表中的
NON_UNIQUE列在 MySQL 8.0 之前INFORMATION_SCHEMA.STATISTICS有类型BIGINT,但VARCHAR在 MySQL 8.0 中引入数据字典后变成了类型。该NON_UNIQUE列现在再次具有整数类型(INT因为该列不需要和 一样大BIGINT)。(缺陷 #27593348,缺陷 #89793)对于某些输入,
ST_Crosses()可能会导致服务器退出。(缺陷号 27576700)一些错误消息被写入错误日志,错误 ID 为 0 而不是合法的错误 ID。(漏洞 #27575608)
mysql_upgrade没有设置
MYSQL_SERVER_PUBLIC_KEY正确,导致读取密钥文件失败。(漏洞#27568278)如果
autocommit被禁用, mysql_upgrade在从 MySQL 5.7 升级到 8.0 时会产生错误。(漏洞 #27549249)PROCESSLIST_STATE对于调试版本,从Performance Schema 表的列中 显示非常长的阶段名称threads可能会引发断言。(漏洞#27545688)如果某些必需的变量已设置为持久变量,或者未按正确的时间戳顺序设置持久变量,则组复制无法启动。(错误#27545544,错误#27522405)
gtid_purged处理有内存泄漏。(漏洞 #27537968,漏洞 #89645)服务器重启后,使用
SET PERSIST持久化会optimizer_trace_offset导致变量值不正确。(缺陷号 27536421)该
validate_password组件可能会泄漏内存。(漏洞 #27521770,漏洞 #89597)一个错别字
sql/handler.h已更正。感谢 Su Tristan 提供的补丁。(漏洞 #27516280,漏洞 #89594)-
Performance Schema
variables_info表显示不正确VARIABLE_SOURCE,并且 在or 指令VARIABLE_PATH指定的选项文件中设置了变量值。(漏洞#27514223)!include!includedir参考:这个问题是 Bug #25563891 的回归。
从 MySQL 5.7 升级到 MySQL 8.0 后,第一次尝试在
--default-time-zone设置为特定时间值的 MySQL 5.7 数据目录上启动服务器,例如"+00:00"导致服务器退出。(漏洞 #27512609,漏洞 #89584)字符集内部数字的查找不是线程安全的,可能会导致内存泄漏。(漏洞 #27507950)
同时使用
-DWITH_LIBEVENT=system和CMake选项会导致配置失败。(缺陷 #27505535,缺陷 #89398)-DWITH_ICU=system某些消息正在使用客户端错误 ID 写入服务器错误日志。(漏洞 #27503787,漏洞 #89562)
在密钥迁移模式下运行时,服务器可能会报告成功操作的错误。(漏洞#27493997)
在 Fedora 27 上从 MariaDB 升级到 MySQL Community Edition 失败。(缺陷 #27484835)
ALTER TABLE可能会挂在 等待表空间元数据锁定 状态。(错误#27472087,错误#89487)从 Performance Schema
status_by_thread或variables_by_thread表中选择不是线程安全的,可能会产生不正确的结果。(漏洞 #27471510)INSERT ... ON DUPLICATE KEY UPDATE如果源表没有生成任何行,则可能无法正确处理。(缺陷号 27460607)SET PERSIST_ONLY忽略--skip-grant-tables并继续检查设置系统变量所需的动态权限。(漏洞 #27455943)对于 RPM 包和 Docker RPM 包,包含的
my.cnf文件现在包含指示如何恢复到以前的默认身份验证插件(更改caching_sha2_password为mysql_native_plugin)的信息,以与旧客户端兼容。(错误#27454015,错误#27675380)在使用 的字符串比较中
>,只有一个操作数被处理为utf32。(漏洞#27452148)初始化期间服务器退出
InnoDB导致 AddressSanitizer (ASan) 报告内存泄漏。在表包含无法解析的数据的情况下,该补丁还实现了对数据字典属性表的正确处理。(缺陷 #27447981,缺陷 #89433)使用
-DWITH_SSL=system,如果 CMake找不到系统 OpenSSL 库和头文件,它会产生令人困惑的消息。现在它立即退出并出现错误。(漏洞#27447874)使用CMake选项进行 配置会 导致链接器错误。(缺陷 #27444255,缺陷 #89412)
-DWITH_INNODB_EXTRA_DEBUG=ON配置
-DWITH_ZLIB=system导致链接器错误。(漏洞 #27435371,漏洞 #89373)来自查询结果集的元数据
UNION ALL可以说NEWDATE而不是DATE. (漏洞#27422376)在启用了 Undefined Behavior Sanitizer 的构建中,否定 -922337203685477580 可能会导致服务器退出。(漏洞#27419181)
-
启用协议压缩后,可能会出现虚假断言。(漏洞 #27418207,漏洞 #89324)
参考:这个问题是 Bug #17922198 的回归。
与从数据字典中获取表空间对象以填充数据字典缓存相关的性能得到改进。(漏洞 #27402243)
如果服务器以 启动
--skip-grant-tables,则使用插件进行身份验证的客户端caching_sha2_password无法连接。(漏洞 #27400095,漏洞 #89267)Linux RPM 和 Debian 软件包现在包含运行 MySQL 测试套件所需的 Perl JSON 模块的依赖信息。Linux RPM 包现在包含运行 MySQL 测试套件所需的 Perl Digest 模块的依赖信息。(错误#27392800、错误#89250、错误#27392808、错误#89244)
-
提供了一个新的系统变量,
default_collation_for_utf8mb4供复制在内部使用。系统变量设置为utf8mb4字符集的默认排序规则。该变量的值从主服务器复制到从服务器,以便从服务器可以正确处理来自主服务器的数据,该主服务器具有不同的默认排序规则utf8mb4。该变量主要用于支持从 MySQL 5.7 或更早的主服务器复制到MySQL 8.0 从服务器,或具有 MySQL 5.7 主节点和一个或多个 MySQL 8.0 辅助节点的组复制。utf8mb4MySQL 5.7 中 的默认排序 规则是utf8mb4_general_ci,但它是utf8mb4_0900_ai_ci在 MySQL 8.0 中。该变量在 MySQL 8.0 之前的版本中不存在,因此如果从服务器没有收到该变量的值,它会假定主服务器来自更早的版本,并将该值设置为以前的默认排序规则utf8mb4_general_ci。默认
utf8mb4排序规则用于以下语句:CREATE TABLE并且ALTER TABLE有一个CHARACTER SET utf8mb4没有子句的COLLATION子句,用于表字符集或列字符集。CREATE DATABASE有ALTER DATABASE一个CHARACTER SET utf8mb4没有子句的COLLATION子句。任何包含不带 子句 形式的字符串文字的 语句。
_utf8mb4'some text'COLLATE
(错误#27389878,错误#27081073)
DESCRIBE使用列名选项忽略列名。(漏洞 #27387773,漏洞 #89224)在密钥迁移模式下运行时,服务器会忽略无效选项。(漏洞#27387331)
SHOW GRANTS对于匿名用户可能会导致服务器退出。(漏洞 #27375069)对于非常长的路径名,路径名规范化可能会失败。(缺陷号 27368298)
在配置期间,CMake假定 rpcgen可用而不是检查它。(缺陷号 27368078)
客户端身份验证进程可以在内存被释放后使用它。(漏洞#27366143)
-DWITH_ZLIB=system可能导致其他CMake功能测试失败。(漏洞 #27356658,漏洞 #89135)在某些系统上,使用mysqld --initialize初始化数据目录非常慢。(漏洞 #27349579,漏洞 #89122)
如果必须下载 Boost,使用 RPM 源包构建现在使用安全连接。(漏洞 #27343289,漏洞 #89104)
转换 ULONGLONG 时间值的内部
check_datetime_range函数在 Windows 上引发断言。(漏洞 #27340709)身份验证插件锁定过多
caching_sha2_password(每个连接一个锁定/解锁)。现在改进为每个插件安装/卸载一次锁定/解锁。(漏洞#27335346)CREATE TABLE ... LIKE隐式分配'innodb_system'为表分区的表空间名称的操作引发了断言 。(漏洞#27331588)SET PERSIST_ONLY可能会错误地存储大值变量。(漏洞#27322254)audit_log即使禁用二进制日志记录, 该插件也可以将语句写入二进制日志。(漏洞 #27315321)某些使用 GREATEST() 或 LEAST() 的查询会产生释放后堆使用错误。(漏洞#27312703)
external_language在数据字典表中添加了 一列mysql.routines以支持不同语言的存储例程。可以通过表的EXTERNAL_LANGUAGES列 访问存储在该列中的数据INFORMATION_SCHEMA.ROUTINES。(漏洞 #27309116,漏洞 #89038)现在禁止
lower_case_table_names使用与服务器初始化时使用的设置不同的设置启动服务器。该限制是必要的,因为数据字典表字段使用的排序规则由服务器初始化时定义的设置决定,并且使用不同的设置重新启动服务器会导致标识符的排序和比较方式不一致。(漏洞 #27309094,漏洞 #89035)对于使用身份验证插件进行身份验证的帐户,
auth_sock服务器无法接受来自旧版 MySQL 客户端的连接。(漏洞#27306178)audit_log插件内存泄漏已得到纠正 。(漏洞 #27302151)该
INFORMATION_SCHEMA.FILES表现在从存储引擎获取以下列所需的信息:LOGFILE_GROUP_NAME,LOGFILE_GROUP_NUMBER,ROW_FORMAT,VERSION。(漏洞#27292586)删除可加载函数并不总是从性能模式
user_defined_functions表中删除它的条目。(漏洞#27270498)为了减少其大小和存储占用空间,序列化字典信息 (SDI) 现在以紧凑的 JSON 格式生成。(漏洞#27265584)
RESET PERSIST多个会话的并发 执行SET PERSIST可能会导致服务器退出。(漏洞#27264789)即使统计信息收集过程遇到错误,也可以缓存表空间统计信息。(漏洞 #27259963)
SET PERSIST可能无法找到写入mysqld-auto.cnf文件的正确目录。(漏洞#27253828)ALTER TABLE如果表包含数据,则无法创建生成NOT NULL的几何列。(漏洞#27252609)Performance Schema
variables_info表显示了不正确VARIABLE_SOURCE的变量值,这些变量my.cnf在mysqld-auto.cnf. (漏洞#27252077)插件加载和卸载处理不当可能导致服务器退出。(错误#27247280,错误#27297704)
该
RESTART声明不适用于 Ubuntu 软件包。(漏洞#27245918)LDAP 身份验证插件不是基于 FreeBSD 构建的。(漏洞#27238252)
NULL当缓存值被窗口函数评估时,或者当它的参数是可以被评估为GROUP BY的操作的一部分时 ,服务器没有正确处理查询。(漏洞#27233287)ROLLUPNULL在所有情况下,诸如此类的窗口函数 都
LAST_VALUE()无法正确处理包含NOT NULL列的表。(缺陷号 27230463)角色缓存失效可能执行不正确。(漏洞 #27225806)
服务器启动时对持久变量的不正确处理可能会导致服务器退出。(漏洞#27224682)
对于从 MySQL 5.7 升级到 8.0,
sql_mode对象定义的值可以包含NOT_USED. (漏洞 #27219709)JSON_TABLE()如果没有选择默认数据库则失败。(漏洞#27217897)向持有多个锁的表添加唯一索引
InnoDB可能会引发断言。(漏洞#27216817)CREATE VIEWJSON_TABLE()如果未选择数据库,则视图定义中使用的语句将 失败。(漏洞 #27189940)的 Doxygen 文档
CLIENT_SSL_VERIFY_SERVER_CERT已更正。感谢 Bradley Grainger 提供补丁。(漏洞 #27189363,漏洞 #88686)对 Performance Schema 复制表的查询可能会返回不正确的结果,尤其是当执行计划使用索引时。(漏洞#27184567)
对于某些语句,
FILE未正确检查权限。(缺陷号 27160888)为了更好地启用在启动时设置持久化变量的顺序与它们持久化的顺序相同 ,首先根据时间戳(现在存储在文件中)对 中的
SET PERSIST设置 进行排序。mysqld-auto.cnf(漏洞 #27157520)将
dragnet.log_error_filter_rules系统变量设置为非常长的值可能会导致服务器退出。(漏洞 #27120953)对于使用 systemd 的平台(请参阅使用 systemd 管理 MySQL 服务器),systemd 并不总是能够推断出双叉mysqld 进程的状态。因此,systemd 将尝试重新启动 mysqld,即使该进程以状态 1 终止。systemd 现在配置为将 mysqld作为正常进程运行(
Type=notify而不是Type=forking)。如果在环境变量中指定了套接字文件的名称,则NOTIFY_SOCKETmysqld会 尝试打开与 systemd 通信的连接,并将其状态更改写入那里。(错误#27109556、错误#88463、错误#26538598、错误#87210)ST_IsValid()对于非 WGS 84 椭球上的某些地理多边形,返回了不正确的结果。(缺陷号 27074700)-
对包含
FULLTEXT键和FTS_DOC_ID列的表执行多次插入语句导致服务器错误。(漏洞 #27041445,漏洞 #88267)参考:这个问题是 Bug #22679185 的回归。
在严格的 SQL 模式下,将无效值分配给
AUTO_INCREMENT列可能会处理不当,从而导致引发断言。(缺陷 #27041393,缺陷 #88273)线程堆栈耗尽可能引发断言而不是返回错误。(漏洞 #27041350,漏洞 #88277)
SET PERSIST_ONLY没有正确考虑是否应该调用持久化变量的运行时验证函数。(漏洞 #27016247)该
audit_log插件可能会错误处理事件执行的中止,从而导致服务器退出。(漏洞 #27008133)纠正了对大符号整数取反的一些边界情况。(错误#27004880,错误#27008075)
ALTER TABLE操作试图在废弃的表空间中设置表的 值AUTO_INCREMENT。(漏洞 #26935001)MyISAM对于涉及按排序修复算法和许多(超过 4.5 亿)行的批量插入和表修复操作,可能会发生索引损坏。(错误#26929724、错误#88003、错误#28483283)Performance Schema 可以生成
DIGEST_TEXT带有尾随空格的值。这不再发生。(缺陷号 26908015)从系统表中删除索引可能会导致服务器退出。(漏洞#26881798)
准备好的语句 在引用具有相同名称的视图
CREATE TABLE ... SELECT时导致意外行为。GROUP BY(漏洞#26881703)在禁用自动提交且 XA 事务处于 PREPARED 状态的情况下,尝试执行
XA COMMIT或XA ROLLBACK失败。(错误#26848877,错误#87836)LDAP 身份验证插件生成的一些诊断消息在没有发生错误时误导性地提示错误。(缺陷号 26844713)
重新组织了mysql_upgrade和 mysqlpump的 初始化代码以避免断言失败。(漏洞 #26802211)
由于对尝试获取元数据锁时发生的错误处理不当,全文搜索可能会引发断言。(漏洞#26799898)
keyring_file插件在 32 位服务器上 创建的密钥环文件在keyring_file64 位服务器上无法访问,反之亦然。(缺陷号 26793060)列统计信息的元数据锁未在性能模式
metadata_locks和 表中正确显示。(漏洞 #26772858,漏洞 #87708)events_waits_xxx插件服务已
my_snprintf删除并使用 C++11 重新实现snprintf。(错误#26696147,错误#87547)某台大表服务器从MySQL 5.7原位升级到MySQL 8.0后,创建数据字典时内存消耗过大导致服务器启动失败。(缺陷号 26486160)
修改用户权限的语句中发生的错误可能会导致其他试图访问用户权限缓存的事务发生死锁。(漏洞#26475282)
线程池插件为失败的连接记录了太多信息。(错误#26368725,错误#86863)
同时启用多个组件可能会导致服务器退出。(漏洞 #26171471,漏洞 #86514)
格式错误的
mysqld-auto.cnf文件可能会导致服务器退出。(缺陷号 26085774)在保留表空间中创建表没有返回错误。(漏洞 #26073851,漏洞 #86309)
对于调试版本,使用
KILL终止存储的例程可能会引发断言。感谢 Laurynas Biveinis 提供补丁。(漏洞 #26040870,漏洞 #86260)如果
init_connect设置了系统变量,则密码过期的客户端无法执行其内容,因此无法连接。现在,如果客户端的密码已过期,init_connect将跳过执行,这使客户端能够连接并更改密码。(漏洞#25968185)-
YYYYMMDD在满足以下所有三个条件的查询中,无法正确识别 使用该格式的日期:查询执行左连接。
连接内表中的
DATE列是多列主键的一部分。内表主键中的每一列都与另一个值进行比较;这可以是文字值或列值。(缺陷号 25949639)
对具有外键的表进行就地
ALTER TABLE操作导致表定义不匹配。在执行期间传递给存储引擎方法的新表定义ALTER TABLE包含无效的外键名称。(漏洞 #25915132,漏洞 #85997)可以将不存在的角色分配给帐户作为其默认角色。(漏洞 #25755666,漏洞 #85561)
使用 C API,当尝试
INSERT使用 set 执行准备好的语句时CURSOR_TYPE_READ_ONLY,客户端挂起。(缺陷 #25701141,缺陷 #85105)RENAME USER即使要重命名的用户或角色不存在于任何角色图中,也会失败。(漏洞#25658586)如果收到格式错误的客户端/服务器协议数据包,MySQL 客户端程序可能会意外退出。(漏洞 #25471090)
由于竞争条件,性能模式收集的内存统计信息可能不正确。(漏洞#25212799)
插件对内部哈希的不正确处理
CONNECTION_CONTROL导致错误日志中出现虚假消息并最终导致服务器退出。(漏洞 #25052009)CURRENT_ROLE()现在ROLES_GRAPHML()返回一个带有utf8字符集的字符串。以前,他们错误地返回了一个二进制字符串。(漏洞 #24843257)杀死
INSTALL COMPONENT或 可能导致系统表UNINSTALL COMPONENT中单个组件的多行 。mysql.component(缺陷号 24660436)-
SHOW PROCESSLIST使用 X 插件同时运行高负载时执行可能会导致服务器意外退出 。(漏洞#24621170)参考资料:另请参阅:Bug #23057045。
MySQL 中的正则表达式实现使用一个
String对象(旨在初始化为空)来保存当前主题,并使用""该值的文字。这可能会干扰其他类似的功能。这是通过构造Stringwith anullptr来解决的。(缺陷号 23276471)发生错误时, mysqlpump可能会泄漏内存或退出。(漏洞 #23102944)
LDML 2.8 归类定义可能会导致意外的服务器行为。(缺陷号 22819030)
日志打开操作访问日志名称系统变量而不锁定它们。访问此类变量的多个线程可能会导致竞争条件和意外的服务器行为。(漏洞 #22591899)
当范围优化器为足够长的字符串计算前缀时,它可能会截断字符中间的字符串,这可能导致断言和调试版本中的其他失败。现在在这种情况下采取措施以确保字符串在字符边界处被截断。(错误#22475473,错误#13712655)
-
GROUP BY由于读取未初始化的数据,子句 中包含子查询或表达式的查询在某些情况下可能会返回随机结果。(缺陷号 20035304)参考资料:另请参阅:Bug #21922202。
-
GROUP BY由于读取未初始化的数据,子句 中包含子查询或表达式的查询有时会返回随机结果。(缺陷号 20035304)参考资料:另请参阅:Bug #21922202。
该
audit_log插件没有记录准备好的语句的占位符值。(漏洞 #16617026)ALTER TABLE ... RENAMECOPY如果使用该算法执行,操作可能会丢失表上定义的外键 。(缺陷 #11756183,缺陷 #48070)即使更小的整数类型更合适 ,语句中的整数列
UNION也可以转换为 。BIGINT(缺陷 #11747567,缺陷 #33004)添加
ER_REGEXP_INVALID_CAPTURE_GROUP_NAME(错误 13110)。(缺陷 #89796,缺陷 #27597980)窗口函数行缓冲区处理已重构,将处理程序读取次数减少 25%。(缺陷 #89512,缺陷 #27484133)
对于某些框架, 当 系统变量设置为时,函数
VARIANCE()、VAR_POP()和VAR_SAMP()会产生错误的结果 。(漏洞 #89390,漏洞 #27438725)windowing_use_high_precisionfalse当优化器试图用等效的生成列替换表达式时,不考虑带有前缀索引的生成列。这阻止了使用前缀索引来加速使用生成的列表达式的谓词的查询。(漏洞 #89291,漏洞 #27403367)
FIRST_VALUE()并不总是返回NULL一个空框。(错误#89116,错误#27348276)NULL当这些参数中的一个或多个作为显式传递时, 接受可选参数的正则表达式函数未按预期返回NULL。(漏洞 #88872,漏洞 #27252630)基于行的复制在从站上使用了错误的索引集。(漏洞 #88847,漏洞 #27244826)
在没有选择默认数据库的情况下执行时, 由于关键字已被删除,
EXPLAIN EXTENDED引发错误 1046 No database selected而不是预期的 SQL 语法错误。EXTENDED(缺陷 #88591,缺陷 #27153116)CMake 选项
OPTIMIZER_TRACE=0对构建没有影响,因此不再使用。(缺陷 #88520,缺陷 #27130109)-
不使用常量或聚合列的
SELECT语句GROUP BY在第一次尝试时正确地未能检查功能依赖性,但在下一次尝试时却错误地成功了。(错误#88474,错误#27427677)参考资料:另请参阅:Bug #21807579。
对于声明为 的列 ,在严格模式下
CREATE TABLE ... SELECT带有 aUNION的 语句SELECT失败。(缺陷 #87711,缺陷 #27068222)DATENOT NULL使用嵌套子选择的准备好的语句并不总是被正确处理。(漏洞 #87484,漏洞 #26657904)
-
包含窗口函数的查询的成本估算未考虑
PARTITION BYor的成本ORDER BY,也不包括使用帧缓冲区的成本。(错误#87373,错误#26612356)参考资料:另请参阅:Bug #26502118。
-
使用子查询处理查询时,如果已知外部查询会产生空结果,则不再优化子查询;在这种情况下,
EXPLAIN现在显示Not optimized, outer query is empty。进行此更改是因为,当在优化时发现外部查询使用的表为空时,这会将连接列设置为
NULL即使定义为不可空,这会在优化子查询时导致冲突。如果外部查询具有没有任何聚合的聚合,则会出现异常
GROUP BY;这意味着它有一个非空结果,并且SELECT必须评估和优化列表中的任何子查询,这重新打开了可空性问题,现在可以正确处理此类情况。(漏洞 #83115,漏洞 #24713879)参考资料:另请参阅:Bug #83216、Bug #24760317。
当从构成包含可空列的唯一键的所有列中进行选择时,
WHERE条件中的所有列都设置为非空值,MySQL 没有考虑它们的唯一性,结果only_full_group_by错过了检测功能相关的列。(错误#79291,错误#22279903)使用部分索引时,优化器会执行更昂贵的表查找而不是使用索引,即使部分索引覆盖了所需的整个数据集。(错误#74359,错误#19806106)