Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.1 的变化(2013-04-23,里程碑 11)

MySQL 5.7.1 的变化(2013-04-23,里程碑 11)

笔记

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

审核日志说明

  • 为了更好地与 Oracle Audit Vault 兼容,对审计日志插件进行了一些更改。

    审核日志文件的格式已更改:

    • <AUDIT_RECORD> 使用属性以旧格式编写的元素中的 信息使用子元素以新格式编写。

    • 新格式在 <AUDIT_RECORD>元素中包含更多信息。每个元素都包含一个RECORD_ID提供唯一标识符的值。该 TIMESTAMP值包括时区信息。查询记录包括HOSTIPOS_LOGIN、 和 USER信息,以及 COMMAND_CLASSSTATUS_CODE值。

      STATUS_CODE值与现有STATUS值不同: STATUS_CODE0 表示成功,1 表示错误,这与 Audit Vault 的 EZ_collector 消费者兼容。STATUSmysql_errno()C API 函数的值。这是 0 表示成功,非零表示错误,因此不一定是 1 表示错误。

    <AUDIT_RECORD>旧格式 示例:

    <AUDIT_RECORD
     TIMESTAMP="2013-04-15T15:27:27" NAME="Query" CONNECTION_ID="3" STATUS="0" SQLTEXT="SELECT 1"/>

    <AUDIT_RECORD>新格式 示例:

    <AUDIT_RECORD>
     <TIMESTAMP>2013-04-15T15:27:27 UTC</TIMESTAMP>
     <RECORD_ID>3998_2013-04-15T15:27:27</RECORD_ID>
     <NAME>Query</NAME>
     <CONNECTION_ID>3</CONNECTION_ID>
     <STATUS>0</STATUS>
     <STATUS_CODE>0</STATUS_CODE>
     <USER>root[root] @ localhost [127.0.0.1]</USER>
     <OS_LOGIN></OS_LOGIN>
     <HOST>localhost</HOST>
     <IP>127.0.0.1</IP>
     <COMMAND_CLASS>select</COMMAND_CLASS>
     <SQLTEXT>SELECT 1</SQLTEXT>
    </AUDIT_RECORD>

    当审计日志插件轮换审计日志文件时,它使用不同的文件名格式。对于名为 的日志文件 audit.log,插件先前将该文件重命名为 . 该插件现在将文件重命名为 以指示它是一个 XML 文件。 audit.log.TIMESTAMPaudit.log.TIMESTAMP.xml

    有关审计日志插件的信息,请参阅 MySQL Enterprise Audit

    如果您以前使用过旧版本的审计日志插件,请使用此过程来避免将新格式的日志条目写入包含旧格式条目的现有日志文件:

    1. 停止服务器。

    2. 手动重命名当前审计日志文件。该文件将仅包含旧格式的日志条目。

    3. 更新服务器并重新启动它。审计日志插件将创建一个新的日志文件,其中只包含新格式的日志条目。

    用于编写审计插件的 API 也发生了变化。该 mysql_event_general结构有新成员来表示客户端主机名和 IP 地址、命令类和外部用户。有关详细信息,请参阅 编写审计插件

