2018年4月21日 14:36:42

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-bug

这个是这个已经发布的,注意本文时间

字符集支持

在将来的MySQL版本中,utf8mb3字符集将被utf8mb4所取代。 utf8字符集目前是utf8mb3的别名,但在此时会成为对utf8mb4的引用。 为了避免utf8含义的歧义,请考虑为字符集引用而不是utf8显式指定utf8mb4

编译说明

MySQL源代码已使用clang格式转换为Google样式规则。 (错误#27414321)

Sun RPC正在从glibc中移除。如果glibc不包含Sun RPC,CMake现在检测并使用libtirpc。 (您可能会发现需要安装libtirpc和rpcgen才能利用此CMake功能。)(错误#27368272,错误#89168)

服务器版本的Boost库的最低版本现在是1.66.0。 (错误#27137349,错误#88540)

从源代码构建时,提供的CMake脚本假定已经安装了JUnit和Ant并在设置的路径上可用。如果情况并非如此,那么构建GCS Java包装会导致构建错误。为了解决这个问题,一个新的CMake选项WITH_ANT = path_name已被添加到构建脚本中,并且其工作方式与现有的WITH_BOOST CMake选项类似。将WITH_ANT设置为保存Ant tarball或已打开的存档的目录的路径。当WITH_ANT没有设置,或者使用特殊值系统设置时,构建假定$ PATH中存在二进制ant。

同样,CMake选项ENABLE_DOWNLOADS已经存在,用于在构建期间下载所需的库,例如Google Test分发版。现在,当设置了ENABLE_DOWNLOADS,并且未找到JUnit或Ant时,它们将作为构建过程的一部分下载。 (Bug#26678793)

配置说明

新的CMake选项BUNDLE_RUNTIME_LIBRARIES允许将运行时库与Windows的服务器MSI和Zip包捆绑在一起。 (错误#27584796,错误#89771)

系统服务文件现在将LimitNOFILE增加到10000,以适应MySQL 8.0中更高的默认设置。 (Bug#27530282)

新的WITH_SYSTEM_LIBS CMake选项启用后,将为未显式设置的以下任何选项选择系统值:WITH_EDITLINE,WITH_ICU,WITH_LIBEVENT,WITH_LZ4,WITH_PROTOBUF,WITH_SSL,WITH_ZLIB。 (错误#27356668,错误#89136)

编译后的zlib库的版本现在在运行时可用作version_compile_zlib系统变量的值。 感谢Daniëlvan Eeden提供的补丁。 (错误#27235065,错误#88825)

弃用和删除说明

不兼容的更改:这些不推荐的兼容性SQL模式已被删除:DB2,MAXDB,MSSQL,MYSQL323,MYSQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS。它们不能再分配给sql_mode系统变量,或者作为mysqldump --compatible选项的允许值使用。

删除MAXDB意味着CREATE TABLE或ALTER TABLE的TIMESTAMP数据类型不再被视为DATETIME。

对于使用MySQL 8.0中删除的SQL模式的MySQL 5.7应用程序,从MySQL 5.7主站复制到MySQL 8.0从站时语句可能失败,或者可能对主站和从站有不同的影响。为了避免这些问题,应该修改使用MySQL 8.0中删除模式的应用程序以避免它们。

以下与帐户管理相关的功能已被删除:

使用GRANT创建用户。相反,使用CREATE USER。遵循这种做法,NO_AUTO_CREATE_USER SQL模式对于GRANT语句而言是不重要的,因此它也被删除。

使用GRANT修改特权分配以外的帐户属性。这包括身份验证,SSL和资源限制属性。相反,在创建帐户时使用CREATE USER创建这些属性,或者使用ALTER USER修改它们。

由CREASS USER和GRANT的密码'hash_string'语法标识。相反,对于CREATE USER和ALTER USER,使用IDENTIFIED WITH auth_plugin AS'hash_string',其中'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主站复制到MySQL 8.0从站时,语句可能会失败,或者可能对主站和从站有不同的影响。为了避免这些问题,应该修改使用MySQL 8.0中删除的功能的应用程序,以避免它们,并尽可能使用替代方法。 (Bug#27455708)

INFORMATION_SCHEMA注释

新的INFORMATION_SCHEMA.KEYWORDS表列出了MySQL考虑的关键词,并且对于每个表来说明它是否被保留。 此表为应用程序提供了MySQL关键字信息的运行时间源。 请参阅INFORMATION_SCHEMA关键字表。

另外,如果你从源代码构建MySQL,构建过程会生成一个包含关键字数组和关键字的保留状态的keyword_list.h头文件。 该文件可以在build目录下的sql目录中找到。 此文件可能对需要关键字列表的静态源的应用程序有用。

安装说明

RPM和Debian软件包现在将当前的MySQL系列添加到共享目录名称(例如share / mysql-8.0)。 (错误#27638192,错误#26990531)

日志记录

写入错误日志的消息现在指示事件发生的子系统。 可能的子系统值是InnoDB(InnoDB存储引擎),Repl(复制子系统),Server(否则)。

打包说明

使用Debian软件包进行安装或升级现在会显示一个对话框,其中包含一个用于将默认身份验证插件设置为mysql_native_password的选项。 这对于某些安装站点的向后兼容性可能很有用。 (Bug#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表。 (Bug#27599831)

性能模式对象现在具有默认字符集utf8mb4。 (Bug#27407745)

安全说明

yaSSL不再包含在MySQL发行版中。 wolfSSL可能被用作具有GPLv2兼容许可证的功能等同替代品。另外,wolfSSL(如OpenSSL)支持TLSv1.2协议,而yaSSL不支持。

有关使用wolfSSL从源代码构建MySQL的说明,请参阅MySQL源代码分发中的extra / README-wolfssl.txt文件。 WITH_SSL CMake选项现在允许wolfssl作为有效值,不再将其作为值绑定。要使用-DWITH_SSL = wolfssl,您必须按照README-wolfssl.txt中的说明进行操作。有关更多信息,请参阅OpenSSL与wolfSSL。 (Bug#26671671)

如果使用OpenSSL进行编译,MySQL现在支持FIPS模式,并且运行时可以使用OpenSSL库和FIPS对象模块。 FIPS模式对加密操作施加了条件,例如对可接受的加密算法的限制或对较长密钥长度的要求。 ssl_fips_mode系统变量允许在服务器端控制FIPS模式。 --ssl-fips-mode客户端选项可以在客户端控制这些程序的FIPS模式:mysql,mysqladmin,mysqlbinlog,mysqlcheck,mysqldump,mysqlimport,mysqlpump,mysqlshow,mysqlslap,mysqltest,mysqlxtest,mysql_secure_installation和mysql_upgrade。请参阅FIPS支持。

空间数据支持

不兼容的更改:这些几何集合更改已经实现:

支持几何集合数据类型的标准GeomCollection名称作为GeometryCollection数据类型名称的同义词。

作为GeometryCollection()函数的同义词支持GeomCollection()函数。

GeomCollection和GeomCollection()是首选的数据类型和函数名称。

不兼容性:由于首选数据类型名称发生变化,某些INFORMATION_SCHEMA表,诸如SHOW CREATE TABLE之类的语句和显示数据类型信息的ST_GeometryType()函数现在显示GEOMCOLLECTION而不是GEOMETRYCOLLECTION。 应该调整寻找GEOMETRYCOLLECTION的应用程序来解释这种变化。

有关更多信息,请参阅GeometryCollection类和创建几何值的MySQL特定函数。

sys架构注释

sys模式对象现在具有默认字符集utf8mb4。 (Bug#27675959)

测试套件注释

通过减少浮点结果的GIS处理中的编译器和平台差异,可以简化不再需要四舍五入以避免虚假测试失败的相关测试用例。 感谢Daniel Black提供的补丁。 (错误#26540102,错误#87223,错误#27462294)

X插件说明

将MySQL用作文档存储时,现在完全支持使用X DevAPI在几何值列上使用SPATIAL索引。以前,可以创建空间索引,但空间参考系统标识符(SRID)未包含在索引列中,因此优化程序未使用该索引。 SRID属性现在被添加到索引列中。 (Bug#27568243)

与X插件测试一起使用的套接字文件现在仅限于22个字符的文件名。 (错误#27460677,错误#89464)

Bug#26328274的修复程序导致在调试版本中为X插件连接使用空主机名时产生断言。问题现在已修复。 (错误#27266584,错误#88925)

当使用PLAIN身份验证方法使用未设置密码的用户帐户时,X插件未填充密码缓存。这导致以后的认证尝试失败。如果用户帐户的密码为空,则密码缓存现在可以正确填充条目。 (Bug#27257722)

X插件现在支持在MySQL 8.0.4中添加的RESTART SQL语句,以便在客户端会话中重新启动MySQL服务器实例。 (Bug#27245319)

从版本8.0.4开始,使用X协议的MySQL Shell连接可以使用TCP或Unix套接字。此修补程序允许在UNIX套接字连接中使用加密协议,因此需要加密连接的用户帐户才能够连接。 (Bug#27192091)

Bug#26647488修正了对DATETIME数据类型的处理,现在也正确地解码了从旧版本插件接收的消息,该插件没有可用于识别数据类型的新字段。 (Bug#27169735)

X当连接选项中指定的默认数据库无效时,使用X协议的插件连接尝试不会返回错误,并且连接允许使用空默认数据库。使用经典MySQL协议的连接尝试确实返回错误并且不允许连接。如果指定了无效的模式,X协议连接尝试现在也禁止连接。 (Bug#26965020)

X插件现在默认加载,这意味着不再需要安装插件。

功能添加或更改

InnoDB:用于InnoDB表空间的ibd2sdi序列化字典信息(SDI)抽取实用程序现在支持一个--pretty选项,用于控制SDI数据的JSON漂亮打印格式。漂亮的打印格式是默认启用的。禁用使用--skip-pretty的漂亮打印格式可以减少提取的SDI数据的大小。 (Bug#27546514)

InnoDB:为了提高具有大缓冲池的系统的启动性能,缓冲池初始化现在是多线程的。 (错误#22963374,错误#80784)

InnoDB:实现了以下重做日志记录优化:

用户线程现在可以并发写入日志缓冲区而不同步写入。

用户线程现在可以按照宽松的顺序将脏页面添加到flush列表中。

现在专用的日志线程负责将日志缓冲区写入系统缓冲区,将系统缓冲区刷新到磁盘,将写入和刷新的重做通知用户线程,维持放宽的清空列表顺序所需的延迟,并编写检查点。

添加了系统变量,用于配置等待刷新重做的用户线程使用旋转延迟:

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重做日志。

Solaris:在Solaris上,MySQL现在可以使用Developer Studio 12.6构建。 (错误#27055190,错误#88316)

在数据目录初始化期间进行记录(例如,使用mysqld --initialize)已更改:

启动消息表明服务器正在初始化模式下运行。

写入消息指示初始化何时完成。

有关CA证书自签名的消息被抑制。

(错误#27557952,错误#89693)

如果启用了日志记录,则-log后缀不再附加到服务器版本字符串。这会影响版本系统变量的值。 (错误#27532097,错误#89626)

写入错误日志的服务器关闭行现在包含服务器版本。 (错误#27522788,错误#87910)

如果行格式是默认格式,则SHOW CREATE TABLE通常不会显示ROW_FORMAT表格选项。在可移动表空间的表导入和导出操作期间,这可能会导致问题。 MySQL现在支持一个show_create_table_verbosity系统变量,该变量在启用时会导致SHOW CREATE TABLE显示ROW_FORMAT,而不管它是否为默认格式。 (Bug#27516741)

性能架构内存仪器开销减少了。 (Bug#27500610)

在数据目录初始化期间,服务器使用sql_mode =''创建对象。现在服务器使用默认的sql_mode值(其中包括严格模式)。 (错误#27476029,错误#89495)

在mysql-test / std_data / Index.xml中定义的排序规则仅用于测试目的,否则不应使用。评论被添加到文件中,以使其清晰,因为有些用户在非测试环境中使用它们。 (错误#27421838)

RESET PERSIST不再执行隐式提交。 (Bug#27374791)

对于持久变量,Performance Schema variables_info表的SET_TIME列现在反映变量持续的时间,而不是服务器启动时间。 (Bug#25677422)

以前,即使在表创建时明确指定了排序规则,但如果排序规则与表默认规则相同,SHOW CREATE TABLE也不会显示列的排序规则。现在,如果明确指定了排序规则,则SHOW CREATE TABLE将始终显示列排序规则,即使排序规则与表默认规则相同。 (错误#11754608,错误#46239)

错误修复

重要更改:启用NO_ZERO_DATE SQL模式时,如果未为该列指定DEFAULT,则ALTER TABLE会拒绝尝试将已声明为NOT NULL的DATE或DATETIME列添加到非空表中。由于生成的列没有默认值,因此此限制还会阻止将生成的DATE NOT NULL或DATETIME NOT NULL列添加到非空表中。由于可以使用用于生成列的表达式来代替缺少用于确定列值的缺省值,因此现在可以为生成的列取消此限制。 (Bug#27252354)

重要更改:对于ANALYZE TABLE ... UPDATE HISTOGRAM语句,WITH N BUCKETS子句现在是可选的。如果未指定,则BUCKETS的默认值为100.(错误#89909,错误#27637968)

InnoDB:在致命错误消息写入错误日志之前服务器已停止。 (Bug#27626478)

InnoDB:当确定是否可以授予等待锁定时,忽略正在回滚的受害者事务持有的锁定。 (Bug#27607235)

InnoDB:使用GCC 7.2.0编译调试版本时,Sdi_Decompressor :: decompress()发生错误。 (Bug#27565889)

InnoDB:在并行创建多个缓冲池期间注册缓冲池块时引发了一个断言。现在使用互斥锁来保护缓冲池块映射中缓冲池块的注册。 (Bug#27565865)

InnoDB:启用标准监视器会导致错误。 (错误#27534041)

InnoDB:用于将列标记为隐藏的内部字段已从布尔字段更改为枚举字段,以支持更多级别的列可见性。 (错误#27499518,错误#89553)

InnoDB:无效的与zlib相关的Valgrind失败报告了条件跳转或移动取决于未初始化的值。 (错误#27482740,错误#89509)

InnoDB:使用TempTable存储引擎和NO PAD归类时,返回了不正确的GROUP BY结果。 (Bug#27454796)

InnoDB:页面压缩功能中的压缩长度值不正确会导致在第一次压缩页面时打孔会被跳过。 (Bug#27399897)

InnoDB:使用错误的--log-bin选项值启动服务器会产生一个断言,并且随后尝试使用正确的--log-bin值或不使用--log-bin选项来启动服务器时,会继续产生断言失败。 (Bug#27393317)

InnoDB:在UPDATE操作期间插入LOB时,没有更新大对象(LOB)引用。 (Bug#27368662)

InnoDB:重新启动服务器后,由于表标志与存储在内存中的远程数据目录信息不一致,因此TRUNCATE TABLE操作引发了断言。 (Bug#27367639)

InnoDB:尝试使用CREATE TEMPORARY TABLE ... TABLESPACE语法未能报告错误,在每个文件表的表空间中创建一个临时表。临时表空间只允许在临时表空间中使用。 (Bug#27361662)

InnoDB:在另一个线程试图分配页面之前,大对象(LOB)第一页上的闩锁未被释放,导致死锁。 (错误#27360492)

InnoDB:通过引入追踪最小活动事务标识的成员变量来优化将隐式锁转换为显式锁。

感谢翟维祥的补丁。 (错误#27353468,错误#89127)

InnoDB:InnoDB存储引擎在内部使用的mysql.innodb_ddl_log和mysql.innodb_dynamic_metadata表现在受到保护。这些表上的DDL和DML操作不再允许,并且这些表不再出现在INFORMATION_SCHEMA查询结果中。 (错误#27353455,错误#89129)

InnoDB:使用innodb_page_size设置为4K升级MySQL 5.7实例会导致mysql_upgrade失败,并显示“指定密钥太长;最大密钥长度为768字节“创建或修改系统表时出错。该错误被禁止,以允许mysql_upgrade客户端在innodb_page_size设置为4K的实例上运行。 (Bug#27338431)

InnoDB:恢复过程无法正确确定space_id值,导致服务器退出。 (Bug#27331936)

InnoDB:修改索引列的可空性的ALTER TABLE操作引发了断言。 InnoDB错误地认为必须添加新的主键,而不是从现有的唯一键创建。 (错误#27330454,错误#89087)

参考文献:这个问题是一个回归:Bug#24397406。

InnoDB:在ALTER TABLE ... IMPORT TABLESPACE操作之后,无法从INFORMATION_SCHEMA.INNODB_COLUMNS表中正确检索元数据。 (Bug#27322099)

InnoDB:涉及大对象(LOB)值的INSERT操作引发了断言。拆分LOB片段后,目录条目没有足够的空间。 (错误#27320977)

InnoDB:在使用utf8mb4字符集的服务器上,ALTER TABLE操作期间的INSERT或UPDATE更改了包含虚拟列的表格的行格式,导致索引损坏。 (Bug#27319084)

InnoDB:从INFORMATION_SCHEMA.INNODB_COLUMNS检索的数据对于包含虚拟列的表不正确。 (Bug#27316037)

InnoDB:由于密钥环文件无效,服务器恢复后无法启动。从备份创建的密钥环文件为空。 (Bug#27307740)

InnoDB:后台线程之间发生死锁,一个尝试从缓存中逐出全文搜索表,另一个尝试同步表,导致InnoDB集群节点失败。 (Bug#27304661)

InnoDB:在InnoDB恢复消息中纠正了错字。感谢Daniëlvan Eeden提供的补丁。 (Bug#27287979,Bug#27010613,Bug#88185)

InnoDB:在InnoDB恢复期间报告了一条消息,指出缺少加密算法支持。 (Bug#27286020)

InnoDB:缺少或不匹配的密钥环文件在启动时导致断言失败。 (Bug#27278324)

InnoDB:检查加密表空间文件的空间ID时,返回错误,指出缺少加密支持。 (错误#27278100)

InnoDB:打印“太多打开文件”警告的调试消息现在仅在打开文件的数量达到300的限制时才会打印。(错误#27277844)

InnoDB:在释放间隙时未能跳过谓词锁定会引发调试断言,正如在释放前缀上的间隙锁定之前未能删除上游记录位一样。 (Bug#27272806,Bug#27294066)

InnoDB:在克隆的数据目录上启动服务器时发生表空间ID发现失败。 (Bug#27265874)

InnoDB:一个不受保护的全局变量(fil_n_file_opened)在关闭服务器时导致断言。 (Bug#27265473)

InnoDB:在检查正在使用的文件上的未决I / O时引发了不再有效的断言。 (Bug#27263206)

InnoDB:升级到MySQL 8.0时,空的通用表空间导致失败。预计空的数据文件具有特定数量的页面。 (Bug#27261822)

InnoDB:由于--innodb-directories选项指定的目录包含密钥环数据文件,因此发生启动失败。 --innodb-directories选项只能识别InnoDB表空间文件。 (Bug#27253116)

InnoDB:计算最小边界矩形(MBR)大小增加的函数错误地返回0,导致R树损坏。 (Bug#27237472)

InnoDB:临时表上的REPLACE操作引发了一个断言。 (Bug#27225649)

InnoDB:在同一个表上伴随着并发DML的表上的联机ALTER TABLE操作引发了断言。在访问DML日志以确定虚拟列的长度之前,不会执行日志结束检查。 (Bug#27158030)

InnoDB:当添加虚拟索引失败时,已经释放的虚拟索引不会从虚拟列索引列表中删除。 (Bug#27141613)

InnoDB:在同一个语句中添加虚拟列和索引会导致错误。 (Bug#27122803)

InnoDB:撤消表空间截断操作引发了一个断言。确定撤消表空间段是否处于非活动状态的检查无效。 (Bug#27114068)

InnoDB:当TempTable存储引擎无法使用临时文件和mmap分配内存时,会报告一个无效错误,指示将使用定义的磁盘存储引擎。 (错误#26990375)

InnoDB:默认行格式为REDUNDANT的服务器上的表空间导入操作引发了断言失败。 (错误#26960215)

InnoDB:基于生成列的存储字段允许基列具有NULL值。 (错误#26958695)

InnoDB:评估解析函数中的子查询提出了一个断言。 (错误#26909960)

InnoDB:与数据字典操作相关的锁导致CREATE TABLE性能下降。 (错误#26848711,错误#87827)

InnoDB:用于备份操作的LOCK INSTANCE能够在不等待并发DDL操作完成的情况下获取备份锁。 (错误#26831155,错误#87812)

InnoDB:未正确指定的innodb_data_file_path或innodb_temp_data_file_path值返回语法错误,未指定导致初始化失败的系统变量的名称。 (Bug#26805833)

InnoDB:为TRUNCATE TABLE操作打开的处理程序导致操作断言。在删除表之前,服务器现在关闭打开的处理程序。

此错误的修补程序还改进了与外键约束相关的TRUNCATE TABLE错误消息,并使截断损坏的表成为可能。 (Bug#26710839)

InnoDB:重新创建表的在线DDL操作在应用的最后一个插入日志记录跨两页分割时产生断言。 (错误#26696448,错误#87532)

InnoDB:尝试根据尚未存储的离页大对象值生成虚拟列值时引发断言。 (Bug#26625652)

InnoDB:R树搜索计算删除标记的记录,使其找到比聚集索引中更多的记录。结果,有效的R树索引被标记为损坏。 (错误#26381207)

InnoDB:重命名模式的RENAME TABLE操作无法重命名在全文搜索索引先前被删除时留下的全文搜索公共辅助表,导致尝试删除旧模式时断言失败。 (Bug#26334149)

InnoDB:当一个线程试图读取一个包含BLOB数据的记录,而另一个线程正在向外部页面写入相同的数据时引发了一个断言。 (Bug#26300119)

参考文献:这个问题是一个回归:Bug#23481444。

InnoDB:外部存储列的列前缀超过了在线日志中的可用内存量。 (Bug#25928471)

InnoDB:引入了一个有问题的锁,用于在检查点期间保护将动态元数据更改写入重做日志的操作被删除。现在使用互斥锁来代替。检查点LSN也进行了调整,以保护动态元数据更改。 (Bug#25834374)

InnoDB:InnoDB在使用列偏移量搜索自动增量列的索引时未能解释虚拟列。 (错误#25076416)

InnoDB:无效的调试条件导致缓冲池组块分配失败,导致在清除线程尝试访问未分配的块时导致断言失败。 (错误#23593654)

参考文献:这个问题是一个回归:Bug#21348684。

InnoDB:由于票据获取死锁,线程被阻止进入InnoDB存储引擎。 (错误#23476050)

分区:执行ALTER TABLE EXCHANGE PARTITION时,存储引擎返回的错误未由服务器正确处理。 (Bug#27320682)

复制:当MySQL使用--plugin-load ='group_replication.so'启动但组复制未启动时,启动异步从通道会导致服务器无响应。 (错误#27584141)

复制:已回滚的空XA事务不应记录在二进制日志中或添加到gtid_executed系统变量中的一组事务中。但是,如果在以XA COMMIT ... ONE PHASE语句结尾的空XA事务之后执行回滚空XA事务,则它们会作为XA ROLLBACK语句错误地添加到二进制日志中,并且也会被错误地添加到gtid_executed系统变量。问题现在已修复。 (错误#27435974)

复制:组复制文件已从快速目录移动到插件目录。 (Bug#27413789)

复制:当系统变量gtid_next设置为AUTOMATIC时,回滚并且未记录在二进制日志中的空XA事务被错误地添加到gtid_executed系统变量中的一组事务中,导致不一致。回滚的空XA事务不再记录在gtid_executed中。 (Bug#27407670)

复制:组复制冲突检测使用模式和表名称作为主键等效(PKE)的一部分,以检测和禁止冲突事务。 lower_case_table_names系统变量的值更改了模式和表名称的存储和外部化方式,这取决于配置的值可以将名为T1的表保存为t1。组中的这种差异可能会导致不一致。现在,成员必须都具有与lower_case_table_names相同的值。 (Bug#27401817)

复制:在macOS上的任何组复制相关配置中使用IP地址或主机名都失败。 (Bug#27376511)

复制:在联机辅助成员上更改组复制所需的设置可能会导致意外停止。 (Bug#27317478,Bug#27157202)

复制:replication_group_member_stats性能模式表中的LAST_CONFLICT_FREE_TRANSACTION值在组成员之间未正确同步。 (错误#27317431)

复制:在发出START GROUP_REPLICATION后,gtid_mode系统变量将被锁定,以防止对其值进行任何修改,直到该组处于联机状态。在此期间修改gtid_mode的任何尝试都会被阻止。作为启动组复制过程的一部分,服务器需要设置super_read_only = off,它依赖于SET GTID_MODE获取的锁。这可能导致组复制挂起,并且不可能连接到服务器来解决这种情况。为防止出现这种情况,当无法获取SET GTID_MODE所需的锁时,操作将中止。 (错误#27312241)

复制:当一个成员加入一个组时,有可能请求加入被拒绝。如果拒绝导致重试,例如因为正在接触的种子成员不在组中,那么重试周期有可能无限持续。 (Bug#27294009)

复制:如果组未能启动,例如由于未联系任何种子成员,因此组中有一分钟的时间内组重试启动进程。尝试在此期间修改组复制插件选项可能会导致意外停止。现在,尝试在插件启动或停止期间修改组复制插件选项会导致错误。 (错误#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的值。

如果您只为一个变量指定非零值,则该值用于确定二进制日志到期期限,而其他值的默认值不适用。

如果您为这两个变量都指定了一个值,则将使用binlog_expire_logs_seconds中的30天的缺省值作为二进制日志到期期限。

如果您尝试在另一个变量已设置时动态设置其中一个变量,则会发出错误消息,如果您在启动时为这两个变量指定了非零值,则会发出警告消息。如果您为expire_logs_days设置了值,也会发出弃用警告。

要禁用二进制日志的自动清除,请为binlog_expire_logs_seconds显式指定值0,并且不要为expire_logs_days指定值。为了与早期版本兼容,如果您为expire_logs_days明确指定值0,并且不为binlog_expire_logs_seconds指定值,则也会禁用自动清除。在这种情况下,binlog_expire_logs_seconds的默认值不适用。您不再需要将这两个变量设置为零以禁用自动清除。 (Bug#27252658)

复制:试图在配置为在引导时自动启动插件的服务器上卸载组复制插件可能会导致死锁。现在,卸载过程将检查以确保插件未处于启动过程中,并且如果存在则优雅地失败。 (Bug#27179336)

复制:不再允许DDL语句CREATE DATABASE,ALTER DATABASE和DROP DATABASE与多线程从机上的其他语句并行执行。这些语句需要对模式进行独占元数据锁定,从而在复制从服务器上设置slave_preserve_commit_order = 1时导致死锁的理论可能性。 (错误#27165446)

复制:在禁用二进制日志记录的复制从站上,空的DDL语句(例如,由于复制过滤器)引发了断言。启用二进制日志记录后,BEGIN和COMMIT语句将写入二进制日志以生成事务,但这些语句在禁用二进制日志记录时不可用,导致断言。 MySQL服务器现在检查DDL事务是否为空并且未标记为已启动的情况,并在不提高断言的情况下处理它。 (Bug#27164661)

复制:新的系统变量rpl_read_size可用于设置从二进制日志文件和中继日志文件中读取的最小数据量(以字节为单位)。默认的读取大小是8KB。如果这些文件的繁重磁盘I / O活动阻碍了数据库的性能,那么如果文件没有被操作系统缓存,增加读取大小可能会减少文件读取和I / O延迟。

请注意,为每个从二进制日志和中继日志文件读取的线程(包括主服务器上的转储线程和从服务器上的协调器线程)分配了此值的大小的缓冲区。因此设置较大的值可能会影响服务器的内存消耗。

感谢Facebook团队的补丁。 (Bug#27147095)

复制:在启用GTID的服务器上,如果在刷新事务但尚未提交时使用RESET MASTER,则服务器GTID将保持不正确的状态。此时,交易的GTID已被添加到拥有的GTID集合中,但尚未添加到已执行的GTID集合中。当未提交事务的内容被RESET MASTER语句清除时,GTID已从二进制日志中删除,但GTID由于已被拥有而无法重用,所以GTID的顺序存在差距。

通过此修复,RESET MASTER获取全局读锁定,以确保在操作期间没有事务处于落实阶段,并且在操作期间没有新事务进入落实阶段。如果有任何正在进行的提交,RESET MASTER会一直等到它们完成。全局读锁定在复位完成时释放,然后通知存储引擎成功复位。如果线程的FLUSH TABLES WITH READ LOCK已被执行,RESET MASTER不会重试该锁。 (Bug#27041759)

复制:尝试使用SET @@ SESSION.GTID_NEXT语句为不安全或空的XA事务设置GTID的操作不正确。在gtid_mode设置为OFF或OFF_PERMISSIVE且enforce_gtid_consistency设置为OFF的服务器上,为不安全的XA事务(创建或删除临时表)设置GTID会导致服务器的GTID违例计数器出现不一致,并引发断言。测试还显示,为空的XA事务设置GTID会导致将不正确的事件序列写入二进制日志。这两种情况现在都可以正确处理。 (错误#27041402,错误#88272)

复制:旋转二进制日志时为服务器停止发出的错误消息未说明问题的正确原因。错误消息已得到增强,以包含导致服务器停止的实际错误作为消息的一部分。在将最后一个二进制日志中的GTID集保存到mysql.gtid_executed表时出现内存不足错误的情况下,还添加了新的错误ER_OOM_SAVE_GTIDS。 (错误#27040070,错误#88262)

复制:组复制使用事务写入集提取对组成员进行冲突检测。在详细的性能分析过程中发现了性能回归,该性能分析由此错误修复处理。内存分配已针对写入集提取进行了优化,内存复制操作已减少。此外,外键写入集现在仅在当前表具有外键时收集。 (错误#27016053)

复制:当使用group_replication_ip_whitelist时,可以配置一个组,使其可以运行,即使所有成员都无法建立彼此的内部组通信连接,导致行为不一致。现在,如果IP位于白名单中,或者IP属于XCom配置的当前成员,则接受传入连接。这可确保成员始终能够创建组通信所需的内部网络。 (Bug#26846549,Bug#27406775)

复制:即使查询导致错误,语句CREATE USER IF EXISTS(或IF NOT EXISTS)和ALTER USER IF EXISTS(或IF NOT EXISTS)也被写入二进制日志。 MySQL服务器现在检查导致这些查询失败的错误(例如,指定了无效的插件),并且不会在该情况下记录该语句。请注意,如果这些语句成功但对主服务器没有影响,因为条件不满足,则会将语句写入二进制日志,因为复制从服务器可能会遇到该情况(请参阅错误#25813089,错误号85733)。 (Bug#26680035)

参考文献:另见:错误#25813089,错误#85733。

复制:在多主群组中,当成员也配置了异步复制通道时,异步通道可能在组复制启动之前启动。这可能导致在成员成为该组的在线成员之前发生异步通道处理事务,从而在成员尝试加入该组时导致问题。此修复确保组成员的异步通道在成员上线之前不会启动。 (Bug#26648393)

复制:在MySQL 8.0中引入了对原子DDL的支持后,支持原子DDL的复制从服务器可以与不支持原子DDL的早期MySQL版本的复制主服务器分离。如果只能部分应用DDL语句,则使用MySQL 8.0的从站会回滚整个DDL语句,但使用较早版本的主站可能会提交DDL语句的有效部分。现在,如果主站和从站上的原子DDL语句不成功提交,并且在继续之前应检查主站和从站的状态没有发生分歧,则会记录一条错误消息。 (Bug#26133488

复制:对于包含BLOB数据类型的虚拟生成列的更新,某些存储引擎需要旧的和新的BLOB值进行复制。此修复将相同的行为扩展为JSON和GEOMETRY数据类型,这些数据类型基于BLOB数据类型,因此在未存储旧值时会产生相同的问题。 (Bug#25873029)

复制:MySQL 8.0.0中的行为更改将生成列的标识从之前移至计算二进制日志记录的写入集之后。这导致了NDB群集复制的问题,因为如果存储引擎不需要,该存储引擎会从日志事件中省略生成的列,从而导致由复制从属服务器上的应用程序线程为它们设置NULL值。生成的列的标识现在已经回到写集合计算之前,因此不会发生问题。 (错误#25827408)

复制:在多线程复制从属设备上(slave_parallel_workers大于0),对于SHOW SLAVE STATUS,从属设备滞后于主设备的情况未被Seconds_Behind_Master字段报告。该值现在正确报告。感谢Robert Golebiowski的补丁。 (错误#25407335,错误#84415)

复制:在语句SET @@ GLOBAL.GTID_PURGED中,加号(+)可与GTID集一起使用,以指示指定的GTID集与gtid_executed不相交。对于为函数GTID_SUBSET()和GTID_SUBTRACT()指定的GTID集合,也允许使用加号,因为它们没有意义。这些功能不能再指定加号。此外,与SET @@ GLOBAL.GTID_PURGED操作有关的错误消息已得到改进。 (Bug#24675979)

复制:使用选项--read-from-remote-server和--hexdump调用时,mysqlbinlog无法生成二进制日志内容的十六进制转储,后者是生成自动增量值的SQL语句之后引用的用户定义变量或调用RAND()。这些事件的事件类型之后是信息行查询日志事件,并且在接收到后续行查询日志事件时,mysqlbinlog缓存原始事件以进行打印。当接收到后续事件时,指向包含原始事件的内存的指针失效,因此无法访问原始数据以产生十六进制转储。这个问题现在已经解决了。 (Bug#24674276)

复制:对二进制日志解码过程进行了许多更改,以改进处理无效或损坏的二进制日志条目。 (错误#24365972)

复制:在XA事务WL#6860引入二进制日志记录之后,如果在从属设备上设置MASTER_AUTO_POSITION = 1,则在从具有该功能的主设备复制到没有该功能的从设备的复制期间,可能会在调试版本中产生断言。该断言已被删除,以便调试版本现在具有与非调试版本相同的行为,并且可以尝试复制不受支持的事件类型,而不管是否设置了MASTER_AUTO_POSITION = 1。 (Bug#20677683)

Linux:现在建立在Alpine Linux上,可以充分利用AIO支持。 (Bug#27327874)

macOS:在macOS上,mysql_config --libs没有列出任何SSL库。 (Bug#27232576)

Microsoft Windows:在Windows上,RESTART语句通过使用mysqld fork来实现,其中一个进程作为另一个进程充当服务器的监视器。这使得确定要附加的服务器进程以进行调试更加困难。为了减轻这一点,现在使用--gdb启动服务器可以抑制分叉。副作用是,对于以此选项启动的服务器,RESTART仅退出并且不会重新启动。 (Bug#27273229)

JSON:在某些情况下,JSON_QUOTE()函数可能会将带引号的字符串写入保存输入字符串的同一缓冲区,这可能会导致错误的结果。现在进行检查以确保它不会尝试写入正在读取的同一个缓冲区。 (错误#27312444)

JSON:JSON_SEARCH()不再对缓存的Json_path对象进行任何修改,而是对表示路径的String对象进行任何必要的更新。这节省了路径的Json_path和String表示之间所需的往返次数,从而加快了执行速度。另外,JSON_SEARCH()的one_or_all和escape_char参数被不必要地缓存;这些参数不再被缓存,这也应该改善这个函数的执行时间。 (错误#87383,错误#26614455)

参考文献:另见:错误#21450084,错误#77785,错误#21472872。

检查是基于数据字典版本信息实施的,以防止启动MySQL 8.0服务器时使用由以后的MySQL版本创建的数据目录。该检查对于防止当前不支持的就地降级是必需的。 (Bug#27708249)

受保护的数据字典表不再可以通过放置在服务器初始化文件中的语句访问。 (错误#27674311,错误#90010)

数据字典和INFORMATION_SCHEMA版本号与新的MySQL服务器版本号同步。 (Bug#27674285)

服务器没有使用带前缀索引的BLOB列正确处理某些LIKE查询。 (错误#27660560)

对于使用-DWITH_PROTOBUF = SYSTEM配置的构建,在安装了ProtoBuf 3.5的系统上构建失败。 (错误#27638713,错误#89915)

在mysqld-auto.cnf中存储的持续变量的时间戳的微秒部分始终为000000。(错误#27629719)

Debian软件包现在可以处理MeCab插件字典文件的依赖关系。现在Fedora软件包处理两个MeCab软件包的依赖关系,而不仅仅是utf-8软件包。 (Bug#27612730,错误#27613539)

对于使用systemd作为正常进程(Type = notify)运行mysqld并使用套接字文件进行通信的平台,MySQL 8.0.11中的更改​​在SLES 12.2之前的SLES上不起作用。 (错误#27604999)

INFORMATION_SCHEMA.STATISTICS表中的NON_UNIQUE列在MySQL 8.0之前的类型为BIGINT,但随着数据字典的引入,它成为了MySQL 8.0中的VARCHAR。 NON_UNIQUE列现在再次具有整数类型(INT,因为该列不必像BIGINT那样大)。 (错误#27593348,错误#89793)

有了一些输入,ST_Crosses()可能会导致服务器退出。 (Bug#27576700)

有些错误消息正在写入错误日志,错误ID为0,而不是合法的错误ID。 (Bug#27575608)

mysql_upgrade没有正确设置MYSQL_SERVER_PUBLIC_KEY,导致无法读取密钥文件。 (Bug#27568278)

如果自动提交被禁用,mysql_upgrade在从MySQL 5.7升级到8.0时产生错误。 (Bug#27549249)

对于调试版本,从性能模式线程表的PROCESSLIST_STATE列中显示非常长的阶段名称可能会引发一个断言。 (Bug#27545688)

如果某些必需的变量已设置为保留变量,或者未按照适当的时间戳顺序设置保留变量,则组复制无法启动。 (Bug#27545544,Bug#27522405)

gtid_purged处理有内存泄漏。 (错误#27537968,错误#89645)

服务器重新启动后,使用SET PERSIST来保持optimizer_trace_offset导致不正确的变量值。 (Bug#27536421)

validate_password组件可能会泄漏内存。 (错误#27521770,错误#89597)

sql / handler.h中的拼写错误已更正。感谢Su Tristan的补丁。 (Bug#27516280,Bug#89594)

Performance Schema variables_info表为在!include或!includedir指令指定的选项文件内设置的变量显示不正确的VARIABLE_SOURCE和VARIABLE_PATH值。 (Bug#27514223)

参考文献:这个问题是一个回归:Bug#25563891。

从MySQL 5.7升级到MySQL 8.0之后,第一次尝试在具有--default-time-zone设置为特定时间值(如“+00:00”)的MySQL 5.7数据目录中启动服务器导致服务器退出。 (Bug#27512609,Bug#89584)

字符集内部数字的查找不是线程安全的,可能导致内存泄漏。 (错误#27507950)

一起使用-DWITH_LIBEVENT = system和-DWITH_ICU = system CMake选项会导致配置失败。 (错误#27505535,错误#89398)

有些消息正在使用客户端错误ID写入服务器错误日志。 (错误#27503787,错误#89562)

在密钥迁移模式下运行时,服务器可能会报告成功操作的错误。 (Bug#27493997)

从MariaDB升级到MySQL Community Edition在Fedora 27上失败。(错误#27484835)

ALTER TABLE可能会挂起在等待表空间元数据锁定状态。 (错误#27472087,错误#89487)

从性能模式status_by_thread或variables_by_thread表中选择不是线程安全的,可能会产生不正确的结果。 (错误#27471510)

INSERT ... ON DUPLICATE KEY UPDATE可能会被错误地处理,如果源表不产生任何行。 (错误#27460607)

SET PERSIST_ONLY忽略--skip-grant-tables,并继续检查设置系统变量所需的动态权限。 (Bug#27455943)

对于RPM软件包和Docker RPM软件包,包含的my.cnf文件现在包含指示如何恢复到以前的默认身份验证插件(将caching_sha2_password更改为mysql_native_plugin)的信息,以便与旧客户端兼容。 (Bug#27454015,错误#27675380)

在使用>的字符串比较中,只有一个操作数被处理为utf32。 (Bug#27452148)

InnoDB初始化期间的服务器出口导致AddressSanitizer(ASan)报告内存泄漏。如果表中包含无法分析的数据,该修补程序还会实现数据字典属性表的正确处理。 (错误#27447981,错误#89433)

使用-DWITH_SSL = system,如果CMake无法找到系统OpenSSL库和头文件,则会产生令人困惑的消息。现在它立即退出并出现错误。 (Bug#27447874)

使用-DWITH_INNODB_EXTRA_DEBUG = ON进行配置会导致链接器错误。 (错误#27444255,错误#89412)

使用-DWITH_ZLIB =系统进行配置会导致链接器错误。 (错误#27435371,错误#89373)

UNION ALL查询的结果集中的元数据可以表示为NEWDATE而不是DATE。 (错误#27422376)

在启用未定义行为清除程序的情况下,否定-922337203685477580可能导致服务器退出。 (错误#27419181)

启用协议压缩功能后,可能会引发虚假断言。 (错误#27418207,错误#89324)

参考文献:这个问题是回归:Bug#17922198。

与从数据字典中提取表空间对象以填充数据字典高速缓存相关的性能得到了改进。 (Bug#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_collat​​ion_for_utf8mb4可以设置utf8mb4字符集的默认排序规则。该变量主要用于支持从MySQL 5.7或更早版本的主服务器复制到MySQL 8.0从服务器,或者使用MySQL 5.7主节点和一个或多个MySQL 8.0辅助节点进行组复制。将该变量的值复制到从站,以便从站可以正确处理源自主站的数据,并使用utf8mb4的不同默认归类。这可能会有所帮助,因为MySQL 5.7中utf8mb4的默认排序规则是utf8mb4_general_ci,但MySQL8.0中的utf8mb4_0900_ai_ci排序规则是utf8mb4_general_ci。

变量值确定下列语句的默认utf8mb4归类:

SHOW COLLATION和SHOW CHARACTER SET。

CREATE TABLE和ALTER TABLE具有CHARACTER SET utf8mb4子句,但不包含COLLATION子句,用于表字符集或列字符集。

CREATE DATABASE和ALTER DATABASE具有CHARACTER SET utf8mb4子句而没有COLLATION子句。

任何包含形式为_utf8mb4'some text'的字符串字面值的语句,不包含COLLATE子句。

(Bug#27389878,错误#27081073)

用列名选项DESCRIBE忽略列名称。 (错误#27387773,错误#89224)

在密钥迁移模式下运行时,服务器忽略无效选项。 (错误#27387331)

对于很长的路径名称,路径名称规范化可能会失败。 (Bug#27368298)

在配置期间,CMake认为rpcgen可用而不是检查它。 (Bug#27368078)

客户端身份验证过程在释放后可以使用内存。 (Bug#27366143)

-DWITH_ZLIB =系统可能导致其他CMake功能测试失败。 (错误#27356658,错误#89135)

在某些系统上,使用mysqld --initialize初始化数据目录非常慢。 (错误#27349579,错误#89122)

必须下载Boost才能使用RPM源代码包构建现在使用安全连接。 (错误#27343289,错误#89104)

转换ULONGLONG时间值的内部check_datetime_range函数可在Windows上引发断言。 (错误#27340709)

caching_sha2_password身份验证插件的锁定过多(每个连接一个锁定/解锁)。这现在改进为每个插件安装/卸载一次锁定/解锁。 (错误#27335346)

将'innodb_system'隐式指定为表分区的表空间名称的CREATE TABLE ... LIKE操作引发了一个断言。 (Bug#27331588)

SET PERSIST_ONLY可能会错误地存储大值变量。 (Bug#27322254)

即使禁用二进制日志记录,audit_log插件也可以将语句写入二进制日志。 (错误#27315321)

某些使用GREATEST()或LEAST()的查询产生堆使用后释放错误。 (Bug#27312703)

一个external_language列被添加到mysql.routines数据字典表中以支持不同语言的存储例程。存储在此列中的数据可通过INFORMATION_SCHEMA.ROUTINES表的EXTERNAL_LANGUAGES列访问。 (错误#27309116,错误#89038)

现在禁止使用与初始化服务器时使用的设置不同的lower_case_table_names设置来启动服务器。限制是必要的,因为数据字典表字段使用的排序规则基于服务器初始化时定义的设置,并且使用不同的设置重新启动服务器会导致与订购和比较标识符的方式不一致。 (错误#27309094,错误#89035)

对于使用auth_sock认证插件进行身份验证的帐户,服务器无法接受来自较旧版本MySQL的客户端的连接。 (Bug#27306178)

audit_log插件内存泄漏已更正。 (错误#27302151)

INFORMATION_SCHEMA.FILES表现在从存储引擎获取以下列所需的信息:LOGFILE_GROUP_NAME,LOGFILE_GROUP_NUMBER,ROW_FORMAT,VERSION。 (错误#27292586)

删除用户定义的函数并不总是从性能模式user_defined_functions表中删除它的条目。 (Bug#27270498)

为了减小其尺寸和存储占用空间,序列化字典信息(SDI)现在以紧凑的JSON格式生成。 (错误#27265584)

从多个会话并发执行RESET PERSIST和SET PERSIST可能导致服务器退出。 (Bug#27264789)

即使统计信息收集过程遇到错误,也可以缓存表空间统计信息。 (Bug#27259963)

SET PERSIST可能无法找到写入mysqld-auto.cnf文件的正确目录。 (Bug#27253828)

如果表中包含数据,ALTER TABLE无法创建生成的NOT NULL几何列。 (Bug#27252609)

Performance Schema variables_info表为在my.cnf中设置的变量显示了不正确的VARIABLE_SOURCE值,并且该变量也保留到mysqld-auto.cnf。 (Bug#27252077)

不正确地处理插件的加载和卸载可能导致服务器退出。 (Bug#27247280,Bug#27297704)

RESTART语句不适用于Ubuntu软件包。 (错误#27245918)

LDAP认证插件不是在FreeBSD上构建的。 (Bug#27238252)

当缓存值由窗口函数计算为NULL时,或者当其参数是带有可评估为NULL的ROLLUP操作的GROUP BY的一部分时,服务器不能正确处理查询。 (Bug#27233287)

在所有情况下,LAST_VALUE()等窗口函数都不能正确处理包含NOT NULL列的表。 (Bug#27230463)

角色缓存失效可能会执行不正确。 (Bug#27225806)

服务器启动时对持久变量的错误处理可能导致服务器退出。 (Bug#27224682)

对于从MySQL 5.7升级到8.0,对象定义的sql_mode值可能包含NOT_USED。 (Bug#27219709)

如果没有选择默认数据库,JSON_TABLE()失败。 (Bug#27217897)

向持有多个锁的InnoDB表添加唯一索引可以引发断言。 (Bug#27216817)

如果未选择数据库,则在视图定义中使用JSON_TABLE()的CREATE VIEW语句失败。 (错误#27189940)

性能架构复制表上的查询可能会返回不正确的结果,特别是当执行计划使用索引时。 (错误#27184567)

对于某些语句,FILE权限未正确检查。 (错误#27160888)

为了更好地在启动时按照与SET PERSIST相同的顺序启用持久变量设置,首先根据时间戳(现在存储在文件中)对mysqld-auto.cnf中的设置进行排序。 (Bug#27157520)

将dragnet.log_error_filter_rules系统变量设置为非常长的值可能会导致服务器退出。 (错误#27120953)

对于使用systemd的平台(请参阅使用systemd管理MySQL服务器),systemd并不总是能够推断出双叉mysqld进程的状态。因此,systemd会尝试重新启动mysqld,即使该进程以状态1结束。systemd现在被配置为以普通进程(Type = notify而不是Type = forking)运行mysqld。如果在环境变量NOTIFY_SOCKET中指定了套接字文件的名称,则mysqld会尝试打开一个与systemd进行通信的连接并在其中写入其状态更改。 (错误#27109556,错误#88463,错误#26538598,错误#87210)

ST_IsValid()为非WGS 84椭球上的某些地理多边形返回了不正确的结果。 (Bug#27074700)

包含FULLTEXT键和FTS_DOC_ID列的表上的多重插入语句导致服务器错误。 (错误#27041445,错误#88267)

参考文献:这个问题是一个回归:Bug#22679185。

在严格的SQL模式下,向AUTO_INCREMENT列分配无效值可能会被错误地处理,导致引发断言。 (错误#27041393,错误#88273)

线程堆栈耗尽可能会引发断言而不是返回错误。 (错误#27041350,错误#88277)

SET PERSIST_ONLY没有正确地考虑是否应该调用持久变量的运行时验证函数。 (Bug#27016247)

audit_log插件可能会错误地处理事件执行的中止,导致服务器退出。 (Bug#27008133)

修正了一些否定大符号整数的边界情况。 (Bug#27004880,Bug#27008075)

ALTER TABLE操作试图为废弃表空间中的表设置AUTO_INCREMENT值。 (错误#26935001)

MyISAM索引损坏可能发生在涉及按排序修复算法和许多(超过4.5亿个)行的批量插入和表修复操作中。 (错误#26929724)

性能模式可以产生具有尾部空间的DIGEST_TEXT值。这不再发生。 (Bug#26908015)

从系统表中删除索引可能导致服务器退出。 (错误#26881798)

使用CREATE TABLE ... SELECT的预准备语句在GROUP BY中引用具有相同名称的视图时会导致意外的行为。 (Bug#26881703)

在禁用自动提交并且处于PREPARED状态的XA事务时,尝试执行XA COMMIT或XA ROLLBACK失败。 (错误#26848877,错误#87836)

当没有错误发生时,LDAP身份验证插件生成的某些诊断消息会误导性地提示错误。 (Bug#26844713)

对mysql_upgrade和mysqlpump的初始化代码进行了重新组织,以避免断言失败。 (Bug#26802211)

由于尝试获取元数据锁时出现的错误处理不当,全文搜索可能会引发断言。 (错误#26799898)

由64位服务器上的keyring_file无法访问由32位服务器上的keyring_file插件创建的密钥环文件,反之亦然。 (Bug#26793060)

列性统计信息的元数据锁定在Performance Schema的metadata_locks和events_waits_xxx表中未正确显示。 (Bug#26772858,Bug#87708)

my_snprintf插件服务已删除并使用C ++ 11 snprintf重新实现。 (Bug#26696147,Bug#87547)

在具有大量表的服务器上从MySQL 5.7就地升级到MySQL 8.0之后,由于数据字典创建期间内存消耗过多,服务器启动失败。 (错误#26486160)

在修改用户权限的语句中发生的错误可能导致尝试访问用户权限缓存的其他事务发生死锁。 (Bug#26475282)

线程池插件记录了失败连接的太多信息。 (Bug#26368725,Bug#86863)

同时启用多个组件可能会导致服务器退出。 (错误#26171471,错误#86514)

格式错误的mysqld-auto.cnf文件可能导致服务器退出。 (错误#26085774)

在保留的表空间中创建表不会返回错误。 (错误#26073851,错误#86309)

对于调试版本,使用KILL终止存储的例程可能会引发断言。感谢Laurynas Biveinis的补丁。 (错误#26040870,错误#86260)

如果设置了init_connect系统变量,则其密码过期的客户端无法执行其内容,因此无法连接。现在,如果客户端有密码过期,则会跳过init_connect执行,这将使客户端连接并更改密码。 (Bug#25968185)

在满足以下所有三个条件的查询中,使用YYYYMMDD格式的日期未被正确识别:

查询执行了左连接。

连接内部表中的DATE列是多列主键的一部分。

内部表主键中的每一列都与另一个值进行比较;这可能是文字或列值。 (Bug#25949639)

使用外键的表上的就地ALTER TABLE操作导致表定义不匹配。在执行ALTER TABLE期间传递给存储引擎方法的新表定义包含无效的外键名称。 (错误#25915132,错误#85997)

可以将不存在的角色分配给帐户作为其默认角色。 (错误#25755666,错误#85561)

使用C API时,当试图执行一个CURSOR_TYPE_READ_ONLY设置的INSERT准备语句时,客户端挂起。 (错误#25701141,错误#85105)

即使要重命名的用户或角色在任何角色图中都不存在,RENAME USER也会失败。 (错误#25658586)

如果收到格式错误的客户端/服务器协议数据包,MySQL客户端程序可能会意外退出。 (错误#25471090)

由性能模式收集的内存统计信息可能由于竞争条件而不正确。 (Bug#25212799)

内部散列的CONNECTION_CONTROL插件的错误处理导致错误日志和最终服务器退出中的虚假消息。 (错误#25052009)

CURRENT_ROLE()和ROLES_GRAPHML()现在返回一个带有utf8字符集的字符串。以前,他们错误地返回了一个二进制字符串。 (Bug#24843257)

杀死INSTALL COMPONENT或UNINSTALL COMPONENT可能导致mysql.component系统表中单个组件的多行。 (错误#24660436)

使用X插件并发执行高负载时执行SHOW PROCESSLIST可能会导致计划外服务器退出。 (错误#24621170)

参考文献:另见:错误#23057045。

MySQL中的正则表达式实现使用一个String对象(意图初始化为空)来保存当前主题,并使用字符“”作为该值。这可能会干扰同样的其他功能。这通过用nullptr构造String来解决。 (Bug#23276471)

当发生错误时,mysqlpump可能会泄漏内存或退出。 (错误#23102944)

LDML 2.8归类定义可能会导致意外的服务器行为。 (Bug#22819030)

日志打开操作访问日志名称系统变量而不锁定它们。访问这种变量的多个线程可能会导致争用条件和意外的服务器行为。 (错误#22591899)

当范围优化器为长度足够的字符串计算前缀时,可能会在字符中间截断字符串,这可能会导致调试版本中的断言和其他故障。现在在这种情况下采取步骤以确保字符串在字符边界处被截断。 (Bug#22475473,Bug#13712655)

由于读取未初始化的数据,在某些情况下,在GROUP BY子句中具有子查询或表达式的查询可能会返回随机结果。 (错误#20035304)

参考文献:另见:错误#21922202。

audit_log插件没有记录准备好的语句的占位符值。 (Bug#16617026)

即使较小的整数类型更合适,UNION语句中的整数列也可以转换为BIGINT。 (错误#11747567,错误#33004)

添加了ER_REGEXP_INVALID_CAPTURE_GROUP_NAME(错误13110)。 (错误#89796,错误#27597980)

窗口函数行缓冲区处理已被重构,以将处理程序读取次数减少25%。 (错误#89512,错误#27484133)

对于某些框架,当使用设置为false的windowing_use_high_precision系统变量进行计算时,VARIANCE(),VAR_POP()和VAR_SAMP()函数会产生错误的结果。 (错误#89390,错误#27438725)

当优化器试图用等同的生成列替换表达式时,没有考虑生成具有前缀索引的列。这阻止了使用前缀索引来加速使用生成的列表达式的谓词。 (错误#89291,错误#27403367)

FIRST_VALUE()并不总是为空帧返回NULL。 (错误#89116,错误#27348276)

当一个或多个参数作为显式NULL传递时,接受可选参数的正则表达式函数不会按预期返回NULL。 (错误#88872,错误#27252630)

基于行的复制在从属设备上使用了错误的一组索引。 (错误#88847,错误#27244826)

在没有选择默认数据库的情况下执行时,EXPLAIN EXTENDED引发了错误1046由于EXTENDED关键字已被删除,所以未选择数据库而不是预期的SQL语法错误。 (错误#88591,错误#27153116)

CMake选项OPTIMIZER_TRACE = 0对构建没有影响,因此不再使用。 (错误#88520,错误#27130109)

使用GROUP BY且没有常量或聚合列的SELECT语句在第一次尝试失败时正确检查了函数依赖关系,但在下一次尝试中错误地成功了。 (错误#88474,错误#27427677)

参考文献:另见:错误#21807579。

对于DATE列声明为NOT NULL的情况,SELECT语句中具有UNION的CREATE TABLE ... SELECT语句在严格模式下失败。 (错误#87711,错误#27068222)

使用嵌套子选择的准备语句并不总是正确处理。 (错误#87484,错误#26657904)

包含窗口函数的查询的成本估算未考虑PARTITION BY或ORDER BY的成本,也未包含使用帧缓冲区的成本。 (错误#87373,错误#26612356)

参考文献:另见:Bug#26502118。

在使用子查询处理查询时,如果已知外部查询产生空结果,则子查询不再进行优化;在这种情况下,EXPLAIN现在显示未优化,外部查询为空。

进行此更改是因为,如果在优化时发现外部查询使用的表为空,则会将连接列设置为NULL(即使定义为不可为空),这会在优化子查询时导致冲突。

如果外部查询具有聚合但没有任何GROUP BY,则会发生异常;这意味着它有一个非空结果,并且SELECT列表中的任何子查询都必须进行评估和优化,从而重新打开可空性问题,现在可以正确处理这种情况。 (错误#83115,错误#24713879)

参考文献:另见:错误#83216,错误#24760317。

从组成包含可空列的唯一键的所有列中进行选择时,WHERE条件中的所有列都设置为非空值,但MySQL没有考虑其唯一性,结果only_full_group_by错过了检测功能依赖列的结果。 (错误#79291,错误#22279903)

当使用部分索引时,即使部分索引覆盖了所需的整个数据集,优化器也会执行更昂贵的表查找而不是使用索引。 (错误#74359,错误#19806106)

05-06 12:59