Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.2 的变化(2011-04-11,开发者里程碑)

MySQL 5.6.2 的变化(2011-04-11,开发者里程碑)

笔记

这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)

InnoDB 缓冲池信息的 INFORMATION_SCHEMA 表

InnoDB 指标的 INFORMATION_SCHEMA 表

InnoDB 数据字典的 INFORMATION_SCHEMA 表

  • InnoDB:InnoDB数据字典,包含有关表、列、索引和外键的元数据 ,InnoDB可用于通过一组INFORMATION_SCHEMA表进行 SQL 查询。

持久的 InnoDB 优化器统计

InnoDB 可配置数据字典缓存

  • InnoDB: 为了减轻具有大量表的系统上的内存负载, InnoDB现在使用 LRU 算法释放与打开的表关联的内存,以选择最长时间未被访问的表。要为打开的表保留更多内存来保存元数据InnoDB ,请增加 table_definition_cache 配置选项的值。InnoDB将此值视为数据字典缓存中打开表实例数的软限制” 。InnoDB具有缓存元数据的表的实际数量可能高于为 指定的值 table_definition_cache,因为元数据InnoDB系统表以及外键关系中的父表和子表永远不会从内存中逐出。有关其他信息,请参阅 table_definition_cache 文档。(缺陷 #20877,缺陷 #11745884)

优化器注释

  • 优化器现在可以更有效地处理以下形式的查询(和子查询):

    SELECT ...
        FROM single_table ...
        ORDER BY non_index_column [DESC]
        LIMIT [M,]N;

    这种类型的查询在仅显示较大结果集中的几行的 Web 应用程序中很常见。例如:

    SELECT col1, ... FROM t1 ... ORDER BY name LIMIT 10;
    SELECT col1, ... FROM t1 ... ORDER BY RAND() LIMIT 15;

    排序缓冲区的大小为 sort_buffer_size. 如果行的排序元素N足够小以适合排序缓冲区(如果指定了M+NM),服务器可以避免使用合并文件并完全在内存中执行排序。有关详细信息,请参阅LIMIT 查询优化

  • 优化器实现磁盘扫描多范围读取。当表很大且未存储在存储引擎的缓存中时,使用二级索引上的范围扫描读取行可能会导致对基表的许多随机磁盘访问。通过磁盘扫描多范围读取 (MRR) 优化,MySQL 尝试通过首先仅扫描索引并收集相关行的键来减少范围扫描的随机磁盘访问次数。然后对键进行排序,最后使用主键的顺序从基表中检索行。Disk-sweep MRR 的动机是减少随机磁盘访问的次数,而是实现对基表数据的更顺序扫描。有关详细信息,请参阅 多范围读取优化

  • 优化器实现索引条件下推 (ICP),这是针对 MySQL 使用索引从表中检索行的情况的优化。如果没有 ICP,存储引擎会遍历索引以定位基表中的行,并将它们返回给 MySQL 服务器,MySQL 服务器会评估这些WHERE 行的条件。在启用 ICP 的情况下,如果 WHERE仅使用索引中的字段可以评估部分条件,则 MySQL 服务器会推送这部分条件WHERE条件下降到存储引擎。然后,存储引擎使用索引条目评估推送的索引条件,只有在满足条件时才会读取基行。ICP 可以减少存储引擎必须对基表执行的访问次数以及 MySQL 服务器必须对存储引擎执行的访问次数。有关详细信息,请参阅 索引条件下推优化

显式分区选择

  • 分区: 现在可以在查询分区表时选择一个或多个分区或子分区。此外,许多作用于分区表的数据修改语句(DELETEINSERTREPLACEUPDATELOAD DATALOAD XML)现在也支持显式分区选择。例如,假设我们有一个名为 的表 t,其中包含一些名为 的整数列 c,并且t有 4 个分区,分别名为p0p1p2p3。然后查询 SELECT * FROM t PARTITION (p0, p1) WHERE c < 5只返回分区中符合条件的行p0p1WHERE分区 p2并且p3没有被检查。

    有关其他信息和示例,请参阅 分区选择以及刚刚列出的语句的说明。

性能模式注释

  • Performance Schema 添加了以下内容:

    • Performance Schema 现在有包含仪器生成的表和索引 I/O 等待事件摘要的表 wait/io/table/sql/handler

      这些表中的信息可用于评估应用程序执行的表 I/O 的影响。例如,可以查看使用了哪些表以及使用(或未使用)哪些索引,或者在多个应用程序访问表时识别表上的瓶颈。这些结果可能有助于改变应用程序对数据库发出查询的方式,最大限度地减少应用程序在服务器上的占用空间,并提高应用程序性能和可伸缩性。

      新表伴随的变化是该 表现在events_waits_current有一个 INDEX_NAME列来标识哪个索引用于生成事件的操作。事件历史表 events_waits_history和 也是如此events_waits_history_long

    • Performance Schema 现在有一个 wait/lock/table/sql/handlersetup_instruments表中命名的工具,用于检测表锁定等待事件。它与 wait/io/table/sql/handler仪器表 I/O 不同。这使得表 I/O 和表锁的独立检测成为可能。

      伴随着新工具,性能模式有一个名为的表 ,该表table_lock_waits_summary_by_table 聚合了新工具生成的表锁等待事件。分组是按表进行的。

      此表中的信息可用于评估应用程序执行的表锁定的影响。其结果可能有助于改变应用程序对数据库发出查询和使用表锁的方式,以最大限度地减少服务器上的应用程序占用空间并提高应用程序性能和可扩展性。例如,一个应用程序长时间锁定表可能会对其他应用程序产生负面影响;仪器使这一点可见。

    • 要有选择地控制哪些表用于 I/O 和锁定,请使用 setup_objects表。请参阅 按对象预过滤

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到 performance_schema数据库中。

    有关详细信息,请参阅MySQL 性能架构

可插拔认证

  • MySQL 发行版现在包括auth_socket一个服务器端身份验证插件,它对通过 Unix 套接字文件从本地主机连接的客户端进行身份验证。该插件使用SO_PEERCREDsocket 选项获取有关运行客户端程序的用户的信息(因此只能在支持此选项的系统上构建)。为了使连接成功,插件需要连接客户端用户的登录名与客户端程序提供的 MySQL 用户名匹配。有关详细信息,请参阅 套接字对等凭据可插入身份验证。(错误#59017、错误#11765993、错误#9411、错误#11745104)

  • MySQL 发行版现在包括 mysql_clear_password,一个客户端身份验证插件,无需散列或加密即可将密码发送到服务器。虽然这是不安全的,因此应采取适当的预防措施(例如使用 SSL 连接),但该插件与必须能够以明文形式访问原始密码的服务器端插件结合使用时很有用。有关详细信息,请参阅 客户端明文可插入身份验证

插件说明

  • 一种新的插件服务,my_plugin_log_service使插件能够报告错误并指定错误消息。服务器将消息写入错误日志。请参阅 MySQL 插件服务

崩溃安全二进制日志

  • Replication: MySQL Server 添加了写入和读取二进制日志时对校验和的支持。默认情况下,将校验和写入二进制日志是禁用的;可以通过使用该--binlog-checksum 选项启动服务器来启用它。要使服务器从二进制日志中读取校验和,请在 master_verify_checksum启用系统变量的情况下启动服务器。该 --slave-sql-verify-checksum 选项使从站从中继日志中读取校验和。

  • 复制: MySQL 服务器现在只记录和读回二进制日志中的完整事件或事务。默认情况下,服务器现在记录事件的长度以及事件本身,并使用此信息来验证事件是否已正确写入日志。master 在读取二进制日志时也默认使用这个值来验证事件。

    如果启用校验和写入(使用 binlog_checksum系统变量),主站可以通过启用系统变量来使用它们 master_verify_checksum。从 I/O 线程还验证从主线程接收到的事件。slave_sql_verify_checksum 您可以通过在从站上启用系统变量, 使从站 SQL 线程在从中继日志读取时也使用校验和(如果可用) 。

从日志表

  • 复制: 现在可以将关于从站连接到主站的信息以及关于从站在中继日志中的执行点的信息写入表而不是文件。将主连接信息和从中继日志信息记录到表中可以彼此独立地完成;这是由 master_info_repositoryrelay_log_info_repository 系统变量控制的。当 时 master_info_repository=TABLE,连接信息被记录在 系统数据库slave_master_info表中 mysqlrelay_log_info_repository=TABLE,中继日志信息被记录到 slave_relay_log_info表中,也在 mysql系统数据库中。

行图像控件

  • 复制: 添加了binlog_row_image 服务器系统变量,可用于为基于行的复制启用行图像控制。这意味着您可以通过仅记录唯一标识行所需的列或在每一行上实际更改的列来潜在地节省 MySQL 服务器的磁盘空间、网络资源和内存使用,而不是记录每个行的所有列和每一行更改事件。此外,您可以使用 noblob模式,其中记录所有列,除了不需要的BLOBTEXT列。

    有关详细信息,请参阅 与二进制日志记录一起使用的系统变量。(错误#47200、错误#47303、错误#56917、错误#11755426、错误#11755513、错误#11764116)

添加或更改的功能

  • 不兼容的更改: 以下过时的构造已被删除。在显示备选方案的地方,应更新应用程序以使用它们。

  • 重要变更;复制:为mysqld 添加了 binlog_rows_query_log_events 系统变量。启用此变量会导致以基于行的模式记录的服务器将信息行查询日志事件(SQL 语句,用于调试和其他目的)写入二进制日志。MySQL 服务器和 MySQL 5.6.2 及更高版本的 MySQL 程序通常会忽略此类事件,因此它们在读取二进制日志时不会造成问题。 mysqldmysqlbinlog 以前的 MySQL 版本无法读取二进制日志中的此类事件,并且如果他们尝试这样做会失败。出于这个原因,你永远不应该为 MySQL 5.6.1 或更早的复制从属服务器(或其他阅读器,如 mysqlbinlog)准备日志,并在主服务器上启用此选项。(缺陷 #50935,缺陷 #11758695)

  • 表现; InnoDB: 一个单独的InnoDB线程 (page_cleaner) 现在处理以前由 InnoDB主线程完成的脏页的刷新。(缺陷 #11762412,缺陷 #55004)

  • 表现; InnoDB: 系统innodb_purge_threads变量现在可以设置为大于 1 的值。

  • 表现; InnoDB:InnoDB控制对内核的并发访问的 内核InnoDB已拆分为多个 互斥锁读写锁,以提高并发性。

  • InnoDB: InnoDB可以选择记录所有发生的死锁的详细信息,以帮助进行故障排除和诊断。此功能由 innodb_print_all_deadlocks 系统变量控制。(错误 #1784,错误 #17572)

  • 复制:在具有多个网络接口的 MySQL 复制从属服务器上,现在可以使用 语句 中的选项 设置用于连接到主服务器的接口 MASTER_BIND='interface'CHANGE MASTER TO

    该选项设置的值可以在 Master_Bind输出 的列SHOW SLAVE STATUS或表的 Bind列中看到 mysql.slave_master_info。(错误#25939,错误#11746389)

  • Replication: 添加了log_bin_basename 系统变量,其中包含二进制日志文件的完整文件名和路径。( log_bin系统变量仅显示是否启用二进制日志记录; log_bin_basename然而,反映了使用 --log-bin服务器选项设置的名称。)还添加了relay_log_basename系统变量,它显示中继日志文件的文件名和完整路径。

    参考资料:另请参阅:Bug #19614、Bug #11745759。

  • mysql_upgrade 、 mysqlbinlogmysqlcheckmysqlimportmysqlshowmysqlslap客户端现在有 和 选项来指定要使用的身份验证插件和插件目录。(漏洞 #58139)--default-auth--plugin-dir

  • 服务器现在将线程 ID 包含在写入慢速查询日志的行中。在慢速查询日志文件中,线程 ID 是行中的最后一个值。在mysql.slow_log 日志表中,有一个新thread_id列。

    slow_log如果您是从较早版本升级, 要更新该表,请运行mysql_upgrade并重新启动服务器。请参阅 mysql_upgrade — 检查和升级 MySQL 表。(错误#53630,错误#11761166)

  • 服务器现在在关闭过程中将线程关闭消息写入错误日志。(错误#48388,错误#11756464)

  • 如果init_file给出系统变量,服务器现在将指示文件执行开始和结束的消息写入错误日志。(错误#48387,错误#11756463)

  • 布尔系统变量可以在运行时通过将它们设置为值ON或 来启用OFF,但以前这在服务器启动时不起作用。现在在启动时,可以通过将它们设置为或来启用这些变量,或者通过将它们设置为ONTRUE来禁用它们 。任何其他非数字值均无效。(漏洞 #46393)OFFFALSE

    参考资料:另请参阅:Bug #11754743、Bug #51631。

  • MySQL 发行版现在包含一个INFO_SRC 文件,其中包含有关源发行版的信息,例如创建它的 MySQL 版本。MySQL 二进制发行版还包含一个 INFO_BIN文件,该文件包含有关发行版构建方式的信息,例如编译器选项和功能标志。在 RPM 包中,这些文件位于/usr/share/doc/packages/MySQL-server 目录中。在tar.gz和派生包中,它们位于Docs分发包解压位置下的目录中。(错误#42969,错误#11751935)

  • 多读取范围访问现在基于成本估算,不再用于无益的简单查询。(错误#37576,错误#11748865)

  • 以前,对于由于排序问题而中止的查询,服务器会将消息Sort aborted写入错误日志。现在服务器写入更多信息以提供更具体的消息,例如:

    Sort aborted: Out of memory (Needed 24 bytes)
    Out of sort memory, consider increasing server sort buffer size
    Sort aborted: Out of sort memory, consider increasing server sort
      buffer size
    Sort aborted: Incorrect number of arguments for FUNCTION test.f1;
      expected 0, got 1

    此外,如果服务器是用 启动的 --log-warnings=2,服务器会写入有关主机、用户和查询的信息。(漏洞 #36022,漏洞 #11748358)

  • 以前,对于由于排序问题而中止或在排序过程中终止的查询,KILL服务器会将消息Sort aborted写入错误日志。现在服务器写入有关错误原因的更多信息。这些原因包括:

    • 临时文件目录中的磁盘空间不足导致无法创建临时文件

    • 内存不足 sort_buffer_size,无法分配

    • 有人在文件排序操作中跑了 KILL id

    • 服务器在某些查询排序时关闭

    • 由于锁定等待超时或死锁,事务被回滚或中止

    • 意外错误,例如源表甚至临时表已损坏

    • 子查询的处理失败,它也在排序

    (缺陷 #30771,缺陷 #11747102)

  • mysqldump --xml现在显示来自列定义的注释。(错误#13618,错误#11745324)

  • Windows 提供基于 UTF-16LE 的 API,用于读取和写入控制台。MySQL 现在支持 utf16leUTF-16LE 的字符集,并且 Windows 的 mysql客户端已被修改以通过使用这些 API 提供改进的 Unicode 支持。

    要利用此更改,您必须在使用兼容的 Unicode 字体的控制台中运行 mysql,并将默认字符集设置为支持与服务器通信的 Unicode 字符集。有关说明,请参阅 Windows 上的 Unicode 支持

  • 未记录的SHOW NEW MASTER语句已被删除,Com_show_new_master 状态变量也已删除。

修正错误

  • 安全修复:在视图准备期间 预评估LIKE谓词可能会导致服务器崩溃。(错误#54568,错误#11762026)

  • 不相容的变化;复制: 不再可能发出 CREATE TABLE ... SELECT更改除正在创建的表之外的任何表的语句。任何此类语句都不会执行,而是会因错误而失败。

    此更改的一个结果是FOR UPDATE可能根本不再与 a 的 SELECT部分一起使用 CREATE TABLE ... SELECT

    这意味着,在从以前的版本升级之前,您应该重写任何 CREATE TABLE ... SELECT导致其他表发生变化的语句,以便这些语句不再这样做。

    此更改还对 MySQL 5.6(或更高版本的从服务器)和运行以前版本的 MySQL 的主服务器之间的复制有影响。在这种情况下,如果 CREATE TABLE ... SELECT在主服务器上导致其他表更改的语句在主服务器上成功,则该语句在从服务器上仍然会失败,从而导致复制停止。为了防止这种情况发生,您应该在 master 上运行之前重写有问题的语句。(错误#11749792、错误#11745361、错误#39804、错误#55876)

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

  • Incompatible Change:auto_increment_increment大于 1 时,达到最大列值的批量插入生成的值可能会环绕而不是产生溢出错误。

    由于此修复,自动生成的值不再可能等于最大值BIGINT UNSIGNED。如果列可以接受,仍然可以手动存储该值。(缺陷 #39828,缺陷 #11749800)

  • 重要变更;分区: 用作分区函数的日期和时间函数现在检查其操作数的类型;在这种情况下,现在不允许使用错误类型的值。此外, where is a or column 现在完全不允许,因为它的返回值取决于 系统变量的值。(错误#54483,错误#11761948)EXTRACT(WEEK FROM col_name)col_nameDATEDATETIMEdefault_week_format

    参考资料:另请参阅:Bug #57071、Bug #11764255。

  • 重要变更;复制:CHANGE MASTER TO语句要求 for 的值RELAY_LOG_FILE是绝对路径,而MASTER_LOG_FILE 路径可以是相对的。

    不一致的行为通过允许相对路径来解决RELAY_LOG_FILE,在这种情况下,路径被假定为相对于从站的数据目录。(错误#12190,错误#11745232)

  • 表现; InnoDB:如果表 的UPDATE语句 InnoDB更改了前缀索引覆盖的列,但没有更改值的前缀部分,则表的语句可能会比必要的慢。该修复提高了 MySQL 5.5 及更高版本中 InnoDB 1.1 的性能,以及适用于 MySQL 5.1 的 InnoDB 插件。(缺陷 #58912,缺陷 #11765900)

  • 创新数据库;分区: 分区处理程序没有将锁定信息传递给表的存储引擎处理程序。InnoDB在使用分区表时,这会导致高争用,从而降低性能 (漏洞 #59013)

  • InnoDB: 此修复引入了一个新的配置选项, innodb_change_buffer_max_size它将 更改缓冲区的大小定义为缓冲池大小的百分比 。由于更改缓冲区与缓冲池共享内存空间,因此具有高速率 DML 操作的工作负载可能会导致查询访问的页面比预期更快地从缓冲池中老化。当更改缓冲区超过其最大大小时的 1/2 时,此修复程序还将更多 I/O 容量用于刷新更改缓冲区中的条目。(错误#11766168,错误#59214)

  • InnoDB:列字段中 双引号的存在 COMMENT可能会阻止正确创建外键约束。(错误#59197,错误#11766154)

  • InnoDB:information_schema.INNODB_TRX当其他连接正在运行涉及 BLOB类型 ,无法查询该 (错误#55397,错误#11762763)

  • InnoDB: 查询计划中“已检查行InnoDB的返回值 高于预期。值的处理方式不一致。不准确的统计数据可能会结合 触发 误报,因为查询实际上没有检查报告的那么多行。 NULLmax_join_size

    一个新的配置选项 innodb_stats_method允许您指定 NULL在计算索引统计信息时如何处理值。允许的值为 nulls_equal(默认值) nulls_unequalnull_ignored. 这些值的含义与 myisam_stats_method选项的含义相似。(缺陷号 30423)

  • 分区: 失败ALTER TABLE ... PARTITION的语句可能导致内存泄漏。(错误#56380,错误#11763641)

    参考资料:另请参阅:Bug #46949、Bug #11755209、Bug #56996、Bug #11764187。

  • 复制: 当使用基于语句的日志记录格式时, INSERT ON DUPLICATE KEY UPDATE如果 INSERT IGNORE 没有插入任何行,则影响未失败的事务表的语句不会写入二进制日志。(使用基于语句的日志记录,应该记录所有成功的语句,无论它们是否导致任何行被更改。)(错误 #59338,错误 #11766266)

  • Replication: 以前STOP SLAVE先停止slave I/O线程,然后停止slave SQL线程;因此,I/O 线程有可能在仅复制 SQL 线程正在执行的事务的一部分后停止,在这种情况下,如果事务无法安全回滚,则 SQL 线程可能会挂起。

    现在,STOP SLAVE先停止slave SQL线程,再停止I/O线程;这保证了 I/O 线程可以获取 SQL 线程正在执行的事务中的任何剩余事件,以便 SQL 线程可以在无法安全回滚时完成事务。(错误#58546,错误#11765563)

  • 复制: 仅当默认数据库在事件之间更改时, mysqlbinlog才将语句打印 USE为了说明这会如何导致问题,假设用户发出以下语句序列:

    CREATE DATABASE mydb;
    USE mydb;
    CREATE TABLE mytable (column_definitions);
    DROP DATABASE mydb;
    CREATE DATABASE mydb;
    USE mydb;
    CREATE TABLE mytable (column_definitions);

    当使用mysqlbinlog 回放时,第二条CREATE TABLE语句失败并显示错误:未选择数据库 ,因为第二USE条语句未回放,因为 mydb从未选择过除此以外的数据库。

    此修复可确保mysqlbinlogUSE每当从二进制日志中读取一条语句时都会输出一条 语句。(错误#50914,错误#11758677)

  • 复制:mysqlbinlog--help文本 现在表明 () 选项输出的伪 SQL 不一定是有效的 SQL,并且不能保证在 MySQL 客户端中逐字工作。(错误#47557,错误#11755743)--verbose-v

  • Microsoft Windows: 在 Windows 上,可以在创建对象之前使用线程本地存储中的对象。(缺陷 #55730,缺陷 #11763065)

  • 两个未使用的测试文件 storage/ndb/test/sql包含错误版本的 GNU 宽松通用公共许可证。文件和包含它们的目录已被删除。(漏洞 #11810224)

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

  • COALESCE()与 字符串一起 使用的查询cp1251可能会导致 非法混合排序规则错误。(缺陷 #60101,缺陷 #11766874)

  • XA COMMIT如果在 XA 事务已经遇到需要回滚事务的错误(例如死锁)时发出 断言,则会引发断言 。(错误#59986,错误#11766788)

  • comp_err 在某些系统上,由于未初始化的变量 ,调试构建可能会失败。(错误#59906,错误#11766729)

  • optimizer_switch 系统变量设置为无效值导致服务器崩溃。(错误#59894,错误#11766719)

  • CHAR如果服务器是使用 safemutex 支持编译的,则尝试在超过 31 字节 的列上创建空间索引 会导致断言失败。(错误#59888,错误#11766714)

  • 聚合后跟子查询可能会产生不正确的结果。(错误#59839,错误#11766675)

  • Performance Schema 没有更新状态处理程序状态变量,因此SHOW STATUS LIKE '%handler%'产生了少计的值。(错误#59799,错误#11766645)

  • 在内部,XOR 项目部分表现得像函数,部分表现得像条件。这导致了不一致的处理和崩溃。通过始终将 XOR 项视为函数来解决此问题。(错误#59793,错误#11766642)

  • 传递给的不正确字符集指针 my_strtoll10_mb2()导致引发断言。(错误#59648,错误#11766519)

  • DES_DECRYPT()如果参数不是由 . 产生的,则可能会崩溃 DES_ENCRYPT()。(缺陷 #59632,缺陷 #11766505)

  • 服务器和客户端并不总是正确协商身份验证插件名称。(错误#59453,错误#11766356)

  • --autocommit=ON不起作用(它将全局autocommit值设置为 0,而不是 1)。(错误#59432,错误#11766339)

  • FIND_IN_SET()在 MySQL 5.5 中与在 5.1 中的工作方式不同。(缺陷 #59405,缺陷 #11766317)

  • mysqldump没有 ALTER DATABASE在其输出的语句中引用数据库名称,这可能会导致在重新加载包含破折号的数据库名称时出错。(错误#59398,错误#11766310)

  • 如果filesort退回到普通的排序/合并,它可能无法正确处理内存。(缺陷 #59331,缺陷 #11766260)

  • 聚合值与 TIMESTAMP值的比较不正确。(缺陷 #59330,缺陷 #11766259)

  • 贪心查询计划优化器在计算查询成本时没有考虑中间查询结果的大小当有更快的执行计划可用时,这可能会导致查询执行缓慢。(错误#59326,错误#11766256)

  • 以下形式的查询返回了不正确的结果,其中col_name结果集中的值被完全替换为NULL 值:

    SELECT DISTINCT col_name ... ORDER BY col_name DESC;

    (缺陷 #59308,缺陷 #11766241)

  • 环境变量被MYSQL_HOME忽略。(错误#59280,错误#11766219)

  • SHOW PRIVILEGES没有显示PROXY特权行。(错误#59275,错误#11766216)

  • SHOW PROFILE可能会截断源文件名或无法显示函数名。(错误#59273,错误#11766214)

  • 对于DIV表达式,将结果分配给多个变量可能会导致服务器崩溃。(错误#59241,错误#11766191)

    参考资料:另请参阅:错误 #8457。

  • MIN(year_col) 在某些情况下可能会返回不正确的结果。(错误#59211,错误#11766165)

  • 启用索引条件下推后,由于未评估连接中第二个表的部分选择条件,连接可能会产生额外的行。(错误#59186,错误#11766144)

  • DELETE如果or UPDATE语句使用年、月或日部分为零的DATEor 值,它们可能会失败。DATETIME(漏洞 #59173)

  • 运算符的ESCAPE子句 LIKE只允许在执行时计算为常量的表达式,但不会拒绝聚合函数。(错误#59149,错误#11766110)

  • Valgrind 关于未初始化变量的警告已得到纠正。(错误#59145,错误#11766106)

  • Valgrind 检测到的内存泄漏,其中一些可能导致不正确的查询结果,已得到纠正。(缺陷 #59110,缺陷 #11766075)

  • mysqlslap无法检查 NULL返回 mysql_store_result()并在尝试处理结果集时崩溃。(错误#59109,错误#11766074)

  • 对文件属性有一个错误的限制 LOAD DATA。文件位于数据库目录中或全局可读的要求现在是位于数据库目录中或可由用于运行服务器的用户帐户读取。(缺陷 #59085,缺陷 #11766052)

  • SHOW CREATE TRIGGER如果存在与触发器主题表同名的临时表,则失败。(错误#58996,错误#11765972)

  • DEFAULT_CHARSETCMake 选项不起作用(错误#58991,错误#11765967)DEFAULT_COLLATION

  • 在子查询中,UNION没有引用表(或仅引用 DUAL虚拟表)的 a 不允许 ORDER BY子句。(错误#58970,错误#11765950)

  • OPTIMIZE TABLE如果操作失败, InnoDB表可能会引发断言,因为它已被杀死。(错误#58933,错误#11765920)

  • 如果max_allowed_packet设置大于 16MB,服务器将无法拒绝带有 Packet too large错误的过大数据包。(错误#58887,错误#11765878)

  • 在启用索引条件下推的情况下,当条件中 的列 包含 时,对于MyISAM 涉及HAVING和 的表的查询返回不正确的结果。(错误#58838,错误#11765835)LIMITWHERENULL

  • 索引条件下推访问方法的未初始化变量可能导致服务器崩溃或 Valgrind 警告。(错误#58837,错误#11765834)

  • NOT IN当子查询本身返回时,带有包含子句的子查询 的谓词HAVING可能会检索太多行NULL。(错误#58818,错误#11765815)

  • 对一个InnoDB 表运行两次查询,首先启用索引条件下推,然后禁用它,可能会产生不同的结果。(错误#58816,错误#11765813)

  • 如果存储例程的 DELETE IGNORE 语句失败但由于IGNORE 未报告任何错误,则会引发断言。(错误#58709,错误#11765717)

  • WHERE以下形式的条件评估不正确,可能会返回不正确的结果:

    WHERE null-valued-const-expression NOT IN (subquery)
    WHERE null-valued-const-expression IN (subquery) IS UNKNOWN

    (错误#58628,错误#11765642)

  • 发出EXPLAIN EXTENDED使用条件下推的查询可能会导致 mysqld崩溃。(错误#58553,错误#11765570)

  • 使用的OUTER JOIN查询可能会返回不正确的结果。(错误#58490,错误#11765513)WHERE col_name IS NULL

  • 使用文件名没有扩展名 的选项启动服务器会 导致服务器崩溃。(错误#58455,错误#11765482)--defaults-file=file_name

  • 与空表的外部联接可能会产生不正确的结果。(错误#58422,错误#11765451)

  • 在调试版本中,SUBSTRING_INDEX(FORMAT(...), FORMAT(...))可能会导致服务器崩溃。(错误#58371,错误#11765406)

  • 当使用和 选项运行 mysqladmin时,它会进入执行指定命令的无限循环。(缺陷 #58221,缺陷 #11765270)--sleep--count

  • 某些字符串操作 SQL 函数使用旨在包含不可变空字符串的共享字符串对象。当一个参数的数据类型错误时,SQL 函数使用此对象 SUBSTRING_INDEX()返回一个空字符串。如果字符串对象随后被 SQL 函数修改,则会 INSERT()发生未定义的行为。(错误#58165,错误#11765225)

  • 条件下推优化可能会下推具有不正确列引用的条件。(错误#58134,错误#11765196)

  • injector::transaction不支持回滚。(错误#58082,错误#11765150)

  • 解析嵌套的正则表达式可能会导致递归,从而导致堆栈溢出崩溃。(缺陷 #58026,缺陷 #11765099)

  • Bug #25192 的修复导致load_defaults() 添加了一个参数分隔符,以区分从选项文件加载的选项和命令行上提供的选项,无论应用程序是否需要它。(错误#57953,错误#11765041)

    参考资料:另请参阅:Bug #25192、Bug #11746296。

  • 如果标准输入是目录,mysql客户端将进入无限循环。(错误#57450,错误#11764598)

  • 如果多表更新通过两个别名更新一行,并且第一次更新物理移动了该行,则第二次更新无法定位该行。这导致了不同的错误,具体取决于存储引擎,尽管这些错误没有准确描述问题:

    • MyISAM:Got error 134 from storage engine

    • InnoDB:Can't find record in 'tbl'

    对于MyISAM非事务性的,首先执行的更新已执行,但第二个未执行。此外,对于两条相等的多表更新语句,一条成功一条失败取决于记录是否实际移动,这是不一致的。

    现在,如果这样的更新将通过多个别名更新表,并且执行可能物理移动至少这些别名之一中的行的更新,则这样的更新将返回错误。(错误#57373、错误#11764529、错误#55385、错误#11762751)

  • SHOW WARNINGS以下输出 EXPLAIN EXTENDED可能包含不可打印的字符。(错误#57341,错误#11764503)

  • 唯一键上的外部联接可能会返回不正确的结果。(错误#57034,错误#11764219)

  • 对于使用包含GROUP BY< ANY()构造中的子查询的查询,本应返回的行没有返回。(错误#56690,错误#11763918)

  • 某些 RPM 安装脚本对数据目录使用了硬编码值,这可能会导致具有非标准数据目录位置的用户安装失败。其他配置值(如 PID 文件名)也是如此。(错误#56581,错误#11763817)

  • 在 FreeBSD 和 OpenBSD 上,服务器错误地检查了系统日期的范围,导致合法值被拒绝。(错误#55755,错误#11763089)

  • mysql.func如果一个连接使用FLUSH TABLES WITH READ LOCK或 锁定了表,LOCK TABLE mysql.func WRITE而第二个连接尝试创建或删除可加载函数,则当第一个连接尝试使用可加载函数时会发生死锁。(错误#53322,错误#11760878)

  • DISTINCT字段上的聚合DECIMAL UNSIGNED可能会触发断言。(错误#52171,错误#11759827)

  • 在 FreeBSD 上,如果mysqldSIGHUP信号杀死,它可能会损坏 文件。(缺陷 #51023,缺陷 #11758773)InnoDB .ibd

  • AUTO_INCREMENT如果 -1 被写入多行的语句 插入到列中,则可以引发断言 。(错误#50619,错误#11758417)

  • 包含聚合函数但没有 GROUP BY子句的查询被隐式分组。如果这样的查询还包含一个ORDER BY 子句,优化器可以选择使用临时表来执行排序。这是不必要的,因为隐式分组查询最多返回一行并且不需要排序。(漏洞 #47853)

  • 解析器未能正确初始化一些内部对象,这可能导致在语句执行后的清理阶段服务器崩溃。(缺陷 #47511,缺陷 #11755703)

  • CASE ... WHEN参数具有不同的字符集时,可以将 8 位值引用为 utf16orutf32值,从而引发断言。(错误#44793,错误#11753363)

  • 使用ExtractValue()or UpdateXML()时,如果要读取的 XML 中包含不完整的 XML 注释,则 MySQL 在处理时读取到 XML 字符串的末尾之外,导致服务器崩溃。(缺陷 #44332,缺陷 #11752979)

  • 一个线程中使用的位图函数可能会更改其他线程使用的位图,从而引发断言。(缺陷 #43152,缺陷 #11752069)

  • DATE_ADD()如果第一个参数是字符串, DATE_SUB()则返回一个字符串,但错误地返回了一个二进制字符串。现在他们返回一个排序规则为 connection_collation. (错误#31384,错误#11747221)