暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 8.0.33修复了哪些BUG?

IT小Chen 2023-04-23
2198

下载地址

    2023418日,正式发布了MySQL 8.0.33版本下载地址,链接如下:
    https://dev.mysql.com/downloads/mysql/

    MySQL 8.0.33版本有哪些修改,修复了哪些BUG?请看下面内容:

      https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-33.html
      Changes in MySQL 8.0.33 (2023-04-18, General Availability)

      Audit Log Notes

        审核日志
        MySQL Enterprise Audit以前使用MySQL system系统数据库中的表来持久存储过滤器和用户帐户数据。
        为了增强灵活性,新的audit_log_database服务器系统变量现在允许在服务器启动时在全局模式命名空间中指定其他数据库。
        mysql系统数据库是表存储的默认设置。(WL #15500)

        Component Notes

          1.Microsoft Windows:添加了对Visual Studio 2017及更高版本的MSVC代码分析支持。
          这添加了一个新的MSVC_CPPCHECK(默认为OFF)CMake选项,该选项可以启用或禁用当前目录及其子目录上的此分析。(Bug #34828882)
          2.当MySQL使用GNU编译器或clang构建时,对于大于7.86的curl版本,将curl弃用警告降级为-Wno-error。(Bug #35111625)
          3.在macOS上,当链接curl接口以根据需要与共享系统库链接时,添加了-framework CoreFoundation和-framework SystemConfiguration。(Bug #35104962)
          4.用库接口替换了MY_INCLUDE_SYSTEM_DIRECTORIES宏。(Bug #35018072, Bug #35028089, Bug #35072295)
          5.改进的CMake代码支持替代链接器。(Bug #34898978)
          6.从生成系统中删除了不推荐使用的Docs/mysql.info文件。(Bug #34960126)
          7.在strings/和myys/目录中添加了一个顶级.crang.ticity文件和相关的.crang.tity文件。还启用了compdb支持,以在头文件上启用clang整洁使用。(Bug #34917075)
          8.删除了几个未维护或未使用的C++源文件,用于uca转储和uctypedump等功能。(Bug #34898978)
          9.添加了一个CMake构建选项,以便在命令行上编译时为GCC和Clang启用彩色编译器输出。若要启用,请将-DFORCE_COLORED_OUTPUT=1传递给CMake。(Bug #34897192)
          10.在Windows上,如果为第三方库找到相关的.dll文件,也可以为其安装.pdb文件。(Bug #34863555)
          11.Enterprise Linux 8和Enterprise Linux 9版本现在使用GCC 12而不是GCC 11。(Bug #34829151)
          12.使用-static libgcc-static libstdc++进行构建,现在还可以根据需要使用静态库构建绑定的protobuf。
          感谢Alex Xing的贡献。(Bug #110216,Bug #35123848)

          Deprecation and Removal Notes

            弃用和删除
            用户定义的排序规则(请参阅将排序规则添加到字符集)现在已被弃用。现在,以下任一情况都会导致将警告写入日志:
            1.SQL语句中出现的任何COLLATE,后跟用户定义排序规则的名称;
            2.使用用户定义排序规则的名称作为排序规则服务器、排序规则数据库或排序规则连接的值;
            您应该期望在MySQL的未来版本中删除对用户定义排序规则的支持。(WL#14277

            MySQL Enterprise Notes

              MySQL Enterprise Edition现在提供了基于组件的数据屏蔽和去标识功能,而不是基于MySQL 8.0.13中引入的插件库。
              组件实现提供了管理字典的专用权限,并扩展了特定类型的列表以包括:
              Canada Social Insurance Number
              United Kingdom National Insurance Number
              International Bank Account Number
              Universally Unique Identifier (UUID)
              一个改进的基于表的字典注册表取代了插件使用的基于文件的字典。
              有关组件和插件实现之间差异的摘要,请参阅数据屏蔽组件与数据屏蔽插件。
              在安装新的MySQL Enterprise Data Masking和De Identification组件之前,现有插件用户应卸载服务器端插件并删除其可加载功能。(Bug #33851601,WL#12641)

              Performance Schema Notes

                此版本中添加了Performance Schema服务器遥测跟踪服务。一个接口,它为插件和组件提供了一种检索与SQL语句生存期相关的通知的方法。
                有关此接口的更多信息,请参阅MySQL源代码文档中的服务器遥测跟踪服务部分。
                添加了以下内容:
                状态变量Telemetry_traces_supported。是否支持服务器遥测跟踪。(Boolean
                TELEMETRY_ACTIVE列已添加到线程表中。指示线程是否连接了活动遥测会话。
                (WL15059)

                Functionality Added or Changed

                  添加及修改的功能
                  1.重要更改:对于捆绑了OpenSSL库的平台,MySQL Server的链接OpenSSL库已更新到1.1.1t版本。OpenSSL 1.1.1t版本中修复的问题在https://www.openssl.org/news/cl111.txt.(Bug #35092429)
                  2.InnoDB:InnoDB现在支持并行索引构建,这提高了索引构建性能。
                  特别是,将排序后的索引项加载到B树中现在是多线程的。以前,此操作是由单个线程执行的。(WL #14772)
                  3.复制:作为正在进行的更改MySQL产品中使用的旧术语的工作的一部分,在与MySQL复制相关的错误消息中,术语“master”、“slave”和“MTS”已分别被“source”、“replica”和“MTA”替换。这包括messages_to_clients.txt和messages_to_error_log.txt中列出的与复制有关的所有错误消息;本任务不对在其他上下文中使用的消息执行这种替换。
                  有关更多信息,请参阅MySQL 8.0错误消息参考。(Bug #108422、Bug #34594819、WL #14191)
                  4.复制:mysqlbinlog--start position现在接受最多18446744073709551615的值,除非同时使用--read from remote server或--read from remote source选项,在这种情况下,最大值为4294967295。(Bug #77818,Bug #21498994)
                  5.包含curl而不是链接到系统curl库的二进制包已升级为使用curl 7.88.1。(Bug #34828111)
                  6.不允许使用带有DEFAULT(col_name)的生成列来指定命名列的默认值,现在会发出错误消息。(Bug #34463652,Bug #34369580)

                  Bugs Fixed

                    已修复的BUG
                    1.NDB集群:在重复执行并发架构操作时,从NDB字典打开表时可能会出现偶尔的临时错误,但不会稳定重现。(Bug #34843889)
                    2.NDB集群:在迭代过程中,有序索引扫描在每个同时扫描的有序索引片段中保留一个光标位置。
                    由于提交DML事务,有序的索引片段会被修改和平衡,这可能需要在树中移动扫描游标。
                    在配置了查询线程(AutomaticThreadConfig设置为1)的情况下运行时,多个线程可以访问相同的索引片段树结构,并且多个线程的扫描可以使其游标出现在相同的结构中。
                    当前的问题是由于在提交DML操作时移动扫描游标的逻辑中假设所有扫描游标都属于拥有索引片段的LDM线程,这不允许这些片段可能属于查询线程。(Bug #33379702)
                    参考文献:另请参阅:Bug#32257063。
                    3.InnoDB:删除死代码。(Bug #35036850,Bug #109873)
                    4.InnoDB:与InnoDB_doublewrite相关的错误消息已移动到错误日志中。(Bug #34883045,Bug #109330)
                    5.InnoDB:防止在线DDL操作访问越界内存。(Bug #34750489,Bug #108925)
                    6.InnoDB:ALTER TABLE ... AUTO_INCREMENT可以被设置为小于MAX+1并且不被强制设置为MAX+1。(Bug #33419246,Bug #105092)
                    7.InnoDB:由于变量溢出,InnoDB_data_pending_fsyncs可能会显示非常高的不准确值。(Bug #30133150)
                    8.分区:分区表上的某些IN()查询并不总是正确处理。(Bug #34801284)
                    参考文献:这个问题是对Bug#3311183的回归。
                    9.分区:并非在所有情况下都能正确处理使用INDEX_MERGE优化器提示的查询。(Bug #34797257)
                    10.复制:无法恢复其XID包含空字节的XA事务。(Bug #34918985)
                    11.复制:当binlog_order_commits设置为1时,对于任何两个事务和提交阶段的任何子步骤,首先写入二进制日志的事务并不总是像预期的那样首先执行子步骤。(Bug #34703698)
                    12.复制:二进制日志恢复过程没有报告所有可能的错误状态。(Bug #33658850)
                    13.复制:在CHANGE REPLICATION SOURCE TO SOURCE_CONNECTION_AUTO_FAILOVER=1之后,故障转移在日志中生成了许多误导性警告,暗示存在问题,而事实上情况正是此类故障转移的预期情况。这些日志消息已相应更新。(Bug #32135376)
                    14.复制:当事务失败时,作为副作用,与复制数据存储库相关的无关错误消息会写入日志。现在,在这种情况下,我们会抑制这样的错误消息,这些错误消息与失败事务的问题或其原因没有直接关系。(Bug #19820134)
                    15.复制:将binlog_order_commits设置为OFF可能会导致下一个二进制日志文件的Previous_gtids事件中缺少GTID。
                    我们感谢Yewei Xu和腾讯团队的贡献。(Bug #109485,Bug #34930969)
                    16.复制:更正了ER_RPL_REPLICA_error_RUNNING_QUERY的错误消息文本中建议的SQL语句。
                    我们感谢Dan McCombs的贡献。(Bug #109154,Bug #34822612)
                    17.复制:哈希扫描构建更改的哈希,扫描目标表或索引,并对当前条目应用任何匹配的更改。在构建阶段,它只使用前一个映像,而跳过任何后一个映像。在某些情况下会出现问题,因为生成的列是为(跳过的)后映像计算的,从而导致复制错误。
                    这是通过不再为仅查找调用(如散列扫描)计算生成的列来解决的。
                    我们感谢dc huang的贡献。(Bug #107366,Bug #34198907)
                    18.复制:在某些罕见的情况下,用户在第二个会话中发出WAIT_for_EXECUTED_GTI_set()后,可以将一个会话的gtid_mode设置为OFF,而另一个会话仍在等待第一个会话的下一个gtid设置。
                    这可能导致第二个会话无限期地等待函数返回。(Bug #99921,Bug #31505993)
                    19.组复制:并行访问性能架构Replication_Group_communication_information和Replication_ggroup_member_stats表有时会导致后续的组复制操作挂起。(Bug #34870181)
                    20.组复制:在某些情况下,组复制辅助节点在清除中继日志时意外关闭。(Bug #34397106)
                    21.组复制:关闭组复制插件时,错误日志中报告相关事件的顺序有时会导致混乱。为了消除任何疑问,我们现在确保插件group_replication已报告:“插件”group_replification已停止。实际上是与关闭相关的最后一条日志消息,只有在记录了与关闭插件相关的所有其他事件时才会写入。(Bug #109345,Bug #34887491)
                    22.Microsoft Windows:如果在Windows客户端主机上找不到fido设备,authentication_fido_client插件在身份验证过程中停止响应。(Bug #34918044)
                    23.在某些情况下,CONVERT(utf8mb3_column USING UTF16)被拒绝,并返回错误error Cannot convert string '\x--...' from binary to utf16。(Bug #35129361)
                    24.当连接一个字符串列上的两个表时,其中一个表中的列有一个额外的谓词将其与时态文字进行比较,在某些情况下,持续传播会错误地导致连接条件被修改,从而在比较字符串时使用时态语义而不是字符串语义。
                    这导致从联接返回不正确的结果。(Bug #35115909)
                    25.在准备好的语句中调用mysql_reset_connection() C API函数后返回的错误消息没有正确标识函数名。(Bug #35107280)
                    26.修复了先前修复中针对窗口函数问题的回归。
                    我们感谢Dmitry Lenev的贡献。(Bug #35061924)
                    参考文献:这个问题是对以下问题的回归:Bug#34572136。
                    27.在转换中替换子查询时,显示给定查询块是否包含任何子查询的内部标志(PROP_SUBQUERY)之后不会更新。(Bug #35060365)
                    28.当客户端使用身份验证插件时,客户端将字符集设置为不允许的客户端字符集(ucs2、utf16、utf16le或utf32)可能会导致意外行为。(Bug #35054579)
                    29.当平均行数小于1时,EXPLAIN ANALYZE显示0
                    为了解决这个问题,我们现在对EXPLAIN ANALYZEEXPLAIN format=TREE输出中的数字进行格式化,使0.001-99999.5范围内的数字打印为十进制数字,而此范围外的数字则使用工程符号打印(例如:1.23e+9934e-6)。
                    此外,后面的零不再打印,小于1e-12的数字打印为0
                    这有助于确保在不考虑数字值的情况下保持一致的精度,并提高可读性,同时将舍入误差降至最低。(Bug #34990948)
                    30.NTILE()函数并不是在所有情况下都能正常工作。(Bug #34986665)
                    31.视图上的某些联接执行不正确。(Bug #34985359)
                    32.当子查询包含重复谓词时,将相关标量子查询转换为派生表会导致InnoDB表的错误结果。此处显示了可能受此问题影响的查询示例:
                    SELECT * FROM t1
                    WHERE (
                    SELECT t2.a FROM t2
                    WHERE t2.a = t1.a AND t2.a = t1.a
                    ) > 0;
                    (Bug #34973220)
                    33.修复了sql/item_strfunc.cc中可能导致SPACE()函数出现问题的断言。(Bug #34962821)
                    34.使用ROW_COUNT()作为LPAD()或RPAD()的长度参数没有按预期执行。(Bug #34961236)
                    35.带有窗口函数的查询,如果其ORDER BY子句中有CASE函数的表达式,则可能导致服务器退出。(Bug #34933045)
                    36.先前问题的修复程序在优化HAVING子句时,在调试生成中引入了一个断言。(Bug #34923792)
                    参考文献:这个问题是一个回归:Bug#33725415。
                    37.当使用mysqld_multi时,将"--password"的用法模糊为"--password=*****"的系统也会将"--password history"和"--password require current"的定义匹配为"--password",但现在明确检查"--passpassword="。(Bug #34918740)
                    38.在某些情况下,调用mysql_bind_param()C API函数可能会导致服务器变得没有响应。(Bug #34869076)
                    39.如果authentication_oci_client插件的任何条目包含由空格分隔的等号字符(例如,key_file=/home/user/.oci/oci_api_key.pem),则该插件无法打开有效的配置文件。
                    现在,支持"key=value"和"key=value"条目格式。(Bug #34864078)
                    40.INTERSECT或EXCEPT操作的结果与另一个表联接时,返回了不正确的结果。
                    在这种情况下,当与DISTINCT或ALL一起使用时,此问题会影响这些操作。(Bug #34843764)
                    41.准备视图查询时,操作使用了系统字符集(而不是存储在数据字典中的字符集),然后报告了无效字符串错误。(Bug #34800905)
                    42.由于错误后重新打开表的代码出现问题,对派生表(包括视图)进行操作的已准备语句可能会意外停止。(Bug #34798403)
                    43.删除了调试构建中RANDOM_BYTES()函数在某些情况下引发的断言。(Bug #34781507)
                    44.启动时如何设置持久化变量存在问题,导致某些变量无法正确设置为其持久化值。(Bug #34751419)
                    45.MAKETIME()函数并不是在所有情况下都能正确执行。(Bug #34745241)
                    46.一些具有多个参数的函数没有产生预期的结果。(Bug #34741801)
                    47.ORDER BY中的表引用在使用该表的带括号查询块之外,并且该查询块本身没有LIMIT或ORDER BY,从而引发错误。(Bug #34704011)
                    参考文献:本期是对以下问题的回归:Bug#103954,Bug#32980249。
                    48.带有不可能条件作为ON子句一部分的左联接没有像MySQL 5.7中那样优化,因此在MySQL 8.0中,没有不可能条件的查询执行得比有不可能条件更快。
                    包括不可能条件在内的此类查询的一个例子是SELECT * FROM t1 join t2 ON t1.c1=t2.c1 AND 1=2。(Bug #34668756)
                    49.当用户定义的函数是合并到外部查询块中的派生表的一部分,或者是转换为半联接的子查询的一部分时,在处理过程中丢失了关于该UDF是否具有确定性的知识。(Bug #34666531)
                    50.在启用JSON日志记录并在审核日志筛选器定义中指定事件子类的情况下,一个空项("":{})被附加到记录的事件的末尾。(Bug #3465-9904)
                    51.某些子查询未正确执行。(Bug #34616553)
                    52.SELECT查询中的asymmetric_encrypt()组件函数遇到要解密的NULL字段后,它可能会为其他非NULL加密字段返回NULL值。(Bug #34598912)
                    53.在卸载审核日志插件后,服务器并不总是干净地关闭。(Bug #34594035)
                    54.服务器未正确处理某些反联接。(Bug #34370673)
                    参考文献:这个问题是一个回归:Bug #30573446。
                    55.当MySQL 5.7 Optimizer有两个索引选项来过滤行时,一个主索引和一个辅助索引,它会在辅助索引上选择范围扫描,因为范围扫描使用了更多的关键部分。
                    MySQL 8.0没有使用此逻辑,而是选择主索引来使用WHERE子句筛选行。
                    由于LIMIT的存在以及数据分布的性质,在这种情况下不适合使用主键。
                    由于常量消除,在通过解析顺序时未考虑辅助索引。
                    这导致MySQL 5.7和MySQL 8.0中针对同一查询的查询计划大不相同。
                    我们在MySQL 8.0中解决了这个问题,只在查询是常量优化的情况下,通过评估在排序过程中跳过索引的常量关键部分,这可以在此时完成,但不能在LIMIT分析过程中完成。(Bug #34291261)
                    56.MySQL数据字典缓存se_private_id值(找不到的id)的查找失败,这加快了InnoDB特定代码的执行,这取决于InnoDB不重用这些id
                    这一假设不一定适用于其他存储引擎,尤其是NDB,因为以前通过不使用此缓存解决了这个问题。
                    我们扩展了之前为NDB所做的修复,因此现在只有当表使用InnoDB存储引擎时才使用缓存查找。(Bug #34145006)
                    参考文献:另请参阅:Bug#33824058。
                    57.在一些使用DENSE_RANK()的查询中看到了意外的结果,可能添加了with ROLLUP。(Bug #34099408)
                    58.修复了sql/sql_tmp_table.cc中的一个断言,该断言是在之前为重新实现ROLLUP处理所做的工作之后引发的。(Bug #33830659)
                    参考文献:这个问题是对Bug#30969045的回归。
                    59.一些没有使用任何表的CTE并不总是得到正确处理。(Bug #33725542)
                    参考文献:这个问题是对Bug#27062031的回归。
                    60.访问仅存在于查询的ORDER BY列表中的窗口函数调用的窗口框架中的行会引发错误。(Bug #33069747)
                    61.ORDER BY列一起使用的PERCENT_RANK()未返回正确的结果。(Bug #33064174)
                    参考文献:这个问题是对Bug#227484133的回归。
                    62.--exclude tables和--include tables的mysqlpump选项不处理视图。(Bug #21303549)
                    63.将MySQL systemd服务单元配置从After=network-online.target更改为Wants=network-oline.target,以确保所有配置的网络设备都可用,并在服务启动前分配IP地址。(Bug #109996,Bug #35068274)
                    64.AVG(...) OVER (ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) 没有返回正确的结果。(Bug #109725,Bug #35013880)
                    参考文献:本期是对以下问题的回归:Bug#10808,Bug#344331996。
                    65.当启用子query_to_derived优化器开关时,形式为SELECT 1 FROM t1 WHERE NOT EXISTS(VALUES ROW(1),ROW(2))的查询在调试构建中导致断言。(Bug #109723,Bug #35014318)
                    参考文献:另请参阅:Bug#108910,Bug#334746261。
                    66.当与--delete选项一起使用时,mysqlimport没有转义保留字表名称。(Bug #109711,Bug #34999015)
                    67.当克隆条件以向下推送到派生表时,表示条件的字符串中的字符仅在值小于128(ASCII子集)的情况下正确转换为utfmb4,并且ASCII子集之外的代码点被转换为无效字符,导致生成的字符串变为无效。
                    对于没有UNION的派生表,当派生表中的列名使用ASCII子集之外的字符,并在WHERE条件中使用时,这会导致问题。
                    对于带有UNION的派生表,当WHERE条件中存在ASCII子集之外的字符时,会产生问题。
                    我们通过将在这种情况下用于表示条件的字符串初始化为连接字符集来解决这些问题。(Bug #109699,Bug #34996488)
                    68.在mysqldump版本8.0.32中使用--single transaction需要RELOAD或FLUSH_TABLE权限。
                    此要求现在仅适用于gtid_mode=ON(默认为OFF)和--set gtid purged=ON | AUTO(默认为AUTO)时。
                    (Bug #109685、Bug #109701、Bug #34993824、Bug #34998910、Bug #35020512)
                    参考文献:这个问题是一个回归:Bug#105761,Bug#333630199。
                    69.许多使用eq_ref访问的联接的性能不如以前的版本。此问题首次在MySQL 8.0.29中报告。(Bug #109631,Bug #34891365)
                    70.修复了sha256_scramble_generator.cc和sha2_password_common.cc中加扰生成器算法的内部文档中存在的一些问题。
                    我们感谢Niklas Keller的贡献。(Bug #109576,Bug #34967141)
                    71.CREATE USER IF NOT EXISTS添加了一个密码历史记录条目,即使用户已经存在并且密码没有更新。
                    这导致随后的ALTER USER语句被拒绝。(Bug #109415,Bug #34906592)
                    72.哈希外部联接有时会错误地将NULL与十进制零或使用非填充排序规则的空字符串匹配,从而导致错误的结果。(Bug #109211,Bug #34837464)
                    参考文献:这个问题是对Bug#33794977的回归。
                    73.ALTER INSTANCE RELOAD TLS内部使用的对象直到读卡器数量达到0才被释放,假设读卡器的数量应该相当频繁地达到0
                    SSL握手期间保持的读锁通常是一项昂贵的操作,包括网络调用,因此当客户端和服务器之间的往返耗时过长时,该锁会保持相对较长的时间。
                    这意味着,当更改此对象的值并且有足够数量的传入SSL连接时,读取器的数量可能无法在合理的时间长度内达到0,从而使线程使用100%的CPU来保持锁,直到锁被释放。
                    我们通过在将指向该对象的指针设置为新值之后,但在释放旧对象之前添加等待来解决此问题。
                    我们感谢Sinisa Milivojevic的贡献。(Bug #107567,Bug #34284186)
                    74.如果mysqldump或mysqlpump无法将字段的默认值转换为UTF-8(例如,如果字段的类型为BINARY,并且默认值与有效的UTF-8不一致),则操作会产生无法导入的结果。
                    此外,使用--hex-blob选项并不能解决此问题。
                    现在我们将默认值转换为系统字符集。
                    如果失败,服务器将以十六进制形式发送该值,以使其更具可读性。(Bug #104840,Bug #33322551)
                    75.使用C API (libmysqlclient)客户端库的连接可能会因FUTURE加密策略而失败。(Bug #104778,Bug #33316709)
                    76.在为使用共享物化的公共表表达式克隆临时表时,克隆的临时表未标记为使用哈希重复数据消除,导致错误的结果。
                    现在,我们为克隆的临时表正确设置哈希字段,并更新隐藏字段计数以将其考虑在内。(Bug #102251,Bug #32383712)
                    参考文献:另请参阅:Bug#103052,Bug#332659629。
                    77.CREATE EVENTALTER EVENT假设传递给它们的所有值(DO子句中的值除外)都解析为标量,而不实际检查值。
                    这导致了当任何这样的值实际行时的断言。
                    现在,我们在解析此类项时对列数执行显式检查,并在生成行而不是标量值时报告错误。(Bug #57552,Bug #11764690)
                    78.当引用是外部联接的内部表的一部分时,其基础字段为常量的视图引用不会标记为常量。
                    研究发现,当将一个条件下推到派生表时,引用被剥离,只有基础字段被克隆,这使它成为一个常数,并导致错误的结果。
                    为了解决这个问题,我们通过添加一个检查来确保不会将这样的条件下推到派生表,首先查看该条件使用的表是否与派生表匹配,或者是一个常量表达式;只有当它是其中之一时,我们才能真正降低条件。(Bug #34661,Bug #11747971)

                    ###chenjuchao 20230422###

                    文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论