Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.12 的变化(2018-07-27,正式发布)

MySQL 8.0.12 的变化(2018-07-27,正式发布)

有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/

审核日志说明

  • 对于新的 MySQL 安装,MySQL Enterprise Audit 使用的表中的USERHOST列 现在具有更好地对应于系统表 中的和列audit_log_user的定义的定义。UserHostmysql.user

    对于已安装 MySQL Enterprise Audit 的安装升级,建议您按如下方式更改表定义:

    ALTER TABLE mysql.audit_log_user
      DROP FOREIGN KEY audit_log_user_ibfk_1;
    ALTER TABLE mysql.audit_log_filter
      CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
    ALTER TABLE mysql.audit_log_user
      CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
    ALTER TABLE mysql.audit_log_user
      MODIFY COLUMN USER VARCHAR(32);
    ALTER TABLE mysql.audit_log_user
      ADD FOREIGN KEY (FILTERNAME) REFERENCES mysql.audit_log_filter(NAME);

    (漏洞 #23706056)

编译笔记

  • Microsoft Windows: 对于 OpenSSL 1.1,Windows 的库名称已更改。CMake配置代码现在说明了这一点。 此外,现在可以在 Windows 上使用它 -DWITHOUT_SERVER=1来构建 32 位客户端二进制文件。(缺陷 #28170711,缺陷 #91223)

  • 服务器构建的 Boost 库的最低版本现在是 1.67.0。(漏洞#27866110)

配置注意事项

  • 这些 Performance Schema 系统变量的最大值从 256 增加到 1024:

    performance_schema_max_cond_classes
    performance_schema_max_file_classes
    performance_schema_max_mutex_classes
    performance_schema_max_rwlock_classes
    performance_schema_max_socket_classes
    performance_schema_max_stage_classes
    performance_schema_max_thread_classes

    此 Performance Schema 系统变量的默认值从 250 增加到 300:

    performance_schema_max_mutex_classes

    (漏洞#27647918)

  • 对于RelWithDebInfo基于 Linux 的构建, REPRODUCIBLE_BUILD现在默认为 ON. (漏洞#27483447)

  • 系统变量的默认值 slave_pending_jobs_size_max 已从 16M 增加到 128M。在多线程从站( with slave_parallel_workers > 0)上,此值设置可用于持有尚未应用的事件的从属工作队列的最大内存量。在计算部署多线程从站所需的资源时,应考虑潜在的更大内存使用量。主服务器和单线程从服务器不受此设置的影响。

    新默认值是 max_allowed_packet系统变量指定的最近增加的默认值(现在为 64M)的两倍。的值 slave_pending_jobs_size_max是一个软限制,因此大于其值的事件(由一个或多个数据包组成)可以排队和处理。但是,一个大的事务会一直等到所有slave worker的队列都空了,然后再处理。所有后续交易都将暂停,直到大笔交易完成。清除所有 slave worker 队列的延迟和等待后续事务排队可能会导致复制 slave 延迟并降低 slave worker 的并发性。的价值 slave_pending_jobs_size_max 因此应设置得足够高以适应大多数预期的事件大小。

数据字典注释

  • 引入了以下数据字典增强功能:

    • 添加了一个内部方法来防止全局读取锁定。在存储、更新或删除数据字典对象之前调用该方法。

    • 断言代码已添加到数据字典 API 中,以防止在存储、更新或删除数据字典对象时出现全局读取锁定。

    • 当存储引擎获取独占元数据锁时,现在会隐式获取针对备份锁和全局读取锁的保护。

    • 现在在发布成本模型条目之前执行成本模型缓存有效性检查。

    • 添加了数据字典 API 函数,用于提交和回滚事务,以及释放事务元数据锁。

    (缺陷号 27937059)

弃用和移除说明

  • 子句的显式ASCDESC 限定符GROUP BY现已弃用,并将在未来的 MySQL 版本中删除。

防火墙注意事项

  • MySQL Enterprise Firewallfirewall_whitelist表现在包含一个名为 的主键列ID。(漏洞#27164826)

SQL 函数和运算符注释

日志记录

  • 以前,成功分配给 dragnet.log_error_filter_rules 系统变量会导致注释和非零警告计数。为避免为成功的操作生成诊断,不再生成此注释。相反, dragnet.Status可以查询状态变量以确定最近分配给 的结果 dragnet.log_error_filter_rules。(缺陷 #27910708,缺陷 #90571)

  • 以前,系统变量中列出的日志组件 log_error_services必须用分号分隔。组件现在可以用逗号分隔。给定的设置不能同时使用分号和逗号分隔符。(缺陷 #27788925,缺陷 #90268)

优化器注释

  • filesort算法(优化器使用它来满足ORDER BY无法使用索引时的子句)现在的内存效率更高。主要的变化是优化器根据需要递增地分配内存缓冲区,直到 sort_buffer_size系统变量指示的大小,而不是预先分配固定数量的 sort_buffer_size字节。这使用户能够设置 sort_buffer_size更大的值来加速更大的排序,而不用担心小排序会使用过多的内存。(对于多线程较弱的 Windows 上的多个并发排序可能不会出现此好处malloc。)

    此外,filesort对最坏情况的看法也不那么悲观。以前, filesort如果合并操作或排序键生成可能失败,则会在不启动的情况下产生错误。现在,因为最坏的情况在实践中不太可能发生, filesort所以只为实际而不是预期的故障产生错误。

  • EXPLAIN 以前,仅为 SELECT语句生成 扩展输出。现在还为 INSERTREPLACEUPDATEDELETE语句生成扩展输出。(要显示扩展输出,请使用SHOW WARNINGS以下内容 EXPLAIN。请参阅 扩展 EXPLAIN 输出格式。)

包装说明

  • 对于 Linux,通用二进制分发压缩算法从 Gzip 更改为 XZ;并且文件扩展名从 .tar.gz 更改为 .tar.xz。(缺陷 #28450941,缺陷 #91889)

  • Docker 默认禁用与 NUMA 相关的操作,因此 Docker 镜像中包含的 mysqld现在禁用了 NUMA 支持,这样错误日志就不会充满 NUMA 警告。(漏洞 #28081363)

  • RPM.spec文件已更新以反映 yaSSL 的删除,并且 OpenSSL 是所有构建的默认 SSL 库。(漏洞 #28025427)

  • 对于通用 Linux.tar.gz发行版,mysqlxtest客户端已从服务器包移至测试包。(漏洞#27744137)

  • 用于在 Oracle Linux 7 上安装 MySQL Server 的 ARM 64 位 (aarch64) 二进制文件的 RPM 包现已在 MySQL Yum 存储库中提供并可直接下载。

    此 ARM 版本的已知限制:您必须启用 Oracle Linux 7 软件集合存储库 (ol7_software_collections) 才能安装此程序包,并且还必须调整 libstdc++7 路径。有关更多详细信息,请参阅 Yum 的平台特定说明

插件说明

安全说明

空间数据支持

  • Incompatible Change: 新的空间函数 ST_Longitude()分别 ST_Latitude()返回其 Point参数的经度或纬度。如果使用第二个参数调用,这些函数将使用该参数分别设置其参数的经度或纬度Point

    此外,ST_X()ST_Y()函数现在Point根据其空间参考系统定义 (SRS) 解释它们的参数:

    • ST_X()返回 SRS 定义中第一个出现的轴的坐标值,并ST_Y()返回 SRS 定义中第二个出现的轴的坐标值。

    • 如果ST_X()ST_Y()用于设置Point具有地理 SRS 的参数的经度或纬度,则经度或纬度值必须在 SRS 的适当范围内,否则会出错。

    笔记

    如果空间数据包含现在由 ST_X()和 以不同方式解释的几何值,则ST_Y()与以前的 MySQL 版本相比,使用这些函数的现有查询将返回不同的结果。

    (缺陷 #27125600,缺陷 #88503)

  • 包含用于空间计算的空间参考系统数据的 EPSG 数据集已从版本 9.2 升级到 9.3。(漏洞#27977721)

  • 接受几何参数并先前返回 经度或纬度值超出范围 的ER_LONGITUDE_OUT_OF_RANGEor 错误的空间函数现在返回 or 。这不适用于解析或修改几何图形的空间函数: 、 、 、 、 、、 和 。(漏洞#27892138)ER_LATITUDE_OUT_OF_RANGEER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGEER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGEST_xxxFromText()ST_xxxFromWKT()ST_xxxFromWKB()ST_GeomFromGeoJSON()ST_X()ST_Y()ST_Longitude()ST_Latitude()

  • 以前,解析器USING RTREE 在索引规范中识别,但这不能为任何存储引擎指定。现在USING RTREE允许用于空间索引规范。(缺陷号 27836608)

  • 几何列上的索引现在必须是空间索引。因此,SPATIAL关键字是可选的,但对于在空间列上创建索引是隐含的。主键或唯一索引不允许在几何列上使用空间索引。此外,ASC并且 DESC不允许用于空间索引。(缺陷号 21087676)

SQL 语法说明

  • 重要变化: MySQL 现在允许具有WITH ROLLUP 修饰符的查询使用DISTINCT. 有关详细信息,请参阅 SELECT 语句。(错误#87450、错误#26640100、错误#20671578、错误#76229)

  • 重要变化: MySQL 现在允许ORDER BYSELECT. 声明。(缺陷 #86312,缺陷 #27063525)

  • 重要更改: MySQL 现在允许ORDER BY在具有WITH ROLLUP修饰符的查询中使用。有关详细信息,请参阅SELECT 语句。(缺陷 #86311,缺陷 #26073513)

X 插件说明

  • 从 MySQL 8.0.11 服务器返回到 X 插件客户端的身份验证错误被标记为致命错误,这导致客户端停止尝试使用不同方法进行身份验证尝试的自动序列。X 插件现在忽略致命的身份验证错误,以及后续的预期错误,例如写入超时错误,而身份验证尝试序列正在进行中。如果尝试的所有身份验证方法均未成功,X Plugin 现在会选择并返回从服务器收到的最相关的错误消息,这不一定是收到的最后一条错误消息。(漏洞 #28135006)

  • 在 X Plugin 自动身份验证序列中,会按照预设序列使用不同的身份验证方法进行连接尝试。PLAIN X Plugin 在开始序列之前检查连接是否使用 SSL,如果连接未加密,则不会尝试使用身份验证方法连接。为了进行额外的验证,添加了检查和错误,以便PLAIN在连接未加密时尝试使用身份验证方法将被禁止。(漏洞#27691189)

  • 在身份验证失败的情况下,X 插件始终返回错误代码ER_ACCESS_DENIED,并针对错误情况提供自定义 X 协议错误消息。从 MySQL 服务器收到的身份验证失败的错误代码现在会传递给客户端,并附带标准的 MySQL 错误消息。(漏洞#27675699)

  • 在 X 插件自动身份验证序列中,连接尝试使用预设序列中的不同身份验证方法进行,每次失败的连接尝试后返回的错误都标记为 severity FATAL。现在,错误标记为 ERRORwhile there are still other authentication methods to be attempted,只有导致断开连接的最终错误标记为 FATAL。(漏洞#27636947)

  • X 插件代码使用不同的预处理器定义编译了两次。(缺陷号 27267054)

  • X 插件对身份验证问题的处理进行了多项改进:

    • 如果错误响应表明连接已断开或读取或写入超时,X 插件自动身份验证序列(其中按预设序列使用不同的身份验证方法进行连接尝试)现在将停止。

    • 如果出现任何致命错误,自动身份验证序列现在也会停止。

    • 现在为放弃的身份验证序列报告最后一个重要错误,而不仅仅是发生的最后一个错误。

    • caching_sha2_password如果尝试通过不安全的连接 使用身份验证插件进行身份验证,现在会报告更具体的错误代码和消息 。

    (漏洞#27257774)

  • RESTART 在某些情况下,加载了 X 插件的 MySQL 服务器可能会在由启动失败或命令 启动的关闭过程中意外停止。该问题现已解决。(错误#25474793,错误#27259783)

添加或更改的功能

  • 重要变更;复制: 使用该 group_replication_exit_state_action 选项配置当服务器实例非自愿离开组时组复制的行为方式,例如当它由于网络连接不稳定而被逐出组时。当 group_replication_exit_state_action 设置为ABORT_SERVER(默认值)时,实例会自行关闭,当 group_replication_exit_state_action 设置READ_ONLY,实例会切换到超级只读模式并进入Group ReplicationERROR状态。

  • InnoDB: InnoDB现在支持 ALGORITHM=INSTANT以下 ALTER TABLE操作:

    • 添加一列。此功能称为 即时ADD COLUMN

    • 添加或删除虚拟列。

    • 添加或删除列默认值。

    • 修改 ENUMor SET列的定义。

    • 更改索引类型。

    • 重命名表。

    只支持ALGORITHM=INSTANT 修改数据字典中元数据的操作。在操作的准备和执行阶段,表上没有独占元数据锁,表数据不受影响,使操作即时进行。如果未明确指定,ALGORITHM=INSTANT则默认由支持它的操作使用。如果 ALGORITHM=INSTANT指定但不受支持,则操作会立即失败并出现错误。

    有关支持的操作的更多信息 ALGORITHM=INSTANT,请参阅 在线 DDL 操作

    感谢腾讯游戏DBA团队的贡献。(漏洞 #28100103,漏洞 #91074)

  • InnoDB: 现在支持对大对象 (LOB) 数据的小更新进行撤消日志记录,这提高了大小为 100 字节或更小的 LOB 更新的性能。以前,LOB 更新的大小至少为一个 LOB 页面,这对于可能只修改几个字节的更新来说不是最佳选择。此增强功能基于 MySQL 8.0.4 中添加的对 LOB 数据的部分更新的支持。

  • 复制: 您现在可以使用 shell 管道将压缩二进制日志文件的存档作为流输入提供给mysqlbinlog 。以前,在将文件传递给mysqlbinlog之前,必须单独提取这些文件。感谢 Facebook 团队的贡献。

    在本例中,binlog-files_1.gz包含多个二进制日志文件进行处理。管道提取 的内容binlog-files_1.gz,将二进制日志文件作为标准输入通过管道传输到mysqlbinlog ,并将mysqlbinlog的输出通过管道传输 到mysql客户端执行:

    gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p

    (漏洞 #27445278,漏洞 #89423)

    参考资料:另请参阅:Bug #27836543。

  • Replication:SYSTEM_VARIABLES_ADMIN权限 PERSIST_RO_VARIABLES_ADMIN 已添加到 mysql.session保留帐户。(错误#89873,错误#27621869)

  • 复制: 有关 XCom 内存使用情况的信息已添加到性能模式表中。该 setup_instruments表现在有一个条目对应于 XCom 缓存,该 memory_summary_global_by_event_name 表包含 XCom 缓存的内存使用统计信息。

  • Microsoft Windows:在 Windows 上,使用该选项可以RESTART抑制 用于实现的分叉 --gdb但是,这是一个副作用,是在设置调试环境的其他选项操作之外执行的。在非调试设置中,新--no-monitor 选项可能仅用于抑制派生监视器进程的目的。对于使用 --gdb--no-monitor,执行RESTART会导致服务器简单地退出而不重新启动。(漏洞 #27801043)

  • DROP TABLE通过和 来检查外键关系 DROP DATABASE得到改进。现在在删除任何表之前进行检查,因此如果出现问题,语句会在进行任何更改之前失败。父表和子表现在可以按任意顺序删除,只要它们由同一DROP TABLE语句删除即可。此外,改进了尝试删除父表而不删除子表的错误报告。(错误#27821060、错误#17564464、错误#70531、错误#22359539、错误#79610)

  • 添加对角色的支持后,该ADMIN 关键字成为保留关键字。ADMIN现在再次成为非保留关键字。(漏洞#27814204)

  • 当客户端关闭服务器时,服务器现在会向错误日志写入一条消息,指示哪个用户执行了此操作。(漏洞 #26246628,漏洞 #86635)

  • 以前,对于该 --ssl-mode=VERIFY_IDENTITY 选项,客户端检查它用于连接的主机名是否与证书中的公用名值匹配,而不是主题备用名称值。现在,如果客户端使用 OpenSSL 1.0.2 或更高版本,客户端会检查主机名是否与服务器证书中的 Subject Alternative Name 值或 Common Name 值匹配。感谢 Daniël van Eeden 提供此更改所基于的补丁。(错误#16211011、错误#68052、错误#27511233、错误#89578)

修正错误

  • 重要变更;JSON:JSON_TABLE()函数现在自动解码 base-64 值并使用列规范给定的字符集打印它们。(缺陷 #90157,缺陷 #27729112)

    参考资料:另请参阅:Bug #89847、Bug #27613276。

  • InnoDB:升级到8.0.12后,8.0.12 新增的列 INFORMATION_SCHEMA.INNODB_TABLESINFORMATION_SCHEMA.INNODB_COLUMNS表没有出现。(缺陷号 28065244)

  • InnoDB: 存储在 LOB 索引条目中的大对象 (LOB) 版本号未初始化为 0,而不是初始化为 1。(缺陷 #28046298)

  • InnoDB: 将列添加到具有生成列的表引发了无效断言。(缺陷号 28040201)

  • InnoDB: 在检查点操作期间尝试访问释放的内存导致服务器退出。(错误号 28039477)

  • InnoDB: 使用在正常 MySQL 构建中无意中暴露的实验性系统变量启动服务器时发生断言失败。(错误#27899424、错误#90526、错误#27898396、错误#90523、错误#27898344、错误#90522)

  • InnoDB: 无效的系统变量设置引发了断言。(漏洞#27898284)

  • InnoDB: 尝试将表从废弃的 file-per-table 表空间移动到共享表空间引发断言。该操作现在会产生一个错误。(漏洞#27861972)

  • InnoDB: 与大型对象 (LOB) 的页面分配相关的潜在故障没有得到充分处理。(漏洞 #27852003)

  • InnoDB: ngram 全文搜索解析器允许将逗号和句点字符标记为单词,这导致布尔和自然语言模式搜索结果不一致。逗号和句点字符不再标记化。(漏洞#27847697)

  • InnoDB: 校验和不匹配和其他问题是由同时修改表空间标题页并试图在部分初始化的页面上放置锁引起的。(漏洞#27823064)

  • InnoDB:操作 返回的 I/O 错误fsync()现在被视为硬错误。(缺陷 #27805553,缺陷 #90296)

  • InnoDB: 在单个线程中,两个小事务锁定了一个大对象值 (LOB) 的第一页,而另一个线程试图分配该页,导致死锁。(漏洞#27777959)

  • InnoDB: 升级到 MySQL 8.0.12 后,表中缺少包含 FTS_DOC_ID 列的表列 INFORMATION_SCHEMA.INNODB_COLUMNS。(漏洞#27774145)

  • InnoDB: 当优化器选择在虚拟列上定义的前缀索引时,引发了无效断言。(漏洞#27755892)

    参考资料:此问题是 Bug #19806106 的回归。

  • InnoDB: 在不正确的元数据锁定保护下,可以打开被截断表的内存表对象。

    实施了一种在操作期间 保留AUTOINC 计数器值 的新方法。TRUNCATE PARTITION(漏洞#27754995)

  • InnoDB: 在包含脏页但没有重做日志记录的小型事务提交期间引发断言。迷你事务没有等待最近关闭的缓冲区中的空间,随后用无效的当前 LSN 值标记了页面。在将无效的 LSN 值添加到刷新列表后,延迟的微型事务添加了具有较早 LSN 值的脏页,从而破坏了刷新列表的顺序。

    添加了 innodb_log_checkpoint_fuzzy_now 调试选项。启用此选项会强制 InnoDB写入模糊检查点。此外,还添加了新的内部重做日志模块计数器以跟踪 LSN 值。log_lsn_buf_dirty_pages_added 计数器跟踪已添加脏页的 LSN 值,计数器log_lsn_buf_pool_oldest_lwm 跟踪缓冲池中最旧修改块的低水位线 LSN。(漏洞#27664539)

  • InnoDB: 竞争感知事务调度算法 (CATS) 跟踪等待另一个事务的事务数。在死锁的情况下,等待事务数的近似方法会产生夸大的值。(漏洞#27646322)

  • InnoDB:InnoDB在持有受害事务锁的同时 尝试获取(缺陷号 27626681)

    参考资料:此问题是 Bug #23476050 的回归。

  • InnoDB: 尝试读取零长度 BLOB 值在恢复期间引发断言失败。BLOB 值尚未完全插入。(漏洞#27617389)

  • InnoDB: 为已在内存中的表获取表锁时发生竞争条件。(错误#27586419,错误#27577704)

    参考资料:此问题是 Bug #26848711 的回归。

  • InnoDB: 重新启动服务器后,尝试创建加密表从存储引擎返回一般错误。(漏洞#27577339)

  • InnoDB: 使用带有空间索引的竞争感知事务调度 (CATS) 导致事务无限期等待。(漏洞#27572937)

  • InnoDB: 对包含多字节字符的表空间名称的错误解析导致DROP DATABASE 操作失败。(漏洞#27566937)

  • InnoDB: 当数据字典试图打开分区表时,为识别临时表而执行的检查导致错误。(漏洞#27565997)

  • InnoDB: 导入表空间操作期间报告的架构不匹配错误无法以可读格式打印不匹配的表标志。(漏洞#27542720)

  • InnoDB: DDL 操作未能等待FULLTEXT 索引优化操作完成。(漏洞#27326796)

    参考资料:此问题是 Bug #24938374 的回归。

  • InnoDB:trx_set_rw_mode()从函数 中删除了对只读事务的不必要检查感谢 Sandeep Sethia 提供补丁。(错误#27211287,错误#88739)

  • InnoDB: 添加外键约束的 DDL 操作在访问属于父表的陈旧内存对象时引发断言。(缺陷号 27208858)

  • InnoDB:启动memcached get 操作 后发生断言失败 (漏洞#26876594)

  • InnoDB: 在外键检查期间遇到损坏的索引 ID 引发断言。(漏洞#26654685)

  • InnoDB:DROP TABLE操作的 DDL 后阶段检查索引状态时,对驻留在通用表空间中的表的操作引发断言。(漏洞#26523254)

  • InnoDB: DDL 操作期间的内部死锁导致长时间信号量等待,然后服务器退出。(漏洞#26225783)

  • InnoDB: 由于锁升级无效,DDL 操作遇到严重错误。(漏洞 #26225783)

  • InnoDB: 在 Windows 64 位系统上,无效的缓冲池配置值导致服务器在启动时退出。(缺陷 #26100239,缺陷 #86370)

  • InnoDB: 删除了与互斥锁类型定义相关的调试代码块。它不再与代码块的非调试版本不同。(漏洞 #24952279,漏洞 #83529)

  • InnoDB: 由于日志解析缓冲区溢出导致恢复期间的服务器故障。空间现在被动态分配给日志解析缓冲区,并根据需要递增,直到达到 指定的大小 innodb_log_buffer_size。(漏洞 #24734190)

  • InnoDB: 通过避免对表锁队列进行昂贵的迭代,表锁定针对同一个表上的并发更新进行了优化。

    感谢翟伟祥的贡献。(错误#18955152,错误#72948)

  • 打包: 在 Windows 上, mysqld.exe --help命令在系统输出中显示了不必要和意外的详细信息,此修复消除了这些信息。(缺陷号 27894020)

  • 分区:语句 回滚 ALTER TABLE ... TRUNCATE PARTITION未正确处理。(漏洞 #27603025)

    参考资料:另请参阅:Bug #87562、Bug #26710839。

  • 分区: 对于分区表,重建表或重启服务器后分区更新时间可能不正确。(错误号 27073100)

  • 复制: 如果在服务器启动时指定该选项 都设置为非零值, --skip-log-bin 则不会发出警告消息 该 选项意味着没有要过期的二进制日志文件,因此这些二进制日志过期时间设置的结果(即忽略该值)没有实际效果。但是,现在发出警告消息,以便在为服务器启用二进制日志记录之前可以纠正这种情况。(漏洞#27699608)expire_logs_daysbinlog_expire_logs_seconds--skip-log-binexpire_logs_days

  • 复制: 当成员加入组失败时生成的日志消息已得到改进,例如,当 group_replication_group_name加入组的成员与种子不匹配 group_replication_group_name 时,日志消息中现在对此进行了描述。(漏洞#27628695)

  • 复制: 如果 MySQL 服务器以 innodb_force_recovery设置为 4 或更大的崩溃恢复模式启动,这将InnoDB进入只读模式,则不应初始化半同步复制主插件。由于 MySQL 8.0 中插件初始化顺序的变化,服务器假定如果插件已注册,它也已被初始化,并错误地尝试取消初始化它。现在已更正此插件在崩溃恢复模式下的处理,以便在插件未初始化时不执行取消初始化功能。(漏洞#27481872)

  • 复制: 复制过滤器或二进制日志过滤器的使用在应用于使用 XA 事务更新的表时可能会导致问题。过滤表可能会导致复制从属上的 XA 事务为空,并且不支持空 XA 事务。此外,对于复制从属服务器上的设置 master_info_repository=TABLErelay_log_info_repository=TABLE 这成为 MySQL 8.0 中的默认设置,数据引擎事务的内部状态在过滤后的 XA 事务后发生更改,并且可能与复制事务上下文状态不一致。

    由于这些问题,不支持将复制过滤器或二进制日志过滤器与 XA 事务结合使用。此修复程序添加了新错误 ER_XA_REPLICATION_FILTERS,无论何时 XA 事务受到复制过滤器的影响,都会记录该事务,无论事务是否因此为空。如果事务不为空,复制从属能够继续运行,但您应该采取措施停止对 XA 事务使用复制过滤器以避免潜在问题。如果事务为空,则复制从站停止。在那种情况下,复制从属可能处于不确定状态,在这种状态下,复制过程的一致性可能会受到损害。特别是,gtid_executedslave 的 slave 上的设置可能与 master 上的设置不一致。要解决这种情况,请隔离 master 并停止所有复制,然后检查复制拓扑中的 GTID 一致性。撤消生成错误消息的 XA 事务,然后重新启动复制。(漏洞#27442477)

  • Replication:使用mysqlbinlog读取大于128KB的二进制日志事件时,读取失败,因为返回的大小为128KB,而不是实际大小。该问题现已解决。感谢 Facebook 团队提供补丁。(错误#27417084,错误#89326)

  • Replication: 当一个大于binary log transaction cache size(binlog_cache_size)的事务在处理过程中flush到一个临时文件,由于临时目录空间不足导致flush失败,没有正确处理flush错误。错误日志没有写入任何信息,事务回滚后二进制日志缓存也没有清空。现在,在这种情况下,服务器会根据设置采取适当的操作 binlog_error_action(关闭服务器或停止日志记录),并将消息写入错误日志。当事务回滚时,服务器会检查刷新错误并清除二进制日志缓存(如果有的话)。(漏洞 #27399620,漏洞 #89272)

  • 复制: 当 GTID 用于复制时,在从服务器上过滤掉的复制事务将被持久化。如果在从站上启用了二进制日志记录,则过滤掉的事务将写入二进制日志,Gtid_log_event 后跟一个仅包含 BEGINCOMMIT语句的空事务。如果禁用二进制日志记录,则过滤掉的事务的 GTID 将写入mysql.gtid_executed表中。此过程确保已执行的 GTID 集合中没有间隙,并且如果从属重新连接到主,则不会再次检索过滤掉的事务。以前,此过程未针对 CREATE DATABASEALTER DATABASEDROP DATABASE语句,但现在对这些语句以及其他语句执行。(漏洞 #27308751,漏洞 #88891)

  • 复制: 在多线程从站上,当在STOP SLAVE从站上执行一条语句,然后执行一条START SLAVE语句时,错误日志可以在退出时为从站 SQL 线程报告二进制日志中的不同位置,与为从站 SQL 报告的位置相比线程在随后的初始化。

    对于多线程从站,SQL 线程在退出时报告的位置是一个低水位线,在此之前复制流是一致的并且没有间隙。出现在该位置之前的事务保证已提交,但该位置之后的事务可能已提交或未提交。然而,这个低水位线是在停止工作线程的过程实际执行之前报告的,并且低水位线随后在该过程中由检查点例程更新。现在更改了日志消息的时间,以便将最终低水位线报告为退出时 SQL 线程的位置。(缺陷号 27300658)

  • 复制: 无法对运行早于 5.7.23 版本的 MySQL 的复制组进行在线升级。当运行 MySQL 5.7.22 或 MySQL 8.0.11 之前版本的成员试图加入一个运行 MySQL 5.7.21 或更早版本的成员的组时,它无法加入该组,因为 MySQL 5.7.21 没有发送值它是 lower_case_table_names系统变量。这意味着较新的版本将 lower_case_table_names变量与无效值进行比较并退出该组。解决方法是使组脱机,升级到版本 5.7.23 或 8.0.12 及更高版本。然后可以在不使组脱机的情况下执行组的后续升级。看 升级组复制。(缺陷 #90794,缺陷 #27991334)

  • Replication:gtid_purged变量包含已被服务器从日志中清除的二进制日志事件。当运行 Group Replication 插件时,这个变量不应该被修改,但这是可能的。现在在组复制运行时不能修改该变量。(缺陷 #90146,缺陷 #27724561)

  • 复制: 未正确解码PIT_TRANSACTIONS_NEGATIVE_CERTIFIEDPIT_TRANSACTIONS_ROWS_VALIDATINGPIT_TRANSACTIONS_LOCAL_ROLLBACK(缺陷 #90077,缺陷 #27692831)

  • 复制: 在某些情况下,例如在分布式恢复过程中,认证信息垃圾收集清除的数据多于应有的数据,导致未检测到冲突。已改进垃圾收集程序以考虑这种情况。(漏洞 #89938,漏洞 #27652526)

  • 复制: 错误 ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY 被错误地记录。(错误#89788,错误#27590534)

  • Replication:group_replication_applierchannel的applier线程遇到错误时,错误信息中的 master_log_nameend_log_pos不正确。在 Group Replication 中,事务的事件在写入事务发起的成员的二进制日志之前被复制。结果是这些事件的最终master_log_name和 通道的应用程序线程end_log_pos应用于副本时是未知的 group_replication_applier为避免混淆,现在通道遇到的任何此类错误消息group_replication_applier 都不包含二进制日志名称和二进制日志位置。(错误#89146,错误#27368735)

  • 复制:group_replication_force_members 用于解锁一个组,例如在失去多数之后,有时会失败并出现错误 1231。(错误 #86957,错误 #26394418 )

  • macOS: 在 macOS 上,即使未在 MySQL 首选项窗格中设置,服务器也会在系统启动时自动启动。(缺陷 #27969174,缺陷 #90672)

  • Microsoft Windows: 对于 Windows 上的调试构建,CREATE SPATIAL REFERENCE SYSTEM使用空定义字符串可能会引发断言。(漏洞#27672683)

  • 在客户端库中,信号被错误地解锁为 ppoll(). 感谢 Facebook 的补丁。(错误#28075623、错误#90999、错误#28096808、错误#91067)

  • 某些ALTER TABLE语句可能会禁用表加密。(漏洞 #28045585)

    参考资料:此问题是 Bug #27389878 的回归。

  • 在某些情况下,MyISAM代码编译由于缺少包含文件而失败。(缺陷 #28039150,缺陷 #90898)

  • 该函数在语句REGEXP_REPLACE()中使用时截断了其结果 。UPDATE(缺陷 #28027093,缺陷 #90870)

  • REGEXP_REPLACE()来自一个结果集行的结果可以结转到下一行,从而导致当前行中先前结果的累积。(缺陷 #27992118,缺陷 #90803)

  • 修复了 MySQL 客户端库中的堆溢出漏洞。(缺陷号 27980823)

  • 具有SUPER权限的用户不允许修改 keyring_operations系统变量。(缺陷号 27976270)

  • MySQL 5.7和MySQL 8.0.11创建的时间戳为0的全文检索辅助表导致MySQL 8.0.11升级到MySQL 8.0.12时数据字典升级失败。(缺陷号 27960500)

  • 从MySQL 5.7 升级时返回memcpy 中的源和目标重叠 Valgrind 错误。(缺陷 #27945658,缺陷 #90691)

  • setuid()执行调用 后,Linux 二进制文件无法转储核心 。(错误#27929894、错误#90642、错误#23337428、错误#21723)

  • RESET PERSIST 没有从内存中刷新变量值。(漏洞#27924206)

  • 对于调试版本,使用CREATE TABLE ... SELECT长数字字符串创建表并对列进行索引可能会导致引发断言。(漏洞#27909771)

  • 对于调试版本,RESET PERSIST 未知变量可能会引发断言。(漏洞 #27903874,漏洞 #90546)

    参考:这个问题是 Bug #27374791 的回归。

  • 更新引用分区表的视图的列元数据可能会导致服务器退出。(漏洞 #27903842)

  • UNION对于调试版本,可以在计算GEOMETRY列和 的组合数据类型时 为查询引发断言 SELECT * FROM (SELECT NULL)。(缺陷 #27903792,缺陷 #90550)

  • 对于调试版本,启动服务器 thread_stack=0并执行 ALTER TABLE可能会引发断言。(缺陷 #27899274,缺陷 #90525)

  • SHOW TABLE STATUS可能导致服务器退出。(漏洞#27897815)

  • 对于使用该 INTERVAL()函数的生成列,可能会出现不正确的行为。(漏洞#27881102)

  • 对于 Fedora 28,如果安装了连接器 ODBC 本机包,则不会安装 MySQL Community RPM 包。(漏洞 #27850721)

  • 可以删除性能模式。(漏洞#27830283)

  • mysql_sys_var_longlong()调用或 可能会发生运行时错误 String::copy()。(错误#27822413,错误#27808412)

  • 使用不适当的错误编号的错误记录代码引发了断言。(漏洞#27792903)

    参考:这个问题是 Bug #27462408 的回归。

  • 如果是 则 for 的子句 会产生语法错误。(缺陷 #27760787,缺陷 #90222)CONVERT TO CHARACTER SET charset_nameALTER TABLEcharset_nameDEFAULT

    参考资料:此问题是 Bug #27389878 的回归。

  • 如果服务器未配置为支持 SSL,则客户端连接尝试指定需要加密连接可能导致未加密连接。(漏洞 #27759871)

  • INSERT INTO ... SELECT没有执行INSERT INTO ... VALUES()与要求几何列的有效几何值方面一样多的检查。(漏洞#27756083)

  • REGEXP_INSTR()与无效匹配模式标志一起使用时不会返回错误消息。(漏洞#27751277)

  • 修改了一些数据字典表定义以更接近于它们的初始设计。此外,数据字典版本号增加,引用数据字典表索引的代码现在使用符号索引名称而不是数值。(漏洞 #27745526,漏洞 #90196)

  • 执行准备好的语句以插入具有大量参数的行非常慢。(漏洞#27699248)

  • ibd2sdi可能会由于执行除零操作而退出。(缺陷 #27692051,缺陷 #90071)

  • mysql-boost-8.0.4.tar.gz源分布省略 了NDB源。(漏洞#27690232)

  • SHOW GRANTS如果为从匿名用户那里继承特权的非特权用户执行,可能会导致服务器退出。(漏洞#27678129)

  • 解析器错误地允许索引名称为 CREATE INDEX空。(漏洞#27676427)

  • 由 systemd 或 mysqld_safe启动的服务器重启失败未写入错误日志。(漏洞 #27675050,漏洞 #90012)

  • 对于调试版本,如果事务处于只读模式,则尝试创建或删除直方图可能会引发断言。(漏洞#27672693)

  • 如果服务器以 启动 --skip-grant-tables, 则SET ROLE DEFAULT导致服务器退出。(漏洞#27672154)

  • 未正确执行VARBINARY值到 值 的转换。TIME(漏洞#27665997)

  • 创建const引用条件后未执行错误检查。(漏洞 #27665085)

  • MeCab模型发布后使用了MeCab模型管理的字典信息对象。(错误号 27660368)

  • 试图中止 MYSQL_AUDIT_AUTHENTICATION_CLASS类的事件导致服务器退出。这些事件现在不可中止。(漏洞#27645636)

  • 这些资源组语句现在在存储函数中是不允许的,因为它们会导致隐式提交,这在存储函数中 是不允许的:CREATE RESOURCE GROUP,,ALTER RESOURCE GROUPDROP RESOURCE GROUP(错误#27638623,错误#89914)

  • 审核日志过滤规则不允许将类名指定为字符串数组。现在这是可能的。例子:

    {
      "filter": {
        "class": [
          { "name": [ "connection", "general", "table_access" ] }
        ]
      }
    }

    (缺陷号 27628325)

  • 在 Windows 上,如果已删除 Visual C++ Redistributable for Visual Studio,则使用 MSI 安装程序卸载 MySQL 会失败。(漏洞#27621546)

  • mysql_secure_installation现在加载 validate_password组件而不是已弃用的validate_password插件。(漏洞 #27619667)

  • REGEXP_LIKE()当包含在准备好的语句中时,使用包含问号 ( ?) 的表达式未得到正确处理。(漏洞#27595368)

  • REGEXP_SUBSTR()并不总是NULL正确处理模式。(漏洞#27572258)

  • 一些SHOW CREATE TABLE陈述可以提出断言。(缺陷号 27569314)

  • events_stages_current在 Performance Schema表 中可以看到虚假的阶段 。(漏洞 #27566220)

  • PRECEDES表的触发器可以按照与它们的/FOLLOWS子句 指定的顺序不同的顺序执行 。(漏洞 #27544152)

  • 尝试在启动时设置某些持久变量(例如 keyring_operationsmandatory_roles)会产生特权冲突错误,并且服务器不会启动或不会设置该变量。(漏洞 #27523095)

  • 在某些情况下,MeCab 全文搜索代码中出现未使用变量警告。感谢 Laurynas Biveinis 提供补丁。(漏洞 #27519952,漏洞 #89598)

  • FEDERATED在存储过程中,如果涉及的表使用存储引擎 ,则不可能编写条件处理程序来捕获外键故障。(漏洞 #27509959)

  • 可以删除在外键关系中用作父键的主键。另外,对于建表,现在SQL层会检查外键是否有父键,如果没有则报错。(错误#27506922、错误#89570、错误#11754696、错误#46337)

  • 在 禁用 SQL 模式的情况下, 如果使用系统变量禁用了所需的引擎 ,则会NO_ENGINE_SUBSTITUTION发生错误(而不是替换) 。(漏洞 #27502530)CREATE TABLEALTER TABLEdisabled_storage_engines

  • keyring_encrypted_file 使用密钥环插件 进行密钥轮换可能会导致服务器退出。(漏洞#27497018)

  • 如果 MySQL Enterprise Firewall 配置了大​​量规则,服务器关闭可能需要很长时间。(漏洞#27492122)

  • SET PERSIST_ONLY var_name = DEFAULT 保留当前的全局值,而不是默认值。(漏洞 #27489026)

  • 如果 MySQL 配置为 启用 了CMake选项,则现在禁用编译器选项;该组合会导致分段错误。(漏洞#27484106)LINK_RANDOMIZE --gc-sections

  • 在服务器安装期间 mysql.infoschemamysql.session、 和 mysql.sys保留帐户与mysql_native_password身份验证插件相关联,即使默认插件是 caching_sha2_password. (漏洞#27454299)

  • 某些窗口函数对其聚合数据类型使用了错误的精度。(漏洞#27452179)

  • 对于十六进制值HSELECT提出了一个断言。(漏洞#27452082)WHERE (-1) - H

    参考资料:另请参阅:Bug #27041382。此问题是 Bug #21982792 的回归。

  • 单元测试中的内存泄漏pfs-t已修复。感谢 Yura Sorokin 提供的补丁。(漏洞 #27440735,漏洞 #89384)

  • CHAR() 一旦将无效代码点作为参数传递,在存储程序中的 多次调用可能会产生不同的结果。(漏洞#27410088)

  • automatic_sp_privileges 启用后,EXECUTE和 权限ALTER ROUTINE未正确授予例程创建者。(漏洞 #27407480)

  • 某些使用排序的查询可能会在优化期间访问未初始化的列并导致服务器退出。(漏洞#27389294)

  • 对于调试版本,针对具有包含空字符串的列ALTER TABLEARCHIVE表 提出了断言(而不是错误) 。GEOMETRY NOT NULL(漏洞 #27330634,漏洞 #89088)

  • 使用身份验证插件进行身份验证的帐户 auth_sock无法使用旧客户端进行连接。(漏洞#27306178)

  • 如果无法读取或初始化系统表,则服务器会写入一条不完整的错误消息。感谢 Daniël van Eeden 提供与修复相关的补丁。(漏洞 #27302337,漏洞 #89001)

  • RENAME USER用于重命名未授予任何帐户或角色的角色时失败。(漏洞#27284699)

  • keyring_okv主服务器不可用时,插件并不总是故障转移到备用 OKV 服务器。(漏洞#27244099)

  • 性能模式可能会尝试访问无效的 SOURCE列值。(漏洞 #27231036)

  • 内部权限结构处理不当可能导致服务器退出。(漏洞#27230925)

  • 对于调试版本,在 GIS 计算中使用太小的类型来计算行列式可能会引发断言。(漏洞 #27135504)

  • 对于使用该算法增加表VARCHAR列 长度的 尝试,如果该列已被索引,则尝试失败。 InnoDBALTER TABLEINPLACE

    如果索引大小超过InnoDB767 字节COMPACTREDUNDANT行格式 的限制CREATE TABLE, 则ALTER TABLE不会报告错误(在严格 SQL 模式下)或警告(在非严格模式下)。(缺陷号 26848813)

  • 在 MySQL 5.7.19 中,该mysql.gtid_executed 表已从转储中排除。该表不再被排除,但其数据未被转储。(漏洞 #26643180,漏洞 #87455)

    参考:此问题是 Bug #82848、Bug #24590891 的回归。

  • 系统变量控制在 slave_rows_search_algorithms 为基于行的日志记录和复制准备成批的行时如何搜索行以查找匹配项。INDEX_SCAN如果存在索引,则指定其中一种搜索算法会执行索引扫描。在 master 和 slave 上使用不同的主键,并且 slave 上存在唯一键的情况下,代码中的错误意味着没有按应有的方式执行索引扫描,并且表速度较慢正在执行扫描。该问题现已得到纠正,因此可以使用索引扫描。(错误#26450129、错误#23311892、错误#81500、错误#81501)

  • 子查询具体化的某些情况可能会导致服务器退出。这些查询现在会产生一个错误,提示物化被禁用。(漏洞 #26402045)

  • 对地理 GeometryCollection值的空间操作可以返回 ER_GIS_INVALID_DATA有效的几何图形。(缺陷号 26174808)

  • 对于表,特定的和 语句MyISAM序列 可能会导致表损坏。(漏洞 #25541037)INSERTDELETE

  • SHOW CREATE USER语句需要数据库的SELECT权限mysql,但不能查看当前用户的信息。此外,对于当前用户,该语句需要系统表的SELECT 权限才能在子句mysql.user中显示密码哈希;IDENTIFIED AS否则,哈希显示为 <secret>. (漏洞 #24911117)

  • CREATE FUNCTION如果没有默认数据库并且函数体调用了另一个函数,则会产生错误。(缺陷 #24357244,缺陷 #82350)

  • 对于调试版本,SELECT 如果派生表解析失败,则在存储程序中执行的语句可能会引发断言。(漏洞 #23221336)

  • 如果使用mysqldumpmysqlpump 转储二进制数据而没有 --hex-blob选项,重新加载转储文件可能会产生虚假警告(无论警告如何,值都被正确插入)。这些值现在由_binary 介绍者写入,以消除警告。(缺陷 #22601255,缺陷 #80150)

  • 涉及通配符的字符串比较可能会引用未初始化的内存。(漏洞 #12635103)

  • REGEXP_REPLACE()Valgrind使用无效的捕获组调用时发出警告。 (缺陷 #87842,缺陷 #27612255)