连接管理说明

  • 对服务器用于处理密码过期帐户的客户端连接的沙盒模式进行了以下更改:

    • 有一个新的 disconnect_on_expired_password 系统变量(默认值:启用)。这控制服务器如何处理过期密码帐户。

    • C API 客户端库中添加了两个标志: MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS formysql_options()CLIENT_CAN_HANDLE_EXPIRED_PASSWORDSfor mysql_real_connect()。每个标志使客户端程序能够指示它是否可以处理密码过期帐户的沙盒模式。

      MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS无条件地为mysqltest启用,对于交互模式下 的mysql ,如果第一个命令是 mysqladminpassword

    有关客户端标志如何与 交互的更多信息 disconnect_on_expired_password,请参阅服务器处理过期密码。(缺陷 #67568,缺陷 #15874023)

弃用和移除说明

  • 已弃用的innodb_mirrored_log_groups 系统变量已被删除。

添加或更改的功能

  • 不兼容的更改: SHOW ENGINE PERFORMANCE_SCHEMA STATUS输出混合使用了 row_countcount 属性。这些都是现在count。同样,输出使用了row_sizesize属性的混合。这些都是现在 size。(漏洞 #16165468)

  • 性能: 减少了字符串散列开销。这也提高了元数据锁定、表定义缓存以及性能模式表 I/O 和文件 I/O 检测的性能。(漏洞 #13944392)

  • InnoDB: 非压缩的、用户创建的InnoDB临时表和磁盘内部InnoDB临时表现在在共享临时表空间中创建。配置选项定义临时表空间数据文件的 innodb_temp_data_file_path 相对路径、名称、大小和属性。如果没有为 指定值 innodb_temp_data_file_path,则默认行为是创建一个 ibtmp1在数据目录中命名的自动扩展数据文件,该文件略大于 12MB。每次启动服务器时都会删除并重新创建共享临时表空间。

    在以前的版本中,临时表是在临时文件目录中的每个文件表空间中创建的,或者如果被禁用InnoDB,则在数据目录中的系统表空间中 创建。innodb_file_per_table压缩的临时表仍然在临时文件目录中的 file-per-table 表空间中创建。

    共享临时表空间消除了与为每个临时表创建和删除 file-per-table 表空间相关的性能成本。专用临时表空间还意味着不再需要将临时表元数据保存到InnoDB系统表中。

  • InnoDB: 在此版本之前,InnoDB将空间数据类型存储为二进制BLOB数据,映射到内部DATA_BLOB数据类型。 BLOB仍然是基础数据类型,但空间数据类型现在映射到新的内部数据类型, DATA_GEOMETRY. 作为 BLOB基础数据类型,前缀索引仍可用于所有 GEOMETRY数据类型列。

  • InnoDB:InnoDB通过避免仅对常规表必要的操作来优化 用户和系统创建的临时表的 DDL 性能 InnoDB。这些操作包括重做日志记录(恢复需要)、将表定义元数据写入InnoDB系统表以及插入缓冲。受益于优化的 DDL 操作包括CREATE TABLEDROP TABLETRUNCATE TABLEALTER TABLE,包括ALTER TABLE ... IMPORT TABLESPACEALTER TABLE ... DISCARD TABLESPACE

    作为优化的结果,InnoDB 临时表元数据不再出现在 INFORMATION_SCHEMA以前包含该数据的视图中。取而代之的是,一个新 INFORMATION_SCHEMAINNODB_TEMP_TABLE_INFO提供了一个 InnoDB实例中活动的用户创建的临时表的快照。此外, InnoDB一次可以存在的临时表的数量现在受运行 MySQL 服务器进程的系统上可用内存量(用于临时表定义)的限制,因为临时表定义不能再放在 LRU 上列出并换出。

  • InnoDB:通过优化,, , 和 statementsInnoDB提高了临时表的 DDL 性能优化是通过将 DDL 语句执行的操作限制为仅对临时表必要的操作来实现的。 CREATE TABLEDROP TABLETRUNCATE TABLEALTER TABLE

  • InnoDB: VARCHAR现在可以使用 in-place 增加列大小ALTER TABLE,如本例所示:

    ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);

    只要 VARCHAR列所需的长度字节数保持不变,情况就是如此。对于VARCHAR大小为 0 到 255 字节的列,需要一个长度字节来对值进行编码。对于VARCHAR大小为 256 字节或更多的列,需要两个长度字节。因此,就地ALTER TABLE仅支持将VARCHAR 列大小从 0 字节增加到 255 字节,或从 256 字节增加到更大的大小。就地ALTER TABLE不支持将 VARCHAR列的大小从小于 256 字节增加到等于或大于 256 字节。在这种情况下,所需的长度字节数从1变为2,只有表副本支持(ALGORITHM=COPY).

    不支持VARCHAR使用就地 减小尺寸。ALTER TABLE减小VARCHAR 大小需要一个表副本 ( ALGORITHM=COPY)。

    有关详细信息,请参阅 在线 DDL 操作

  • InnoDB: 支持在线索引重命名ALTER TABLE,现在包含一个RENAME INDEX子句,如下例所示: ALTER TABLE t RENAME INDEX i1 TO i2,其中i1是索引的当前名称,i2是新名称。

    ALTER TABLE t RENAME INDEX i1 TO i2 的结果将是一个表,其内容和结构与旧版本的 t1相同,除了索引名称,现在是 i2而不是i1

  • 分区:分区 HANDLER表现在支持语句。

  • 复制:Auto_Position列已添加到生成的输出中SHOW SLAVE STATUS。此列的值显示是否正在使用复制自动定位。如果启用了自动定位——也就是说,如果MASTER_AUTO_POSITION = 1由在 CHANGE MASTER TO从站上执行的最后一个成功的语句设置——那么该列的值为 1;如果不是,则值为 0。(缺陷 #15992220)

  • 复制: 这些功能以前只有在构建时支持复制时才GTID_SUBTRACT()可用 现在,无论它是如何构建的,使用这个库时这些函数总是可用的。 GTID_SUBSET()libmysqld

  • 复制: 添加了mysqlbinlog--rewrite-db 选项,允许 mysqlbinlog在回放使用基于行的日志记录格式编写的二进制日志时重写数据库的名称。可以通过多次指定选项来创建多个重写规则。

  • MySQL 不再使用默认的 OpenSSL 压缩。(漏洞 #16235681)

  • 对于服务器发送给使用过期密码进行身份验证的客户端的错误,现在有一个明显的错误代码 ( ER_MUST_CHANGE_PASSWORD_LOGIN)。(漏洞 #16102943)

  • 在为 Unbreakable Linux Network 构建的 RPM 包中, libmysqld.so现在有一个版本号。(漏洞#15972480)

  • 使用给定操作不支持的或 值的ALTER TABLE 语句的 错误消息非常通用。服务器现在生成更多信息性消息。(漏洞 #15902911)LOCKALGORITHM

  • 如果密码已过期的客户端已连接但 old_passwords不是选择适合客户端帐户的密码哈希格式所需的值,则客户端无法确定正确的值。现在服务器会自动为帐户身份验证方法适当地设置会话 old_passwords值。例如,如果帐户使用 sha256_password身份验证插件,则服务器设置old_passwords=2. (漏洞#15892194)

  • mysqldump现在支持一个 --ignore-error选项。选项值是以逗号分隔的错误编号列表,指定在 mysqldump执行期间要忽略的错误。如果 --force还给出了忽略所有错误的选项,--force 则优先。(漏洞 #15855723)

  • mysql_config_editor现在支持 --port--socketUnix 套接字文件名的选项。(漏洞 #15851247)

  • mysqlcheck有一个新 --skip-database选项。选项值是应跳过检查的数据库的名称(区分大小写)。

    mysql_upgrade将此选项添加到 它生成的mysqlcheck命令中,以在升级mysql 数据库中的系统表之前升级其他数据库中的表:它先升级 mysql数据库,然后升级除该数据库之外的所有 mysql数据库。这避免了在升级系统表之前升级用户表时可能发生的问题。(错误#14697538、错误#68163、错误#16216384)

  • 系统validate_password_policy_number变量已重命名为 validate_password_policy. (漏洞 #14588121)

  • 以前,在 Linux 上,服务器无法对低于当前支持的最低版本 (2.3)的glibc 版本执行堆栈回溯尝试。现在,在进行此类尝试时,服务器会显示一条消息,表明 glibc版本太旧,无法支持回溯。(漏洞#14475946)

  • 在 JSON 格式EXPLAIN的输出中,attached_condition子查询的信息现在包括select#指示子查询执行的相对顺序。(漏洞 #13897507)

  • 如果用户试图访问一个用户无权访问的不存在的列,服务器将返回一个错误,指示该列不存在。现在服务器返回一个错误,表明用户没有该列的权限,它不提供有关列存在的信息。(错误#19947,错误#11745788)

  • MySQL 测试套件mysql-test-run.sh 程序现在启动服务器InnoDB 而不是MyISAM默认存储引擎。为了保持测试结果与现有结果文件的兼容性,修改了测试用例以force_default_myisam.inc根据需要添加包含该文件的行。在未来的版本中,对于那些没有特别要求的测试用例MyISAM,该行将被删除(因此它们与 一起运行InnoDB)并更新测试结果。

  • ALTER TABLE现在支持 RENAME INDEX重命名索引的子句。更改是在没有表复制操作的情况下进行的。

  • mysql客户端现在有一个 选项可以 将--syslog交互式语句发送到系统 syslog设施。对于与默认忽略模式列表 ( "*IDENTIFIED*:*PASSWORD*") 匹配的语句,以及与使用该 --histignore选项指定的任何模式匹配的语句,将禁止记录日志。有关详细信息,请参阅mysql 客户端日志记录

修正错误

  • 不相容的变化;分区:KEY在 MySQL 5.5 中与数字、日期和时间、 ENUM以及 的分区散列函数的变化SET使得在任何受影响的列类型上使用分区或子分区的表 KEY以及在与 MySQL 5.1 不兼容的 MySQL 5.5 或更高版本服务器上创建的服务器。这是因为 MySQL 5.5 或更高版本服务器计算的分区 ID 几乎肯定与 MySQL 5.1 服务器针对相同表定义和数据计算的分区 ID 不同,这是这些函数更改的结果。

    导致此问题的 MySQL 5.5中分区实现的主要更改KEY如下: 1. 用于数字和日期和时间列的哈希函数从二进制更改为基于字符。2. 用于散列ENUMSET列的基数从latin1 ci字符变为二进制。

    该修复涉及在 MySQL 5.5 及更高版本中添加选择用于KEY 分区的散列类型的功能,这是通过 对和选项的新ALGORITHM扩展实现的。指定会导致服务器使用 MySQL 5.1 中实现的散列函数;using使服务器使用 MySQL 5.5 及更高版本的散列函数。 是默认值。使用 的适当值,您可以执行以下任何任务: PARTITION BY KEYCREATE TABLEALTER TABLEPARTITION BY KEY ALGORITHM=1 ([columns])ALGORITHM=2ALGORITHM=2ALGORITHM

    • 在 MySQL 5.5 及更高版本中创建KEY与 MySQL 5.1 兼容的分区表,使用 CREATE TABLE ... PARTITION BY KEY ALGORITHM=1 (...).

    • 降级KEY在 MySQL 5.5 或更高版本中创建的分区表以与 MySQL 5.1 兼容,使用ALTER TABLE ... PARTITION BY KEY ALGORITHM=1 (...).

    • KEY将最初在 MySQL 5.1 中创建的分区表 升级为在 MySQL 5.5 及更高版本中使用哈希,使用ALTER TABLE ... PARTITION BY KEY ALGORITHM=2 (...).

      重要提示:升级这些表后,它们不能再与 MySQL 5.1 一起使用,除非它们首先ALTER TABLE ... PARTITION BY KEY ALGORITHM=1 (...)在支持此选项的 MySQL 服务器上再次降级。

    此语法不向后兼容,并且会在旧版本的 MySQL 服务器中导致错误。生成 CREATE TABLE ... PARTITION BY KEY语句时, mysqldump将任何出现的 ALGORITHM=1ALGORITHM=2 条件注释括起来,这样它就会被版本不低于 5.5.31 的 MySQL 服务器忽略。升级的另一个考虑因素是 MySQL 5.6.11 之前的 MySQL 5.6 服务器不会忽略ALGORITHM 当由 MySQL 5.5 服务器生成时,此类语句中的选项,由于条件注释引用版本 5.5.31;在这种情况下,您必须手动编辑转储并删除或注释掉出现的选项,然后再尝试将其加载到 MySQL 5.6.10 或更早的 MySQL 5.6 服务器中。对于 MySQL 5.6.11 或更高版本的mysqldump生成的转储,这不是问题,此类注释中使用的版本是 5.6.11。有关详细信息,请参阅 ALTER TABLE 分区操作

    作为此修复的一部分, InnoDB之前已读取已删除行的虚假断言导致服务器在删除行时断言该行位于错误的分区中,该错误断言也已删除。(错误#14521864、错误#66462、错误#16093958、错误#16274455)

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

  • 不兼容的更改: 对于调试版本,在违反最大密钥长度限制的严格 SQL 模式下创建 InnoDB 表会导致服务器退出。

    此错误修复导致的行为更改:在严格的 SQL 模式下,违反键长度限制现在会导致错误(并且不会创建表),而不是警告并将键截断为最大键长度。这适用于所有存储引擎。(漏洞 #16035659)

  • 重要变更;插件API;复制: 因为全文插件的行为可能因 MySQL 服务器而异,所以无法保证使用此插件的语句在主服务器和从服务器上产生相同的结果。出于这个原因,依赖于全文插件的语句现在被标记为对基于语句的日志记录不安全。这意味着此类语句在 时使用行格式记录 binlog_format=MIXED,并导致在 时生成警告 binlog_format=STATEMENT。(缺陷 #11756280,缺陷 #48183)

  • 重要变更;复制

    重要的

    此修复已在 MySQL 5.7.2 中恢复。请参阅 MySQL 5.7.2 中的更改(2013-09-21,里程碑 12)

    执行执行隐式提交但在 gtid_next设置为任何值时不记录其更改的语句AUTOMATIC是不允许的。现在,在这种情况下,语句会因错误而失败。这包括以下列表中的语句:

    (漏洞 #16062608)

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

  • 重要变更;复制:mysqlbinlog 报告的版本号--version已增加到 3.4。(漏洞 #15894381,漏洞 #67643)

  • 重要变更;复制: 用于在全局事务标识符中显示 UUID 的字母大小写不一致。现在,所有 GTID 值都使用小写字母,包括 的输出中的 Retrieved_Gtid_SetExecuted_Gtid_Set列中 SHOW SLAVE STATUS。(漏洞#15869441)

  • 重要的提示; 复制: 使用基于行的日志记录从表复制到同名视图导致从站失败。现在,当使用基于行的日志记录时,在执行任何 DML 之前检查目标对象类型,如果从站上的目标实际上不是表,则会给出错误。

    笔记

    仍然可以使用基于语句的日志记录从表复制到同名视图。

    (错误#11752707,错误#43975)

  • 表现; InnoDB:使用压缩DROP TABLE的表 的 可能比必要的慢,导致停顿几秒钟。作为操作的一部分,MySQL 在与表相关的 缓冲池中不必要地解压缩 页面。(漏洞 #16067973)DROP

  • NDB Cluster: API 节点配置参数 的设置 DefaultOperationRedoProblemAction 被忽略,而是使用默认值。(漏洞 #15855588)

  • NDB Cluster: 作业缓冲区充当ndbmtd中块线程之间工作请求(信号)的内部队列,如果将太多信号发送到块线程,则可能会耗尽。

    在内核块中执行推送连接DBSPJ可以并行执行查询树的多个分支,这意味着发送的信号数量可以随着更多分支的执行而增加。如果 DBSPJ在作业缓冲区填满之前无法完成执行,则数据节点可能会失败。

    这个问题可以通过消息sleeploop 10!!的多个实例来识别。在集群输出日志中,后面可能是作业缓冲区已满。如果作业缓冲区逐渐溢出,也可能由于错误 1205(超出锁定等待超时)、看门狗定时器启动的关闭或其他与超时相关的错误而导致失败。这是由于“sleeploop”导致的减速。

    通常允许消耗信号和生成信号之间的扇出比高达 1:4。但是,由于扫描返回的行数可能不受限制(并且这种类型的多个扫描并行执行),因此在这种情况下,任何大于 1:1 的比率都可能导致作业缓冲区溢出。

    此问题的修复推迟了任何查找子项,否则将与另一个子项并行执行,以在其并行子项完成其自己的请求之一时恢复。这将密集扫描查找连接的扇出比限制为 1:1。(漏洞 #14709490)

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

  • NDB Cluster: 最近添加的 LCP 片段扫描看门狗偶尔会报告 LCP 片段扫描具有非常高的表 ID、片段 ID 和行计数值的问题。

    这是因为看门狗没有考虑在写入片段检查点文件之前耗尽用于缓冲行的备份缓冲区所花费的时间。

    现在,在 LCP 片段扫描的最后阶段,看门狗从监视扫描的行切换到监视缓冲区大小(以字节为单位)。缓冲区大小应随着数据写入文件而减小,之后应立即关闭文件。(漏洞 #14680057)

  • InnoDB: 在全文搜索中解析定界搜索字符串(例如 abc-def)时, InnoDB现在使用与 MyISAM. (漏洞 #16419661)

  • InnoDB:PERFORMANCE_SCHEMA解决了 InnoDB键声明 的命名不一致问题 (漏洞 #16414044)

  • InnoDB:表 中的状态值 innodb_ft_config不会更新。innodb_ft_config用于内部配置,不应用于统计信息目的。为避免混淆,供内部使用的列值已从innodb_ft_config表中删除。此修复程序还删除了 innodb_ft_config无意中公开的表和其他与内部全文搜索相关的表。(漏洞 #16409494,漏洞 #68502)

  • InnoDB: 此修复禁用了在压缩表上额外拆分聚簇索引叶页的条件。额外的页面拆分只是为了为将来的更新预留空间,这样就可以避免将来的页面拆分。(漏洞 #16401801)

  • InnoDB: 对于InnoDB表,如果PRIMARY KEY上的 aVARCHAR为空,索引页压缩可能会失败。(漏洞 #16400920)

  • InnoDB: 页面InnoDB分割算法可能会过度递归。(漏洞 #16345265)

  • InnoDB:在 key 期间对引用和引用之间的兼容性测试不当 ALTER TABLE ... ADD FOREIGN可能会导致服务器退出。(错误号 16330036)

  • InnoDB: 导入带有配置文件的表空间不会导入数据文件。当使用复制和重命名方法更改表后所有页面都没有从缓冲池中刷新时,就会发生此问题。此修复可确保在使用复制和重命名方法更改表时从缓冲池中清除所有页面。(漏洞 #16318052)

  • InnoDB: 回滚不包括只读事务对临时表所做的更改。(漏洞 #16310467)

  • InnoDB: 当使用ALTER TABLEAUTO_INCREMENT列值设置为用户指定的值时,InnoDB 会将 AUTO_INCREMENT值设置为用户指定的值,即使该AUTO_INCREMENT值大于用户指定的值。此修复可确保将 AUTO_INCREMENT值设置为用户指定值和 MAX(auto_increment_column)+1 中的最大值,这是预期的行为。(漏洞 #16310273)

  • InnoDB: 对于调试版本,InnoDB状态导出受可能导致服务器退出的竞争条件的影响。(漏洞 #16292043)

  • InnoDB: 使用innodb_api_enable_mdl=OFF,需要表副本ALTER TABLE的表的操作 InnoDB(漏洞 #16287411)

  • InnoDB:heap->magic_n == MEM_BLOCK_MAGIC_N由于 row_merge_read_clustered_index()返回错误 将发生断言失败(漏洞 #16275237)

  • InnoDB: InnoDB 现在通过直接调用该函数来中止在 Windows 上的执行 abort(),就像在其他平台上一样。(漏洞#16263506)

  • InnoDB: 此修复删除了与 page_hash 锁相关的不必要的调试断言,它只影响调试构建。调试断言不再有效,应该在 MySQL 5.6 中引入 hash_lock 数组时将其删除。(漏洞 #16263167)

  • InnoDB:innodb-buffer-pool-instances如果缓冲池大小小于 1GB ,InnoDB 会在没有警告的情况下静默设置 例如,如果 innodb-buffer-pool-size设置为 200M 并 innodb-buffer-pool-instances设置为 4,InnoDB 将静默设置 和 innodb-buffer-pool-instances实现了警告消息和新逻辑 。(漏洞 #16249500,漏洞 #61239)innodb-buffer-pool-sizeinnodb-buffer-pool-instances

  • InnoDB:lock_validate函数仅出现在调试版本中,获取并释放互斥量以避免占用它们。此行为引入了一个窗口,其中可以在代码遍历同一组数据时对哈希表进行更改。此修复更新lock_validate逻辑以收集所有必须验证锁的记录、释放互斥体并运行循环以验证记录锁。(漏洞 #16235056)

  • InnoDB: ALTER TABLE函数将执行检查以查看 InnoDB 是否处于只读模式 (srv_read_only_mode=true)。如果 InnoDB 处于只读模式,则检查将返回成功状态并且不执行任何其他操作。此修复将 srv_read_only_mode检查条件替换为调试断言。(漏洞 #16227539)

  • InnoDB: 当 InnoDB 缓冲池几乎被 4KB 压缩页填满时,插入 16KB 压缩表会导致 8KB pages_free增加,这可能会减慢或停止插入。(漏洞 #16223169)

  • InnoDB: 此修复更新了 InnoDB 代码ha_innodb.cchandler0alter.cc使用 TABLE::key_info,而不是同时 TABLE::key_infoTABLE_SHARE::key_info。(漏洞 #16215361)

  • InnoDB: 修改 InnoDB 锁定代码时,无意中删除了对注册锁定等待的调用。此修复将回调添加回 InnoDB 锁定代码。(漏洞 #16208201)

  • InnoDB: 直接调用该 trx_start_if_not_started_xa_low()函数会导致调试断言。(漏洞 #16178995)

  • InnoDB: 在锁定等待外键表插入的情况下, InnoDB可能会报告错误的字典更改错误并导致插入失败而不是重试。(漏洞 #16174255)

  • InnoDB:ALTER TABLE表上 的就地InnoDB可能无法从表中删除旧主键的统计信息 mysql.innodb_index_stats。(漏洞 #16170451)

  • InnoDB: 在某些情况下,死锁检测不起作用,导致会话挂起等待锁定等待超时。(错误号 16169638)

  • InnoDB: 当表的主键包含列前缀,并且表上定义了全文索引时,全文搜索导致将不必要的警告写入错误日志。此修复抑制了不必要的警告。(漏洞 #16169411)

  • InnoDB: LOCK_TIME不会在慢速查询日志中正确记录。LOCK_TIME没有考虑 InnoDB 行锁等待时间。(漏洞 #16097753)

  • InnoDB:CREATE TABLE对 进行页面压缩期间的算术下溢 InnoDB可能导致服务器退出。(漏洞 #16089381)

  • InnoDB: 对于调试构建,表的在线ALTER TABLE操作InnoDB可能会导致在表重建期间服务器退出。(漏洞 #16063835)

  • InnoDB: 在某些情况下,InnoDB清除协调器没有使用所有可用的清除线程,导致清除活动不理想。(漏洞 #16037372)

  • InnoDB: ALTER TABLEInnoDB不是完全原子的。(漏洞 #15989081)

  • InnoDB:此修复程序用C++ 标准模板库 (STL) 中UT_SORT_FUNCTION_BODY的函数替换了 InnoDB 递归归并排序的 大部分用途 std::sort()由于内联执行,该 std::sort()函数需要更少的内存并且速度更快。(错误号 15920744)

  • InnoDB: 此修复解决了释放 blob 页面时可能发生的不必要的缓冲池查找,并实现了调试状态工具innodb_ahi_drop_lookups,用于测试目的。(漏洞 #15866009)

  • InnoDB: 此修复实现了 256 字节的边界来扩展 VARCHAR列而不是 256 字符的边界。VARCHAR此更改允许通过更新数据字典对列进行就地扩展 (漏洞 #15863023)

  • InnoDB: 创建大量表,每个表都有一个全文搜索索引,可能会导致过多的内存消耗。此错误修复添加了一个新的配置参数, innodb_ft_total_cache_size它定义了全文搜索索引的全局内存限制。如果索引操作达到全局限制,则会触发强制同步。(错误#14834698,错误#16817453)

  • InnoDB: 此修复修改InnoDB代码以确保在线程退出时关闭未使用的线程句柄,而不是让线程句柄打开直到 在 Windows 上关闭mysqld 。(漏洞 #14762796)

  • InnoDB: 当 InnoDB 以只读模式 (--innodb-read-only=true) 启动时,此修复通过删除表锁定和禁用读取视图创建和 MVCC 来消除不必要的开销。(漏洞 #14729365)

  • InnoDB: 错误#14100254 的修复引入的回归将导致!BPAGE->FILE_PAGE_WAS_FREED断言。(漏洞 #14676249)

  • InnoDB: 在尝试回滚到保存点时,不会设置全文搜索 (FTS) 索引保存点信息,导致出现严重错误。(漏洞 #14639605,漏洞 #17456092)

  • InnoDB:innodb_sync_array_size 错误地允许在运行时配置变量 。如文档所述, innodb_sync_array_size必须在 MySQL 实例启动时配置,之后不能更改。此修复程序 innodb_sync_array_size按预期更改为非动态变量。(漏洞 #14629979)

  • InnoDB: 文件系统级别的错误,例如打开的文件太多,可能会在 ALTER TABLE操作期间导致未处理的错误。该错误可能伴随着 Valgrind 警告和此断言消息:

    Assertion `! is_set()' failed.
    mysqld got signal 6 ;

    (错误#14628410,错误#16000909)

  • InnoDB: 服务器可能会在尝试 InnoDB重组或压缩压缩的二级索引页面时退出。(漏洞 #14606334)

  • InnoDB:在操作等待表空间上的挂起 I/O 操作 完成时执行的 DML 操作RENAME TABLE将导致死锁。(漏洞 #14556349)

  • InnoDB: 在插件仍在安装时尝试卸载 InnoDB memcached 插件导致 Mysql 服务器终止。虽然插件守护线程仍在初始化,但尚未设置插件变量,卸载过程无法清理资源。此修复程序添加了一个变量来指示初始化状态。如果初始化未完成,卸载过程将等待。(漏洞 #14279541)

  • InnoDB: 如果 的值 innodb_force_recovery小于 6,如果在计算表的统计信息时读取损坏的页面,则打开损坏的表可能会永远循环。有关损坏页面的信息被重复写入错误日志,可能导致磁盘空间问题。此修复会导致服务器在尝试读取页面失败一定次数后停止。要解决此类损坏问题,请设置 innodb_force_recovery=6并重新启动。(缺陷 #14147491,缺陷 #65469)

  • InnoDB: 当打印出长信号量等待诊断时, sync_array_cell_print()遇到了由竞争条件引起的分段违规(SEGV)。此修复通过允许在打印时释放单元格来解决竞争条件。(漏洞 #13997024)

  • InnoDB: 尝试具有相同结构的表 InnoDB 的全文搜索 (FTS) 停用词列表 会导致错误。显示新 表是用创建的。FTS 停用词表有效性检查仅支持 latin1。 此修复扩展了对所有支持的字符集的有效性检查。(漏洞 #68450,漏洞 #16373868)InnoDBINFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORDSHOW CREATE TABLEInnoDBCHARSET=utf8InnoDB

  • InnoDB:srv_parse_log_group_home_dirs此修复删除了和相关标头注释 的剩余原型代码 (缺陷 #68133,缺陷 #16198764)

  • InnoDB: 当再次使用同一个表(游标)实例时,终止查询会导致 InnoDB 断言失败。这是 Bug#14704286 修复引入的回归错误的结果。该修复程序引入了一项检查来处理长时间运行的查询的终止信号,但游标未恢复到正确的状态。(缺陷 #68051,缺陷 #16088883)

  • InnoDB: 在启动时,InnoDB 在 64 位 Linux 和 64 位 Windows 系统上报告一条消息,指出 CPU 不支持 crc32 指令。在 Windows 上,即使 CPU 支持,InnoDB 也不使用 crc32 指令。此修复修改了消息的措辞并实施了对 crc32 指令可用性的检查。(缺陷 #68035,缺陷 #16075806)

  • InnoDB: 未检查内部生成的外键名称的长度。如果内部生成的外键名称超过 64 个字符的限制,这将导致来自 SHOW CREATE TABLE. 此修复程序检查内部生成的外键名称的长度,并在超过限制时报告错误消息。(错误#44541,错误#11753153)

  • 分区: 对按范围分区并 TO_DAYS()用作分区函数的表的查询在修剪时始终包括表的第一个分区。无论 BETWEEN此类查询的子句中使用的范围如何,都会发生这种情况。(错误#15843818,错误#49754)

  • 分区: 现在对使用提供自动分区的存储引擎(例如 NDB存储引擎)但显式分区的表启用分区修剪。以前,使用这种存储引擎的所有表都禁用修剪,无论这些表是否明确定义了分区。

    NDB此外,作为此修复的一部分,现在对使用提供自动分区 的存储引擎(例如 )的表禁用显式分区选择 。(漏洞 #14827952)

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

  • 分区:针对视图的 执行 ALTER TABLE ... DROP PARTITION导致服务器崩溃,而不是像预期的那样因错误而失败。(漏洞 #14653504)

  • 分区: 如果同时使用 和 且基础表已分区,则查询结果未 DISTINCT排序ORDER BY。(漏洞 #14058167)

  • 分区: 将任意数量的行插入到 ARCHIVE使用超过 1000 个分区的表中,然后尝试删除该表会导致 MySQL 服务器失败。(漏洞 #13819630,漏洞 #64580)

  • 复制;Linux; Microsoft Windows:在从站上打开复制表后,lower_case_table_names设置为 0 的 Linux 主站和设置为 2 的 Windows 从站 之间的复制失败 lower_case_table_names此外, FLUSH TABLES之后还需要查看哪些更新实际上已应用于从站。这是因为 lower_case_table_names在强制将复制的数据库对象名称转换为小写以检查表缓存之前,仅检查它是否等于 1。现在在这种情况下, lower_case_table_names检查它是否设置为非零值。(漏洞 #16061982)

  • 复制;Microsoft Windows:binlog.index文件以 \r\n(CR+LF) 结尾时,MySQL 错误地将 \r字符包含在它试图打开的文件的名称中,导致复制失败。这可能会导致在 Windows 系统上编辑此文件后重新启动服务器时出现问题。(缺陷 #11757413,缺陷 #49455)

  • 复制: 当使用 GTID 和二进制日志自动定位时,每当从服务器重新连接(由于 I/O 线程故障或主服务器更改等原因)时,主服务器必须扫描所有二进制日志,然后才能将任何事件发送给从服务器。现在,master 从最旧的二进制日志开始,其中包含在 slave 上找不到的任何 GTID。(漏洞 #16340322,漏洞 #68386)

  • 复制: 当master的服务器版本大于等于10时,复制到服务器版本较低的slave失败。(错误#16237051,错误#68187)

  • 复制: 当将 MySQL 5.6 主服务器复制到较旧的从服务器时,错误 1193 (ER_UNKNOWN_SYSTEM_VARIABLE) 被记录为一条消息,例如Unknown system variable 'SERVER_UUID' on master, maybe it is a *VERY OLD MASTER*。此消息已得到改进以包含更多信息,类似于此消息:主服务器上的未知系统变量“SERVER_UUID”。一个可能的原因是该变量在主服务器(版本:5.5.31)上不受支持,即使它在从服务器(版本:5.6.11)上也是如此。(错误#16216404,错误#68164)

  • 复制: 的打印格式说明符server_id 被错误地定义为带符号的 32 位整数,范围为 -2144783647 到 2144783648。此修复将 server_id整数类型更改为无符号 32 位整数类型,范围为 0 到 4294967295,这是该--server-id选项的记录范围。(漏洞 #16210894)

  • 复制: 当 MTS 开启并应用事务时,从属协调器在事务事件上遇到校验和错误时会挂起。这是由于死锁情况造成的,在这种情况下,协调器假设正常停止,而工作人员等待协调器调度更多事件。对于调试构建,问题表现为断言失败,这是由于协调器thd->is_error() 在遇到错误时没有设置。(漏洞 #16210351)

  • 复制:从二进制日志中读取时 ,用户变量的零长度名称(例如 @``)被错误地认为是数据或网络损坏的标志。(漏洞 #16200555,漏洞 #68135)

  • 复制:在不存在中继日志文件的从站上 运行SHOW RELAYLOG EVENTS返回以下不正确的错误消息:“Error when executing command SHOW BINLOG EVENTS: Could not find target log.”错误消息文本已更改为:“Error when executing command SHOW RELAYLOG EVENTS: Could not find target log.”(缺陷 #16191895)

  • 复制: mysqlbinlog可以连接到远程服务器并读取其二进制日志。在 MySQL 5.6 及更高版本中,此工具还可以等待服务器生成并发送其他事件,实际上表现得像从服务器连接到主服务器。在服务器发送心跳的情况下, mysqlbinlog无法正确处理。结果, mysqlbinlog此时失败,没有从服务器读取任何更多事件。为了解决这个问题, mysqlbinlogHEARTBEAT_LOG_EVENT现在忽略 它接收到的任何类型的二进制日志事件(漏洞 #16104206)

  • 复制: 当与检索一个或多个状态变量 、 、 、 或 STOP SLAVE的语句同时发出时,可能会导致死锁 。(漏洞 #16088188,漏洞 #67545)SHOW STATUSSlave_retried_transactionsSlave_heartbeat_periodSlave_received_heartbeatsSlave_last_heartbeatSlave_running

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

  • 复制: 反引号 (`) 字符在内部生成的 SQL 语句中并不总是得到正确处理,这有时会导致从站出错。(漏洞 #16084594,漏洞 #68045)

    参考资料:此问题是 Bug #14548159、Bug #66550 的回归。

  • 复制: 为了使用 GTID 提供或恢复服务器,可以设置gtid_purged一个给定的 GTID 集,列出已导入的事务。此操作要求全局 gtid_executedgtid_purged服务器系统变量为空。(这样做是为了避免覆盖服务器生成的 GTID 的可能性。)

    错误消息GTID_PURGED can only be set when GTID_EXECUTED is empty在未满足此要求时引发的错误消息可能会造成混淆或误导,因为它没有指定受影响变量的范围。为了防止这种情况发生,引用与 GTID 相关的变量的错误消息现在指定了任何此类变量的范围。(漏洞 #16084426,漏洞 #68038)

  • 复制:对于所有回滚, 会话级别的值 gtid_next在从属服务器上被错误地重置,这意味着 GTID 可能会在多语句事务中丢失,从而导致从属服务器因 ER_GTID_NEXT_TYPE_UNDEFINED_GROUP 错误而停止。现在,只有在回滚完整事务或 autocommit启用时才会执行此操作。(漏洞 #16084206)

  • 复制: 删除表名中包含非常规 ASCII 字符的表会导致复制失败。解析器将表名转换为标准字符集字符,并将表名存储在 table_name 变量中。使用 table_name 变量重新生成删除表查询时,表名未转换回原始字符集。

    此外,具有 64 个字符的表和数据库名称会导致断言失败。断言要求表名或数据库名少于 128 个字符。拉丁字符每个需要两个字节,这需要小于或等于 128 位的断言条件。

    该修复包括一个将表名称转换回原始字符集的新函数,以及对允许表和数据库名称小于或等于 128 位的断言条件的更正。(漏洞 #16066637)

  • 复制: 使用--replicate-*选项(请参阅 副本服务器选项和变量)在某些情况下可能会导致从属内存泄漏。(错误#16056813,错误#67983)

  • 复制: 在某些情况下,当从服务器无法识别主服务器的服务器版本时,这可能会导致从服务器发生故障。(漏洞 #16056365)

  • 复制: 在某些情况下,转储线程可能会发送与格式描述事件不同步的心跳。此问题的影响之一是,在从备份数据目录配置新服务器并设置 --gtid-mode=ON和启用自动定位后(请参阅CHANGE MASTER TO Statement),复制无法启动,出现错误Read invalid event from master...。同样的问题也可能导致基于 GTID 的复制由于在主服务器意外关闭后跳过的事件而失败。(漏洞 #16051857)

  • 复制: 当复制的LOAD DATA语句将行插入视图时,复制失败。(缺陷 #15993712,缺陷 #67878)

  • 复制: 当使用基于 GTID 的复制时,每当事务在主服务器上执行但未发送到从服务器,因为从服务器已经有一个具有该 ID 的事务时,半同步复制超时。可能发生这种情况的一种情况是在故障转移操作期间,新主服务器在新从服务器后面启动。(漏洞 #15985893)

  • 复制: 当用作复制信息存储库类型时,在每个事务后执行的不必要的磁盘刷新FILE可能会降低性能。现在只有当数据和中继日志信息都存储在(事务)表中时才会这样做。(漏洞 #15980626)

  • 复制: 当一个slave从二进制日志中读取表映射事件时,它假设元数据大小总是小于正在使用的表的列数的两倍,当事件包含该字段的错误值时,复制失败。(漏洞 #15830022)

  • 复制: 当从二进制日志中读取行日志事件时,从服务器假定这些事件始终有效;因此,具有无效二进制日志偏移量的事件可能会导致从服务器崩溃。现在在这种情况下,如果给定行事件中的任何字段无效,从站会优雅地失败,并报告错误。(漏洞 #15829568)

  • 复制:ulong复制中使用的表 ID在主服务器和 定义为类型 uint。此外,二进制日志事件中表 ID 的最大值为 6 个字节 (281474976710655)。这些因素的结合导致了以下问题:

    • 当为表分配的 ID 大于 . 时,从站上的数据可能会丢失uint

    • 大于 281474976710655 的表 ID 作为 281474976710655 写入二进制日志。

    • 当从站遇到两个具有相同表 ID 的表时,这会导致从站停止。

    为了解决这些问题,IDs 现在由 master 和 slave 定义为类型ulonglong,但限制在 0 到 281474976710655 的范围内,超过此值时从 0 重新开始。(漏洞 #14801955,漏洞 #67352)

  • 复制: MASTER_POS_WAIT()当 GTID 协议跳过事务时,由于从属 SQL 线程的无效更新,可能会挂起或返回 -1。(漏洞 #14775893)

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

  • 复制: 尝试在多线程从站上执行停止事件可能会导致对中继日志进行不必要的更新,从而导致从站与主站失去同步。(漏洞 #14737388)

  • 复制: 用于中继日志信息的内部对象在释放内存之前仅被部分删除。(漏洞#14677824)

  • 复制: 服务器启动时,会检查是否开启了无锁半同步复制,如果开启,则获取锁,然后再次测试。在这些测试中的第一个测试之后但在第二个测试之前禁用半同步复制可能会导致服务器崩溃。(漏洞 #14511533,漏洞 #66411)

  • 复制: 在某些情况下——在转储线程读取事件循环中检测到 EOF 之后,并且在决定是否更改为新的二进制日志文件之前——在做出此决定之前将新事件写入二进制日志是可能的. 如果此时发生日志轮换,则 EOF 检测后发生的任何事件都将被丢弃,从而导致数据丢失。现在在这种情况下,将采取措施确保在允许日志轮换发生之前处理所有事件。(错误#13545447,错误#67929)

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

  • 复制:函数 有可能在 or 语句 MASTER_POS_WAIT()之后过早返回。这可能是因为 在这种情况下没有更新主日志位置,导致 读取无效的日志位置并立即返回。 CHANGE MASTER TORELAY_LOG_POSRELAY_LOG_NAMECHANGE MASTER TOMASTER_POS_WAIT()

    为了解决这个问题,主日志位置被标记为无效,直到 SQL 线程读取第一个事件时该位置被设置为有效值,之后它被标记为有效。诸如MASTER_POS_WAIT() now 之类的函数推迟与主日志位置的任何比较,直到可以获得有效值(即,在CHANGE MASTER TO应用语句后的第一个事件之后)。(缺陷 #11766010,缺陷 #59037)

  • 复制: 如果在写入二进制日志时磁盘已满,则服务器会挂起,直到手动释放空间。完成此操作后,MySQL 服务器可能会失败,因为在不需要时设置了内部状态值。现在在这种情况下,不是尝试设置此状态,而是在错误日志中写入警告。(缺陷 #11753923,缺陷 #45449)

  • 复制: 二进制日志和中继日志文件使用 PID 文件的名称而不是主机名作为基本名称。(缺陷 #11753843,缺陷 #45359)

  • Microsoft Windows: 开始 --shared-memory支持共享内存连接的服务器在接收来自多个线程的请求时可能会崩溃。(漏洞 #13934876)

  • Microsoft Windows: 在 Windows 上,log_error 系统变量在某些情况下无法准确反映错误日志文件名。例如,如果服务器启动时没有--console--log-error,则默认登录到 host_name.err数据目录,但log_error仍为空白。

    Nowlog_error应该是非空的,并且在所有情况下,在所有平台上反映日志文件名。该值是 stderr服务器是否不将错误消息写入文件并将它们发送到控制台(标准错误输出)。特别是,在 Windows 上, --console覆盖错误日志的使用并将错误消息发送到控制台,因此 log_error将设置为 stderr. (缺陷 #8307,缺陷 #11745049)

  • Solaris: mysql_install_db在 Solaris 10 稀疏根区域中不起作用。(缺陷 #68117,缺陷 #16197860)

  • RPM 包缺少 innodb_engine.solibmemcached.so插件。(漏洞 #17001088)

  • MySQL 5.7 的 Windows MSI 安装程序有一个 5.6 升级代码,而不是 5.7 升级代码。(漏洞#16445344)

  • SHOW ENGINE PERFORMANCE_SCHEMA STATUS当正确的值超过 4GB 时,可能会报告不正确的内存分配值。(漏洞#16414644)

  • 如果准备好的语句在打开 SQL 处理程序时尝试使用现有视图的名称创建表,则服务器可能会退出。(漏洞 #16385711)

  • Performance Schema 语句标记化开销减少了。(漏洞 #16382260)

  • 语句中的长数据库名称GRANT 可能会导致服务器退出。(漏洞 #16372927)

  • 一些聚合查询试图分配过多的内存。(漏洞 #16343992)

  • 对于调试版本,如果在发出语句之前启用自动提交的语句失败,则可以引发断言 XA START。(漏洞 #16341673)

  • 非常小join_buffer_size 的值可能会引发断言。(漏洞 #16328373)

  • MySQL 发行版中的BUILD-CMAKE文件已更新为包含CMake 信息的正确 URL。(漏洞 #16328024)

  • 在子查询的连接子句中执行带有子查询的准备好的语句时,优化器尝试删除冗余子查询子句会引发断言ON。(漏洞 #16318585)

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

  • IN如果查询在子句中包含子查询,而子查询在子句中包含 XOR操作, 则返回不正确的结果WHERE。(漏洞 #16311231)

  • 如果将CREATE USER语句记录到常规查询日志并且old_passwords系统变量设置为 2,则可能会发生 Valgrind 故障。(缺陷 #16300620)

  • 对于调试版本,检查密码约束可以为更新密码的语句提出断言。(漏洞 #16289303)

  • 将数值转换为 BIT可能会产生意想不到的结果。(漏洞 #16271540)

  • 修复了使用 XCode 4.6 编译时的警告。_XOPEN_SOURCE修复了在环境中定义了或 isoctal宏时编译时的警告。(错误#16265300、错误#60911、错误#12407384)

  • 在范围优化器中,索引合并失败可能导致服务器退出。(漏洞 #16241773)

  • 对于升级操作,RPM 包产生了关于无法访问.err文件的不必要的错误。(漏洞 #16235828)

  • 使用 LooseScan 半连接策略评估的范围谓词的查询可能会返回重复的行。(漏洞 #16221623)

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

  • 某些法律HAVING条款被认为无效而被拒绝。(漏洞 #16221433)

  • yaSSL 没有执行正确的填充检查,而是只检查明文的最后一个字节,并用它来确定要删除多少字节。(漏洞 #16218104)

  • PROCESSLIST_INFO性能模式可能会为表的列 返回不正确的值 threads。(漏洞 #16215165)

  • mysql_config --libs显示不正确的输出。(漏洞 #16200717)

  • 为选择调用范围优化器NULL 导致服务器退出。(漏洞 #16192219)

  • const对于调试版本,由于对涉及表 的连接的适用索引计算不正确,服务器可能会退出 。(漏洞 #16165832)

  • 对于未为其提供列值 的语句,该列设置为“0000-00-00 00:00:00”,而不是当前时间戳。(漏洞 #16163936)CREATE TABLE (... col_name TIMESTAMP DEFAULT CURRENT_TIMESTAMP ...) ... SELECTSELECTTIMESTAMP

  • 在准备好的语句中使用GROUP BY WITH ROLLUP可能会导致服务器退出。(漏洞 #16163596)

  • 启用线程池插件后,大量连接可能导致 Valgrind 恐慌或客户端无法连接。(漏洞 #16088658,漏洞 #16196591)

  • 从属工作线程缺少性能模式检测。(漏洞 #16083949)

  • 服务器未正确执行 EXPLAIN FORMAT=JSON某些格式错误的查询。(漏洞 #16078557)

  • CACHE INDEX如果条件处理程序处理了存储程序中 失败语句索引的错误,则会发生格式错误的数据包和命令不同步错误。(漏洞 #16076180)

  • slave_rows_search_algorithms 系统变量设置为不合适的值可能会导致服务器退出。(漏洞 #16074161)

  • SET PASSWORD并且 GRANT ... IDENTIFIED BY对使用身份验证插件进行身份验证的用户的密码没有影响,该插件访问存储在 mysql.user 表外部的密码。但是尝试更改此类用户的密码不会产生任何警告,从而给人一种密码已被更改但实际上并未更改的印象。现在 MySQL 发出 ER_SET_PASSWORD_AUTH_PLUGIN 警告,表明该尝试已被忽略。(漏洞 #16072004)

  • 目录名称操作可能导致 OS X 和 Windows 上的堆栈溢出。(漏洞 #16066243)

  • 删除了CMakeSIGNAL_WITH_VIO_SHUTDOWN文件中对未使用宏的 引用 。(漏洞 #16066150)

  • 初始test数据库包含一个 无法工作的dummy.bak文件。DROP DATABASE不再包含此文件。此外,db.opt现在包含一个包含以下行的文件:

    default-character-set=latin1
    default-collation=latin1_swedish_ci

    (漏洞 #16062056)

  • 使用存储函数和用户变量的某些组合发出PREPARE语句导致服务器退出。(漏洞 #16056537)

  • 将系统变量设置为DEFAULT可能会导致服务器退出。(漏洞 #16044655)

  • 对于调试版本,如果服务器在禁用二进制日志记录的情况下启动,SHOW RELAYLOG EVENTS则从存储过程中执行会引发断言。(漏洞 #16043173)

  • 查询解析器因某些语法错误而泄漏内存。(漏洞 #16040022)

  • 在关闭期间,服务器可能会尝试锁定未初始化的互斥体。(漏洞 #16016493)

  • --default-authentication-plugin选项允许无效的插件值,并且并不总是将 old_passwords系统变量设置为适合指定插件的值。(漏洞 #16014394)

  • 服务器源代码中的#ifdef WITH_MYISAMMRG_STORAGE_ENGINE和的 实例已被删除,因为和 存储引擎插件是必需的。(漏洞 #15997345)#ifdef WITH_CSV_STORAGE_ENGINECSVMERGE

  • --character-set-server选项可以将连接字符集系统变量设置为ucs2不允许的值。(错误#15985752,错误#23303391)

  • 对于调试构建,在导致隐式提交的触发器或存储函数中执行语句会引发断言。(漏洞 #15985318)

  • 在某些情况下,mysql --secure-auth 允许使用旧的(pre-4.1)散列格式将密码发送到服务器。(漏洞 #15977433)

  • 库字符串mysys格式化例程可能会错误处理宽度说明符。(漏洞 #15960005)

  • 表创建操作将条目添加到 file_instancesPerformance Schema 表中,但这些条目并不总是因表删除操作而被删除。(漏洞 #15927620)

  • 启用索引条件下推后,下推条件不包含所用索引中的列的查询可能会很慢。(漏洞 #15896009)

  • 带有按不在选择列表中的类型的外部列排序的EXISTS/IN/ALL/ANY子 查询的子查询的查询导致触发断言。(漏洞 #15875919)ORDER BYBLOB

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

  • 在特殊情况下,优化器不考虑适用于查询处理的索引,从而可能导致执行不理想和 EXPLAIN输出不正确。(错误#15849135,错误#16094171)

  • TEMPORARY如果同名表被删除 ,则查询缓存中涉及给定表的查询会错误地失效。(漏洞 #14839743)

  • ref优化器可能会为使用字符串数据类型访问 的查询返回不匹配的记录。(漏洞 #14826522)

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

  • CREATE SERVER由于缺少或只读mysql.servers表导致的 失败导致内存泄漏。(漏洞 #14781478)

  • 表名称最多可包含 64 个字符,但消息字符串ER_TABLE_NEEDS_REBUILDER_TABLE_NEEDS_UPGRADE 错误被截断的名称超过 32 个字符。(漏洞 #14753226)

  • 在高客户端争用期间启用查询缓存可能会导致服务器退出。(漏洞 #14727815)

  • 当对日志文件的访问权限阻止服务器写入它时,在运行时启用慢速查询日志会导致服务器退出。(漏洞 #14711347)

  • 如果优化器计算出外连接内表的行计数为零,则它无法确定后续表的正确顺序。(漏洞 #14628746)

  • 服务器有时无法遵守 MAX_CONNECTIONS_PER_HOUR对用户连接的限制。(漏洞 #14627287)

  • 服务器可以访问该DEBUG_SYNC 设施,同时在连接关闭期间关闭临时表,在设施被清理后,导致引发断言。(漏洞 #14626800)

  • IN将具有聚合函数的子查询 转换为子查询后,优化器可能会返回不正确的结果EXISTS。(漏洞 #14586710)

  • 表删除可能会失败并导致服务器因文件名过长而退出。(漏洞 #14581920)

  • 当客户端程序失去与 MySQL 服务器的连接时,或者如果服务器在客户端执行后开始关闭 mysql_stmt_prepare(),next mysql_stmt_prepare()将返回一个错误(如预期的那样),但后续 mysql_stmt_execute()调用会使客户端崩溃。(漏洞 #14553380)

  • 以前,如果--login-path给出了多个选项,mysql_config_editor会忽略除最后一个选项之外的所有选项。现在多个--login-path 选项会导致错误。(漏洞 #14551712)

  • 如果 MySQL 服务器以启用一般查询日志或慢速查询日志的选项启动,但日志文件的访问权限阻止服务器写入它,则服务器启动时显示一条错误消息,指示日志记录已关闭并且服务器需要问题解决后才能重新启动。这是不正确的,因为也可以在更正问题后在运行时再次设置日志记录变量(无需重新启动)。错误消息现在表明了这种可能性。(漏洞 #14512467)

  • 对于调试版本,在触发器内创建TEMPORARY表会导致服务器退出。(漏洞 #14493938)

  • SHOW COLUMNS在定义为列的视图上UNION可能 Geometry会导致服务器退出。(漏洞 #14362617)

  • sha256_password_private_key_pathsha256_password_public_key_path 系统变量表示认证插件的密钥文件 , sha256_password但服务器未能正确检查密钥文件是否有效。现在,如果任一密钥文件无效,服务器将记录错误并退出。(漏洞 #14360513)

  • SET var_name = VALUES(col_name)可能导致服务器退出。现在禁止使用此语法,因为在SET上下文中没有列名并且语句返回 ER_BAD_FIELD_ERROR。(漏洞 #14211565)

  • 客户端/服务器协议中的COM_CHANGE_USER命令没有正确使用命令包中的字符集编号,导致包中其他值的字符集转换不正确。(漏洞 #14163155)

  • 如果服务器是用 启动的 --skip-grant-tables,则 CREATE EVENTand ALTER EVENT语句会导致内存泄漏。(漏洞 #14059662)

  • FORMAT()使用语言环境和非常大的数字 调用该函数可能会导致服务器退出。(漏洞 #14040155)

  • 对于调试版本,对值溢出的不当处理 AUTO_INCREMENT可能会导致服务器退出。(漏洞 #13875572)

  • 某些与插件相关的情况可能会使用户帐户无法使用:

    • 该帐户需要未加载的身份验证插件。

    • 该帐户需要sha256_password 身份验证插件,但服务器启动时未按此插件的要求启用 SSL 或 RSA。

    服务器现在默认检查这些条件,并对不可用的帐户发出警告。此检查会减慢服务器初始化和FLUSH PRIVILEGES,因此通过新 validate_user_plugins系统变量将其设为可选。默认情况下启用此变量,但如果不需要额外检查,则可以在启动时禁用它以避免性能下降。(错误#13010061,错误#14506305)

  • 将未知时区规范传递给 CONVERT_TZ()导致内存泄漏。(漏洞 #12347040)

  • 删除了 MySQL 发行版目录中 的过时文件linuxthreads.txtglibc-2.2.5.patch文件 。Docs(漏洞 #11766326)

  • 如果构建为允许每个表的最大索引数大于 64,则服务器可能会退出。

    在解决此问题的过程中,添加了一个 CMake选项以允许构建服务器以支持每个表的最大索引数。默认值为 64。最大值为 255。小于 64 的值将被忽略,并使用默认值 64。(漏洞 #11761614)-DMAX_INDEXES=N

  • mysql_install_db没有 '_'在写入授权表的语句的主机名中转义。(漏洞 #11746817)

  • explicit_defaults_for_timestamp 启用后,插入NULL列 现在 TIMESTAMP NOT NULL会产生错误(就像其他NOT NULL 数据类型一样),而不是插入当前时间戳。(漏洞 #68472,漏洞 #16394472)

  • SQL_CALC_FOUND_ROWS结合处理 和ORDER BY可能 LIMIT会导致 的结果不正确 FOUND_ROWS()。(漏洞 #68458,漏洞 #16383173)

  • 如果为结果集中的一行返回 INET6_NTOA()或 ,则后面的行也返回。(漏洞 #68454,漏洞 #16373973)INET6_ATON()NULLNULL

  • 具有聚合的、非分组的外部查询和SELECT 列表中的聚合的、非分组的子查询的语句可能返回不正确的结果。(缺陷 #68372,缺陷 #16325175)

  • 在子查询后添加一个ORDER BY子句 IN可能会导致返回重复的行。(缺陷 #68330,缺陷 #16308085)

  • 如果服务器以 启动 --skip-grant-tables, 则ALTER USER ... PASSWORD EXPIRE导致服务器退出。(缺陷 #68300,​​缺陷 #16295905)

  • -DWITH_SSL=/path/to/openssl 由于选择了不正确 的libcrypto. (缺陷 #68277,缺陷 #16284051)

  • 如果mysql是使用捆绑 libedit库构建的,则该库将构建为静态代码,以避免在运行时链接到不同的动态版本。动态链接可能导致使用不同的、不兼容的版本和分段错误。(缺陷 #68231,缺陷 #16296509)

  • Performance Schema 收集的统计信息中缺少服务器在调用存储引擎时执行的某些表 I/O。(漏洞 #68180,漏洞 #16222630)

  • perl 版本的mysql_install_db 错误处理了一些错误消息。(漏洞 #68118,漏洞 #16197542)

  • 对于小数秒大于六位小数的参数, SEC_TO_TIME()将被截断,而不是应有的四舍五入。(漏洞 #68061,漏洞 #16093024)

  • IN()由于在非调试构建中包含调试代码,子句中 具有许多值的查询速度很慢。(缺陷 #68046,缺陷 #16078212)

    参考资料:另请参阅:Bug #58731、Bug #11765737。

  • ALTER TABLE tbl_name ADD COLUMN col_name TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP0000-00-00 00:00:00如果更改是就地完成而不是通过制作表副本,则插入 而不是当前时间戳。(漏洞 #68040,漏洞 #16076089)

  • mysqld_safe使用不可移植的 -e测试结构。(缺陷 #67976,缺陷 #16046140)

  • 服务器未强制执行 65,535portreport_port上限,并截断了较大的值。(缺陷 #67956,缺陷 #16035522)

  • 非空间索引仅支持空间列的精确匹配查找,但优化器 range在某些情况下错误地使用了访问,从而导致了错误的结果。(缺陷 #67889,缺陷 #15993693)

  • 对于EXPLAIN DELETEEXPLAIN UPDATEpossible_keys列出了所有索引,而不仅仅是适用的索引。(缺陷 #67830,缺陷 #15972078)

  • SLEEP()NULL没有为否定论点产生警告或错误。现在它会在严格的 SQL 模式下产生警告或错误。(缺陷 #67548,缺陷 #15859462)

  • 尝试创建一个触发器,而该触发器已经存在具有相同操作时间和事件的触发器会导致 ER_NOT_SUPPORTED_YET错误而不是 ER_TRG_ALREADY_EXISTS错误。(漏洞 #67357,漏洞 #14801721)

  • 如果表中有行,则 INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX 删除表不会删除这些行。(缺陷 #67283,缺陷 #14779330)

  • WITH_LIBWRAP如果配置为启用 ,则 MySQL 无法构建 。(缺陷 #67018,缺陷 #16342793)

  • 如果一个线程正在为查询缓存重建结果,则其他正在使用先前结果的线程可能无法正确丢弃旧结果。对于调试版本,这引发了一个断言。(错误#66781,错误#14631798)

  • CMake没有检查系统是否 zlib有MySQL需要的某些功能,导致构建错误。现在它检查并回退到捆绑zlib的功能是否丢失。(缺陷 #65856,缺陷 #14300733)

  • 如果转储文件包含在具有不同字符集和排序规则的视图上定义的具有一个字符集和排序规则的视图,则尝试恢复转储文件会失败,并出现 非法混合排序规则错误。(缺陷 #65382,缺陷 #14117025)

  • SQL_NO_CACHE关键字应该防止服务器检查查询缓存以查看查询结果是否已经缓存,并防止它缓存查询结果。但是,只有SQL_NO_CACHE在前后有空格字符时,查询缓存检查才会被抑制。(例如,如果关键字后跟换行符,服务器会检查缓存。)现在解析器要求前后字符是空白字符,而不是空格。(错误#64164,错误#13641256)

  • 如果服务器在没有 --datadir选项 的情况下启动,则 系统变量SHOW VARIABLES可能显示空值。datadir(缺陷 #60995,缺陷 #12546953)

  • 当视图定义 在聚合函数的SEPARATOR子句中 包含特殊字符时, mysqldump创建了一个无效的视图定义,在重新加载转储文件时产生错误。(缺陷 #60920,缺陷 #12395512)GROUP_CONCAT()

  • 对于调试版本,一些带有SELECT ... FROM DUAL嵌套子查询的查询引发了断言。(漏洞 #60305,漏洞 #11827369)

  • 和 命令选项现在在运行时作为 和 --log-slow-admin-statements 系统 变量公开。可以使用 来检查它们的值 。变量是动态的,因此它们的值可以在运行时设置。(这些选项实际上系统变量替换了,但由于系统变量可以在服务器启动时设置,因此不会丢失任何选项功能。)(错误 #59860,错误 #11766693)--log-slow-slave-statementslog_slow_admin_statementslog_slow_slave_statementsSHOW VARIABLES

  • 和 内存锁定 API 的mysys库中的 源代码从未使用过,已被删除。(错误#54662,错误#11762107)my_malloc_lockmy_free_lock

  • 如果服务器读取失败errmsg.sys,它可能会因分段错误而退出。(错误#53393,错误#11760944)

  • UNION ALLBLOB列上可能会产生不正确的结果。(错误#50136,错误#11758009)

  • 在处理内存不足错误时可能会出现内存不足情况,从而导致错误处理中的递归。(错误#49514,错误#11757464)

  • REPLACE()当用户变量作为参数提供并且在多行上执行操作时, 该函数产生不正确的结果。(缺陷 #49271,缺陷 #11757250)

  • UNION类型转换可能会错误地将无符号值转换为有符号值。(缺陷 #49003,缺陷 #11757005)

  • 如果 XA 支持被多个存储引擎激活,服务器将退出。(缺陷 #47134,缺陷 #11755370)

  • 在某些情况下,使用KILLkill 另一个会话中的语句可能会导致该会话返回不正确的错误代码。(错误#45679,错误#11754124)

  • 设置max_connections为小于当前打开连接数的值会导致服务器退出。(缺陷 #44100,缺陷 #11752803)

  • 优化器对某些不适用此访问方法的查询使用松散索引扫描。(错误#42785,错误#11751794)

  • 在低内存条件下查看访问可能会引发调试断言。(缺陷 #39307,缺陷 #11749556)

  • 的输出SHOW CREATE VIEW 可能因DEFINER帐户权限而异。(缺陷 #34553,缺陷 #11747931)

  • 如果列声明为NOT NULL,则不允许插入NULL列或将其更新为NULL。但是,即使存在将列设置为非值的BEFORE INSERT(或触发器),也会强制执行此约束。现在,根据 SQL 标准,在语句末尾检查约束。(缺陷 #6295,缺陷 #11744964)BEFORE UPDATENULL