Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.3 的变化(2011-10-03,里程碑 6)

MySQL 5.6.3 的变化(2011-10-03,里程碑 6)

笔记

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

并行事件执行(多线程从属)

  • 复制: MySQL 复制现在支持多线程从属服务器并行执行来自不同数据库的主服务器的复制事件,这可以在满足某些条件时显着提高应用程序吞吐量。最佳情况是数据按数据库进行分区,并且给定数据库内的更新发生的顺序与它们在主数据库上发生的顺序相同。但是,不需要在不同数据库之间协调事务。

    服务器系统变量(在此版本中slave_parallel_workers 添加)设置用于并行执行复制事件的从属工作线程数。启用并行执行时,从属 SQL 线程充当从属工作线程的协调器,其中事务按数据库分布。这意味着从服务器上的工作线程可以处理给定数据库上的连续事务,而无需等待其他数据库上的更新完成。

    由于不同数据库上的事务在从服务器上的发生顺序可能与在主服务器上的顺序不同,因此检查最近执行的事务并不能保证来自主服务器的所有先前事务都已在从服务器上执行。这对使用多线程从站时的日志记录和恢复有影响。有关在从站上使用多线程时如何解释二进制日志记录信息的信息,请参阅 SHOW SLAVE STATUS 语句

优化器注释

  • 实施了这些查询优化器改进:

    • EXPLAIN语句现在提供 DELETEINSERTREPLACEUPDATE语句的执行计划信息。以前,仅为 报表 EXPLAIN提供信息。SELECT

    • 优化器更有效地处理 FROM子句中的子查询(即派生表):

      • 子句中子查询的具体化 FROM被推迟到查询执行期间需要它们的内容时,这提高了性能。物化的延迟甚至可以使优化器完全避免它。考虑一个将子句中子查询的结果连接 FROM到另一个表的查询:如果优化器首先处理另一个表并发现它没有返回任何行,则不需要进一步执行连接并且优化器不需要在全部。

        以前,FROM 子句中的子查询是为 EXPLAIN SELECT语句具体化的。这导致部分 SELECT执行,即使目的 EXPLAIN是获取查询计划信息,而不是执行查询。这种具体化不再发生,因此 EXPLAIN此类查询速度更快。

      • 在查询执行期间,优化器可能会向派生表添加索引以加速从中检索行。

      有关详细信息,请参阅 优化派生表

    • Batched Key Access (BKA) 连接算法现在可用,它使用对连接表的索引访问和连接缓冲区。BKA 算法支持内连接和外连接操作,包括嵌套外连接。BKA 的好处包括由于更有效的表扫描而提高了连接性能。

      两个标志已添加到 optimizer_switch系统变量(block_nested_loopbatched_key_access)。这些标志控制优化器如何使用 Block Nested-Loop 和 Batched Key Access 连接算法。以前, optimizer_join_cache_level系统变量用于连接缓冲区控制;此变量已被删除。

      有关详细信息,请参阅 阻止嵌套循环和批量密钥访问联接

    • 优化器现在具有跟踪功能。这将对优化器开发人员以及针对优化器提交错误并希望提供更多信息以帮助解决错误的用户有用。该接口由一组 系统变量和 表格提供,但随时可能更改。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器optimizer_trace_xxxINFORMATION_SCHEMA.OPTIMIZER_TRACE

    (错误#44802、错误#11753371、错误#14295、错误#11745379、错误#27975、错误#11746677)

性能模式注释

  • Performance Schema 添加了以下内容:

    • 性能模式现在使用阶段和语句。阶段是语句执行过程中的步骤,例如解析语句、打开表或执行filesort操作。阶段对应于表中显示的 SHOW PROCESSLIST或可见 的线程状态INFORMATION_SCHEMA.PROCESSLIST 。当状态值改变时,阶段开始和结束。

      在事件层次结构中,等待事件嵌套在阶段事件中,阶段事件嵌套在语句事件中。为了在等待事件表(例如 )中反映这种嵌套 events_waits_current,该 NESTING_EVENT_ID列现在可以是 non-NULL以指示 EVENT_ID嵌套事件的事件的值,并且 NESTING_EVENT_TYPE是指示嵌套事件类型的新列。

      setup_instruments表现在包含名称以 stage和开头的工具statement。对应于这些工具,该 setup_timers表现在包含具有NAME值的 行stagestatement 指示阶段和语句事件计时的单位。每个的默认单位是NANOSECOND

      这些新表存储阶段和语句事件:

      该表现在setup_consumers包含名称与这些表名称相对应的消费者值。这些消费者可用于过滤阶段和语句事件的集合。

      还有提供聚合阶段和语句信息的汇总表。

      应用程序开发人员可以使用语句检测来详细查看应用程序生成的语句,以及服务器如何执行这些语句。舞台乐器可用于专注于陈述的特定部分。此信息可能有助于更改应用程序对数据库发出查询的方式、最小化服务器上​​的应用程序占用空间以及提高应用程序性能和可伸缩性。

      有关详细信息,请参阅 性能架构阶段事件表阶段汇总表性能架构语句事件表语句汇总表

    • 性能模式现在提供有关服务器连接的统计信息。当客户端连接时,它会使用特定的用户名和特定的主机进行连接。Performance Schema 跟踪每个帐户(用户名加主机名)的连接,并使用这些表分别跟踪每个用户名和每个主机名:

      • accounts:每个客户帐户的连接统计

      • hosts:每个客户端主机名的连接统计

      • users:每个客户端用户名的连接统计

      还有提供聚合连接信息的汇总表。

      为每个应用程序定义一个专用帐户是一种很好的安全做法,这样应用程序就被赋予了在其运行期间仅执行所需操作的权限。这也有助于监控,因为应用程序开发人员可以使用连接表中的信息在针对给定数据库服务器部署多个应用程序时查看每个应用程序的负载统计信息。

      有关详细信息,请参阅 性能模式连接表

    • 以前,该setup_objects表只能用于通过包含来指定要检测的对象。无法显式禁用对象检测,例如为除特定数据库中的表之外的所有表配置检测。现在该 setup_objects表包含一个 ENABLED列,指示是否检测匹配对象。此功能提高了 setup_objects表的可用性,因为它允许排除模式。

      默认表内容现在包括一行,该行禁用数据库中表的检测mysql ,这是对以前默认对象检测的更改。选择此更改是假设最终用户想要检测应用程序对象,而不是内部服务器表。该更改减少了默认的 Performance Schema 开销,因为 I/O 和表上的锁 mysql未被检测。

      该表还包括禁用对INFORMATION_SCHEMAperformance_schema数据库中的表进行检测的行。这不是行为上的变化,因为这些表以前没有检测过,但这些行使完整的对象检测默认值明确。

    • 性能模式现在检测套接字。这使得能够监视进出服务器的网络通信。收集的信息包括网络活动,例如套接字实例、套接字操作以及传输和接收的字节数。

      setup_instruments表现在包含名称以 开头的工具 wait/io/socket。当套接字等待来自客户端的下一个请求时,还有一个 idle用于空闲事件的工具。对应于后一种工具,该 setup_timers表现在包含一行,其NAMEidle指示空闲事件计时的单位。默认单位是 MICROSECOND.

      这些新表包含套接字信息:

      • socket_instances:与 MySQL 服务器的活动连接的实时快照

      • socket_summary_by_instancewait/io/socket/*:仪器为每个套接字实例为所有套接字 I/O 操作 生成的聚合计时器和字节计数统计信息

      • socket_summary_by_event_namewait/io/socket/*:仪器为每个套接字仪器 生成的所有套接字 I/O 操作的聚合计时器和字节计数统计信息

      应用程序开发人员,尤其是那些开发基于 Web 的应用程序的开发人员,可以使用套接字表中的信息来评估直接归因于其应用程序生成的查询的网络流量。这在开发用于大规模实施的应用程序期间特别有用。

      有关详细信息,请参阅 socket_instances 表套接字摘要表

    由于这些更改,Opening table线程状态已被删除。状态保持不变, Opening tables可以改用。(请参阅一般线程状态。)

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

安全说明

  • 对于使用该 CREATE TEMPORARY TABLE语句创建的临时表,特权模型已更改。

    以前,该CREATE TEMPORARY TABLES权限使用户能够使用该 CREATE TEMPORARY TABLE语句创建临时表。但是,对临时表的其他操作(例如INSERTUPDATESELECT)需要对包含临时表的数据库或同名的非临时表的这些操作具有额外的权限。

    为了将临时表和非临时表的权限分开,针对这种情况的一种常见解决方法是创建一个专用于使用临时表的数据库。然后对于该数据库,用户可以被授予 CREATE TEMPORARY TABLES 特权,以及该用户完成的临时表操作所需的任何其他特权。

    现在,该CREATE TEMPORARY TABLES 权限使用户能够像以前一样使用创建临时表 CREATE TEMPORARY TABLE。但是,在会话创建临时表后,服务器不会对该表执行进一步的权限检查。创建会话可以对表执行任何操作,例如DROP TABLEINSERTUPDATESELECT

    此更改的一个含义是即使当前用户没有创建它们的权限,会话也可以操作其临时表。假设当前用户没有 CREATE TEMPORARY TABLES权限但能够执行DEFINER-context 存储过程,该存储过程以拥有权限的用户的权限执行CREATE TEMPORARY TABLES 并创建临时表。在过程执行时,会话使用定义用户的权限。过程返回后,有效权限恢复为当前用户的权限,该用户仍然可以查看临时表并对其执行任何操作。(漏洞 #27480,漏洞 #11746602)

  • 语句日志记录已被修改,因此密码不会以纯文本形式出现在以下语句中:

    CREATE USER ... IDENTIFIED BY ...
    GRANT ... IDENTIFIED BY ...
    SET PASSWORD ...

    对于一般查询日志、慢速查询日志和二进制日志,这些语句中的密码被重写,不会按字面意思出现在语句文本中。重写不适用于其他语句。

    对于一般的查询日志,可以通过 --log-raw选项启动服务器来抑制密码重写。此选项可用于诊断目的,以查看服务器接收到的语句的确切文本,但出于安全原因,不建议在生产中使用。

    您会注意到的一个变化是无法解析的语句(例如,由于语法错误)不再写入一般查询日志,因为无法知道它们是无密码的。需要记录所有语句(包括有错误的语句)的用例应使用该 --log-raw选项,请记住,这也会绕过密码写入。

添加或更改的功能

  • Incompatible Change: 在审计插件接口中, event_class成员被从 mysql_event_general结构中删除,通知函数的调用顺序被改变。最初,第二个参数是指向事件结构的指针。该函数现在接收此信息作为两个参数:一个事件类号和一个指向事件的指针。对应于这些变化,MYSQL_AUDIT_INTERFACE_VERSION 被增加到0x0300.

    目录中的plugin_audit.h头文件和 NULL_AUDIT示例插件 plugin/audit_null根据这些更改进行了修改。请参阅编写审计插件

  • 重要变更;复制: 语句RESET SLAVE已用ALL关键字扩展。除了删除master.inforelay-log.info和所有中继日志文件外, RESET SLAVE ALL还清除执行 . 后保存在内存中的所有连接信息RESET SLAVE。(错误#11809016,错误#11763210)

  • 表现; InnoDB: 在关闭时,MySQL 可以记录缓存在 InnoDB 缓冲池中的页面,然后在重新启动时重新加载这些相同的页面。这种技术可以帮助在重启后快速达到一致的吞吐量,而无需漫长的预热期。此预加载功能使用紧凑的保存格式和后台 I/O 来最大限度地减少 MySQL 服务器的开销。基本的转储/恢复功能是通过配置选项 innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup。相关配置选项,例如 innodb_buffer_pool_dump_nowinnodb_buffer_pool_load_now 为高级用户提供额外的灵活性来为不同的工作负载配置 MySQL 服务器。有关详细信息,请参阅 保存和恢复缓冲池状态。(错误#11765816,错误#58819)

  • 表现; InnoDB:innodb_file_per_table启用时,每个 表InnoDB都在其自己的表空间文件(.ibd 文件)中创建。随着表内数据的增长, .ibd文件也会扩展,这是一种 I/O 操作,可能会对包含许多InnoDB表的繁忙系统造成瓶颈。对于 InnoDB存储在 系统表空间内的表,扩展操作发生的频率较低,因为一个表中释放的空间DELETETRUNCATE 操作可以被另一个表重用。

    MySQL 5.6 改进了扩展 InnoDB表空间文件(.ibdfiles)的并发性,可以同时扩展多个 .ibd文件,而不会阻塞其他线程执行的读写操作。(错误#11763692,错误#56433)

  • 表现; InnoDB:InnoDB您可以 通过指定配置选项 来提高校验和功能的效率innodb_checksum_algorithm=crc32,这会打开更快的校验和算法。此选项替换innodb_checksums选项。使用旧校验和算法(选项值 innodb)写入的数据完全向上兼容;使用新校验和算法(选项值crc32)修改的表空间不能降级到不支持该 innodb_checksum_algorithm选项的早期版本的 MySQL。(缺陷 #11757757,缺陷 #49852)

  • 表现; InnoDB: 检测 事务中死锁的 已被修改为使用固定大小的工作区而不是递归算法。结果,所产生的检测操作更快。您无需执行任何操作即可利用此增强功能。 InnoDB

    在新旧检测机制下,您可能会遇到search too deep不是真正死锁的错误,但需要您以与死锁相同的方式重试事务。

  • 表现; InnoDB: 线程InnoDB调度代码已得到增强,可以更好地处理 16 个以上的线程。在可能的情况下,使用原子指令。您可以通过将配置选项设置 innodb_thread_concurrency为非零值并调整 的值来 innodb_adaptive_max_sleep_delay。有关详细信息,请参阅为 InnoDB 配置线程并发

  • 表现; InnoDB: 工作继续 主线程 卸载刷新操作, 而是在线程中执行它们。缓冲池刷新算法的最新更改 可以提高某些 I/O 绑定工作负载的性能,特别是在具有多个缓冲池实例的配置中。您可以通过调整和 配置选项的设置来控制此功能 要找到最佳设置,请使用Adaptive Hash IndexDoublewrite Buffer测试上述设置的每个组合 InnoDBpage_cleanerinnodb_lru_scan_depthinnodb_flush_neighbors打开和关闭。有关详细信息, 请参阅 配置缓冲池刷新。

  • 表现; InnoDB: 此功能可选择将InnoDB 撤消日志系统表空间移出 到一个或多个单独 的表空间中。撤消日志的 I/O 模式使这些新表空间成为迁移到 SSD 存储的良好候选者,同时将系统表空间保留在硬盘存储上。此功能由配置选项 innodb_undo_directoryinnodb_undo_tablespacesinnodb_undo_logs(以前称为 innodb_rollback_segments)控制。用户不能删除为保存 InnoDB撤消日志而创建的单独表空间,或这些表空间内的各个

    以这种方式配置的 MySQL 实例不向下兼容;旧版本的 MySQL 无法访问驻留在它们自己的表空间中的撤消日志。

    有关详细信息,请参阅撤消表空间

  • InnoDB: InnoDB现在允许在创建二级索引时进行并发读取。(漏洞 #11853126)

    参考资料:另请参阅:Bug #11751388、Bug #11784056、Bug #11815600。

  • InnoDB: 重做InnoDB 日志文件的最大组合大小从 4GB 增加到 512GB。innodb_log_file_size 您可以通过该选项 指定较大的值

    没有特殊的升级过程或文件格式可以利用此增强功能。记录额外大小信息的字节已在 InnoDB 系统表空间中保留。InnoDB 但是,如果您开发与逻辑序列号 (LSN)值交互的应用程序 ,请更改您的代码以使用有保证的 64 位变量来存储和比较 LSN 值,而不是 32 位变量。(缺陷 #11765780,缺陷 #58779)

  • InnoDB: InnoDB现在可以创建collat​​ion ID大于255的字符集的表。例如,InnoDB现在可以创建下表,而以前的collat​​ion ID 359超出了支持的范围InnoDB

    mysql> show collation like 'ucs2_vn_ci';
    +------------+---------+-----+---------+----------+---------+
    | Collation  | Charset | Id  | Default | Compiled | Sortlen |
    +------------+---------+-----+---------+----------+---------+
    | ucs2_vn_ci | ucs2    | 359 |         |          |       8 |
    +------------+---------+-----+---------+----------+---------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE two_byte_collation (c1 char(1) CHARACTER SET UCS2 COLLATE UCS2_VN_CI)
        -> ENGINE = INNODB;
    Query OK, 0 rows affected (0.16 sec)

    此功能打开了InnoDB用于一系列用户定义字符集的表。MySQL 预定义字符集以前限制为最多 255 个,现在取消了该限制。有关详细信息,请参阅 选择排序规则 ID

  • 复制: MySQL 5.6.1 向 的输出的 Last_IO_ErrorLast_SQL_Error列中 SHOW SLAVE STATUS。现在这些时间戳显示在它们自己的单独列中,分别命名为 Last_IO_Error_TimestampLast_SQL_Error_Timestamp。(缺陷 #11765599,缺陷 #58584)

    参考资料:另请参阅:Bug #43535、Bug #11752361。

  • 复制: BEGINCOMMITROLLBACK 语句现在与语句一起缓存,而不是在缓存刷新到二进制日志时写入。此更改不会影响 DDL 语句(写入语句缓存,然后立即刷新)或事件事件(与 Rotate 事件一起,仍直接写入二进制日志)。

    参考资料:另请参阅:Bug #57275、Bug #11764443。

  • Microsoft Windows: Windows 安装程序现在在 MySQL 菜单中创建一个名为MySQL command line client - Unicode. 此项调用带有属性集的mysql客户端,以使用 Unicode 通过控制台与 MySQL 服务器通信。它将 --default-character-set=utf8 选项传递给mysql,并将字体设置为与 Lucida ConsoleUnicode 兼容的字体。请参阅 Windows 上的 Unicode 支持

  • 接下来EXPLAIN EXTENDED,对 显示的转换查询进行了更改 SHOW WARNINGS。现在每个 SELECT部分前面都有id来自关联 EXPLAIN输出行的值。这使得查看这些行与转换查询的部分之间的对应关系变得更加容易。例如,这个查询:

    EXPLAIN EXTENDED SELECT 36 FROM DUAL

    结果是:

    /* select#1 */ select 36 from dual

    这个查询:

    EXPLAIN EXTENDED SELECT a FROM t
    WHERE a IN (SELECT b FROM u UNION SELECT c from v)

    结果是:

    /* select#1 */ select a from t where a in (/* select#2 */
    select b from u union /* select#3 */ select c from v);

    (漏洞 #13035597)

  • 消除了几个内存分配调用,从而提高了性能。(漏洞 #12552221)

  • Linux 上的CMake配置支持现在提供一个布尔ENABLE_GCOV 选项来控制是否包含对 gcov的支持。(漏洞 #12549572)

  • 以前,二进制日志和中继日志的性能模式检测使用这些工具:

    wait/io/file/sql/binlog
    wait/io/file/sql/binlog_index
    wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index
    wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond

    现在中继日志的检测使用这些工具,这使得区分二进制日志和中继日志事件成为可能:

    wait/io/file/sql/relaylog
    wait/io/file/sql/relaylog_index
    wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index
    wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond

    (错误#59658,错误#11766528)

  • 一个新的服务器选项 --plugin-load-add补充了该--plugin-load选项。 --plugin-load-add将一个或多个插件添加到要在启动时加载的插件集中。参数格式与 for 相同 --plugin-load--plugin-load-add可用于避免将大量插件指定为单个冗长笨拙的--plugin-load参数。

    --plugin-load-add可以在没有 的情况下给出--plugin-load,但它的任何实例--plugin-load-add 出现在 之前 --plugin-load。没有效果,因为--plugin-load重置了要加载的插件集。

    此更改会影响mysqld --verbose --helpplugin-load的输出,因为不再打印for 的值 。(错误#59026,错误#11766001)

  • 当使用该 --auto-generate-sql选项调用时, mysqlslap会在测试运行结束时丢弃使用该--create-schema选项指定的模式,这可能是用户未预料到的。mysqlslap现在有一个 --no-drop选项可以防止在测试运行期间创建的任何模式被删除。(错误#58090,错误#11765157)

  • Ssl_server_not_before服务器现在通过和 Ssl_server_not_afterstatus 变量 公开 SSL 证书到期日期。这两个变量的值均采用 ANSI 时间格式(例如,Sep 12 16:22:06 2013 GMT),或者对于非 SSL 连接为空。(错误#57648,错误#11764778)

  • 以前,除非定义包含显式 选项,否则使用默认存储引擎TEMPORARY创建的表 。(默认引擎是 系统变量的值。)从MySQL 5.5.5开始,当默认存储引擎从非事务 引擎改为事务 引擎时,表产生了事务处理的开销。 CREATE TEMPORARY TABLESENGINEdefault_storage_engineMyISAMInnoDBTEMPORARY

    为了允许 TEMPORARY独立于永久表的默认引擎设置表的默认存储引擎,服务器现在支持default_tmp_storage_engine 系统变量。例如,要 TEMPORARY默认将表创建为非事务表,请使用 --default_tmp_storage_engine=MyISAM. 表的存储引擎仍然可以通过在表定义中TEMPORARY包含一个选项来单独指定 。ENGINE(缺陷 #49232,缺陷 #11757216)

  • 以前,对于链接到 OpenSSL 的 MySQL 二进制文件,如果提供给 MySQL 服务器或 MySQL 客户端程序(使用该--ssl-key选项)的 SSL 密钥文件受密码保护,程序将提示用户输入密码。现在对于链接到 yaSSL 的 MySQL 二进制文件也是如此。(错误#44559,错误#11753167)

  • mysql客户端程序现在有一个 --binary-mode选项可以帮助处理可能包含值的 mysqlbinlog输出。BLOB默认情况下, mysql\r\n语句字符串转换为\n并解释 \0为语句终止符。 --binary-mode禁用这两个功能。它还会禁用所有mysql命令charset, 但delimiter在非交互模式下(对于通过管道传输到mysql或使用命令加载 的输入source)。(错误#33048,错误#11747577)

  • 链接到 OpenSSL(但不是 yaSSL)的 MySQL 二进制文件现在支持 SSL 连接的证书撤销列表:

    • MySQL服务器支持 ssl_crlssl_crlpath系统变量,表示撤销列表文件或包含此类文件的目录。

    • 支持 SSL 的 MySQL 客户端程序识别 --ssl-crl--ssl-crlpath选项用于指定吊销列表文件或包含此类文件的目录。

    • CHANGE MASTER TO 语句具有MASTER_SSL_CRLMASTER_SSL_CRLPATH选项,用于指定从站连接到主站时要使用的吊销列表信息。该 mysql.slave_master_info文件还有两行来存储这些选项的值。该 SHOW SLAVE STATUS语句还有两列来显示这些选项的值。

      mysql_options()C API 函数具有MYSQL_OPT_SSL_CRLMYSQL_OPT_SSL_CRLPATH选项,用于指定当客户端连接到主服务器时要使用的吊销列表信息 。此外, mysql_options()现在还支持用于指定其他 SSL 参数的 MYSQL_OPT_SSL_CAMYSQL_OPT_SSL_CAPATHMYSQL_OPT_SSL_CERTMYSQL_OPT_SSL_CIPHER和 选项。MYSQL_OPT_SSL_KEY

    (错误#31224,错误#11747191)

  • mysqld现在有一个 --ignore-db-dir选项告诉服务器为了 SHOW DATABASES语句或 INFORMATION_SCHEMA表的目的忽略给定的名称。例如,如果 MySQL 配置将数据目录定位在 Unix 文件系统的根目录下,系统可能会在 lost+found那里创建一个服务器应该忽略的目录。使用 启动服务器 --ignore-db-dir=lost+found会导致该名称不被列为数据库。

    要指定多个名称,请多次使用此选项,每个名称一次。将选项指定为空值(即 as --ignore-db-dir=)会将目录列表重置为空列表。

    服务器启动时给出的此选项的实例用于设置ignore_db_dirs系统变量。

    除了由 命名的 --ignore-db-dir目录外,名称以句点开头的目录也会被忽略。(缺陷 #22615,缺陷 #11746029)

  • 客户端程序现在显示更多有关 SSL 错误的信息,以帮助诊断和调试连接问题。(错误#21287,错误#11745920)

  • 有些插件的运行方式是它们应该在服务器启动时加载,而不是在运行时加载或卸载。插件 API 现在支持以这种方式标记插件。该 st_mysql_plugin结构现在有一个 flags成员,可以将其设置为适用标志的 OR。该 PLUGIN_OPT_NO_INSTALL标志表示插件无法在运行时使用该 INSTALL PLUGIN语句加载。这适用于必须在服务器启动时使用该--plugin-load选项加载的插件。该PLUGIN_OPT_NO_UNINSTALL标志表示无法在运行时使用该 UNINSTALL PLUGIN语句卸载插件。

    新成员更改了界面,因此插件界面版本MYSQL_PLUGIN_INTERFACE_VERSION已从0x0102增加到 0x0103。需要访问新成员的插件必须重新编译以使用版本 0x0103或更高版本。

  • 一个新的实用程序mysql_plugin使 MySQL 管理员能够管理 MySQL 服务器加载哪些插件。--plugin-load它提供了在服务器启动时手动指定 选项或在运行时使用INSTALL PLUGINandUNINSTALL PLUGIN语句的替代方法。请参阅 mysql_plugin — 配置 MySQL 服务器插件

  • 以下项目已弃用,将在未来的 MySQL 版本中删除。在显示备选方案的地方,应更新应用程序以使用它们。

  • perror 的未记录--all选项 已被删除。此外, perror不再显示 BDB 错误代码的消息。

  • MySQL 现在包括对操作 IPv6 网络地址和验证 IPv4 和 IPv6 地址的支持:

    • INET6_ATON()和 函数在 IPv6 地址 的INET6_NTOA()字符串和数字形式之间进行转换。因为数字格式的 IPv6 地址需要比最大整数类型更多的字节,所以表示使用 VARBINARY数据类型。

    • 和函数测试字符串值是否表示有效的 IPv4 或 IPv6 地址IS_IPV4()IS_IPV6()和 函数测试数字格式值是否表示有效的 IPv4 兼容地址或 IPv4 映射地址 IS_IPV4_COMPAT()IS_IPV4_MAPPED()

    • INET_ATON()没有对操作 IPv4 地址的或 INET_NTOA()函数 进行任何更改 。

    IS_IPV4()INET_ATON()什么构成有效的 IPv4 地址更严格,因此它对于需要对无效值执行强检查的应用程序可能很有用。或者,使用 INET6_ATON()将 IPv4 地址转换为内部形式并检查 NULL结果(指示无效地址)。与检查 IPv4 地址 INET6_ATON()同样强大。IS_IPV4()

  • max_allowed_packet系统变量现在控制可以使用 mysql_stmt_send_long_data()C API 函数 发送的参数值 的最大大小。

  • 目录中的NULL_AUDIT示例插件 plugin/audit_null已更新以计算 MYSQL_AUDIT_CONNECTION_CLASS事件类中的事件实例。请参阅 编写审计插件

修正错误

  • 安全修复:修复 了一个安全漏洞。(漏洞 #59533)

  • 不兼容的更改: 对于套接字 I/O,对服务器使用超时警报的情况进行优化可能会导致使用套接字超时时速度变慢。

    此问题的修复导致多项更改:

    • 以前,超时应用于整个数据包级发送或接收操作。现在,超时适用于更精细级别的单个 I/O 操作,例如发送给定数据包的 10 个字节。

    • 对大于的数据包的处理 max_allowed_packet已经改变。以前,如果应用程序发送的数据包大于最大允许大小,或者如果服务器未能分配足够大的缓冲区来容纳数据包,服务器会一直读取数据包直到结束,然后跳过它并返回 ER_NET_PACKET_TOO_LARGE 错误。如果服务器无法处理如此大的数据包,现在服务器会断开会话。

    • MYSQL_OPT_CONNECT_TIMEOUT在 Windows 上,选项 的默认值 mysql_options()不再是 20 秒。现在默认是没有超时(无限),和其他平台一样。

    • 在 POSIX 系统上构建和运行 MySQL 现在需要支持poll()O_NONBLOCK. 这些应该在任何现代 POSIX 系统上可用。

    (错误#54790、错误#36225、错误#11762221、错误#51244、错误#11758972)

  • 不兼容的更改: 对于存在重复键值 mysql_affected_rows()的语句,C API 函数返回 3(而不是 2) INSERT ... ON DUPLICATE KEY UPDATE

    现在,如果该行作为新行插入,则每行的 affected-rows 值为 1,如果更新现有行,则为 2,如果现有行设置为其当前值,则为 0。如果 在连接到mysqldCLIENT_FOUND_ROWS时将标志 指定为,并且现有行设置为其当前值,则 affected-rows 值为 1(而不是 0)。(错误#46675,错误#11754979)mysql_real_connect()

  • 不兼容的更改: 修改了与日期相关的断言的处理。此更改的结果是,当将DATE()函数值作为参数传递时,多个函数会变得更加严格,并拒绝日期部分为零的不完整日期。这些功能受到影响: CONVERT_TZ(), DATE_ADD(), DATE_SUB(), DAYOFYEAR(), LAST_DAY(), TIMESTAMPDIFF(), TO_DAYS(), TO_SECONDS(), WEEK(), WEEKDAY(), WEEKOFYEAR(), YEARWEEK()

    后来确定不需要对 进行更严格的处理LAST_DAY(),这已恢复为允许 MySQL 5.6.5 中的零日部分。

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

  • 表现; InnoDB:此修复改进了表中列 的操作性能 ,其中 声明为大值但表中的实际字符串值很短。(漏洞 #12835650)VARCHAR(N)InnoDBN

  • 表现; InnoDB:InnoDB用于检测 MySQL 服务器是否空闲 的机制 在没有其他活动发生时通常发生的刷新操作导致速度下降。InnoDB如果有对缓冲池的未决读取请求,该机制现在认为服务器没有空闲 (缺陷 #11766123,缺陷 #59163)

  • 创新数据库;复制: 尝试更新一个 NULLInnoDB表的列(之前设置为 )导致从属服务器上的复制失败,无法在“ table中找到记录。

    笔记

    这个问题在 MySQL 5.6.6 中无意中重新引入,并在 MySQL 5.6.12 中再次修复。

    (缺陷 #11766865,缺陷 #60091)

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

  • InnoDB:表中 的DATA_LENGTHINFORMATION_SCHEMA.TABLES现在可以正确报告 InnoDB压缩表的表空间的磁盘大小。(漏洞 #12770537)

  • InnoDB:表 的失败CREATE INDEX操作 InnoDB可能导致一些内存被分配但没有被释放。此内存泄漏可能会影响使用ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED设置创建的表。(漏洞 #12699505)

  • InnoDB: 使用配置设置 innodb_file_per_table=1innodb_file_format=Barracuda,插入大于页面大小一半的列值,并将该列包含在二级索引中,可能会在更新该列值时导致崩溃。(漏洞 #12637786)

  • InnoDB: 支持InnoDB 持久统计功能的基础表已重命名并移入 mysql数据库。 innodb.table_stats成为 mysql.innodb_table_statsinnodb.index_stats成为 mysql.innodb_index_stats。(漏洞 #12604399)

  • InnoDB:InnoDB如果将非常重的 I/O 负载解释为服务器已挂起 15 分钟或更长时间, 服务器可能会停止此更改修复了测量InnoDB线程等待多长时间的逻辑,这在以前可能会产生误报。(错误#11877216、错误#11755413、错误#47183)

  • InnoDB: 使用设置lower_case_table_names=2,在服务器重启后,插入InnoDB外键约束覆盖的表可能会失败。(错误#11831040、错误#60196、错误#60909)

  • InnoDB: 如果 MySQL 服务器在创建 InnoDB表后立即崩溃,则在重启后尝试访问该表可能会导致另一次崩溃。如果服务器在InnoDB为表创建主索引之后但在索引定义被记录在 MySQL 元数据中之前停止,则可能会出现此问题。(缺陷 #11766824,缺陷 #60042)

  • InnoDB: 如果服务器在 XA 事务已准备好但尚未提交时崩溃,事务可能会在重启后保留在系统中,并导致随后的关闭挂起。(错误#11766513,错误#59641)

  • InnoDB:如果多个会话同时执行此类操作,则CREATE TABLEOPTIMIZE TABLEALTER TABLE或其他为表执行表复制的 DDL 操作 期间挂起InnoDB错误报告为:

    InnoDB: Error: semaphore wait has lasted > 600 seconds

    (缺陷 #11760042,缺陷 #52409)

  • InnoDB: 使用设置 lower_case_table_names=2,在服务器重启后,插入InnoDB外键约束覆盖的表可能会失败。这与 Bug #11831040 / Bug #60196 / Bug #60909 中的外键错误类似,但根本原因不同并且发生在 OS X 上。

  • 分区: 内部get_partition_set()函数没有考虑到NULL在某些情况下可能存在关键规范的可能性。(漏洞 #12380149)

  • 分区: 当执行行顺序检索索引合并时,分区处理程序使用分配给表的内存,而不是分配给查询的内存,导致表对象内存在表关闭之前不会被释放。(缺陷 #11766249,缺陷 #59316)

  • 分区: 尝试使用 ALTER TABLE ... EXCHANGE PARTITION未分区的表的(不存在的)分区交换视图导致服务器崩溃。(缺陷 #11766232,缺陷 #60039)

  • 分区: 即使未写入分区表的自动增量列也会被检查。在调试版本中,这可能会导致服务器崩溃。(错误#11765667,错误#58655)

  • 分区:出于分区修剪的目的, 该UNIX_TIMESTAMP()函数未被视为单调函数。(错误#11746819,错误#28928)

  • 分区: 先前针对具有多个分区的表上的语句性能不佳的修复程序 INSERT ON DUPLICATE KEY UPDATE导致用于从特定索引读取行的处理函数无法存储上次使用的分区的 ID。这导致某些语句因无法找到记录错误而失败。(错误#59297,错误#11766232)

    参考资料:这个问题是 Bug #52455 的回归。

  • 复制: 线程清理中的错误可能导致复制主机崩溃。(漏洞 #12578441)

  • 复制: 使用基于行的复制和属性提升或降级时(请参阅 具有不同数据类型的列的复制BLOB),之后不会释放内部分配用于列转换的内存 (漏洞 #12558519)

  • 复制: 在重新创建丢失的主信息存储库时可能会发生内存泄漏,因为在重新创建存储库时重新创建了一个用于引用存储库的新 I/O 缓存,但之前的缓存从未被删除. (漏洞 #12557307)

  • 复制: 当用户线程和 SQL 线程在其值被安全设置之前都试图读取相同的内存时,可能会在用户线程和 SQL 线程之间发生竞争条件。此问题现已得到纠正。

    此外,与创建和附加日志事件相关的内部函数在存储数据时使用函数的本地内存,这些内存在函数返回时被释放。作为此问题修复的一部分, 的输出 SHOW SLAVE STATUS已被修改,因此它不再引用伴随状态消息中的文件或文件名,而是包含消息之一Making temporary file (append) before replaying LOAD DATA INFILEMaking temporary file (create) before replaying LOAD DATA INFILE. (漏洞 #12416611)

  • 复制:Ssl_verify_server_cert表中列 的名称mysql.slave_master_info被错误拼写为Ssl_verify_servert_cert。(缺陷 #12407446,缺陷 #60988)

  • 复制: 当 and 调用 mysqlbinlog时(二进制日志中的一个点在格式描述日志事件之后),生成了此处所示类型的虚假错误: --base64-output=decode-row--start-position=pospos

    malformed binlog: it does not contain any Format_description_log_event...

    但是,由于不打印格式描述日志事件并没有什么不安全的地方,因此在这种情况下错误已被删除。(漏洞 #12354268)

  • Replication: 一个失败的CREATE USER语句被错误地写入了二进制日志。(缺陷 #11827392,缺陷 #60082)

  • 复制: 不再可能在复制运行时mysql.slave_master_infomysql.slave_relay_log_info这意味着,要使复制崩溃安全,您必须确保这两个表在开始复制之前都使用事务存储引擎。

    有关详细信息,请参阅中继日志和复制元数据存储库用于将副本状态记录到表的选项。(错误#11765887,错误#58897)

  • 复制: 事务被写入二进制日志,即使它没有更新任何非事务表。(错误#11763471,错误#56184)

    参考资料:另请参阅:Bug #11763126、Bug #55789。

  • 复制: 使用该 选项的mysqlbinlog--raw在MySQL Server 5.0.3 及更早版本的二进制日志中无法正常运行。(缺陷 #11763265,缺陷 #55956)

  • 复制: 在从服务器上重试事务可以将额外的数据插入到非事务表中。(缺陷 #11763126,缺陷 #55789)

    参考资料:另请参阅:Bug #11763471、Bug #56184。

  • 复制: 几个复制错误消息的文本中出现了印刷错误。(position一词被错误拼写为postion。)(错误#11762616,错误#55229)

  • 复制: 从 SQL 线程中的临时死锁可能导致在尝试获取锁时发现不必要的死锁;尝试重新启动要在从站上记录的事务错误消息。

    现在在这种情况下,只会记录警告,除非 slave_transaction_retries给定交易的此类警告数量已超过。(缺陷 #11748510,缺陷 #36524)

  • 复制: 当从服务器请求一个主服务器上不存在的二进制日志文件时,从服务器继续请求该文件。这导致从站的错误日志被来自主站的低级 EE_FILENOTFOUND错误(错误代码 29)淹没。(漏洞 #11745939,漏洞 #21437)

  • 复制: 如果LOAD DATA 语句(使用基于语句的复制进行复制)具有一个SET 子句,则使用主要用于为语句生成输出的方法 (Item::print()) 重新生成名称-值对,例如 EXPLAIN EXTENDED, 并且不能依赖它返回有效的 SQL。在某些情况下,这可能会导致从站崩溃。

    为了解决这个问题,服务器现在以用户提供的原始形式命名每个值,并使用它来创建 LOAD DATA语句以进行基于语句的复制。(缺陷 #60580,缺陷 #11902767)

    参考资料:另请参阅:Bug #34283、Bug #11752526、Bug #43746。

  • 复制: 错误 1590 (ER_SLAVE_INCIDENT) 导致从站停止,即使它是用 启动的 --slave-skip-errors=1590。(错误#59889、错误#11768580、错误#11799671)

  • 复制:--server-id选项与mysqlbinlog一起使用可能会导致格式描述日志事件从二进制日志中过滤掉,从而使mysqlbinlog无法读取日志的其余部分。现在,总是读取此类事件而不考虑此选项的值。

    作为此问题修复的一部分, mysqlbinlog现在还读取轮换日志事件,而不考虑 --server-id. (错误#59530,错误#11766427)

  • 复制: 失败的DROP DATABASE语句可能会破坏基于语句的复制。(错误#58381,错误#11765416)

  • 复制: 处理损坏的表映射事件可能会导致服务器崩溃。如果事件将不同的表映射到相同的标识符,这种情况尤其可能发生,例如由于错误 #56226 可能发生的情况。

    现在,在应用表映射事件之前,服务器会检查表是否已经使用不同的设置进行映射,如果是,则会引发错误并停止从属 SQL 线程。如果它已使用相同的设置映射,或者如果表设置为被过滤规则忽略,则行为没有变化:事件被跳过并且不检查 ID。(错误#44360,错误#11753004)

    参考资料:另请参阅:Bug #56226、Bug #11763509。

  • OS X: 在 OS X 10.7 (Lion) 上编译失败并出现警告:( Implicit declaration of function 'pthread_init' 缺陷 #12779790)

  • Microsoft Windows: 添加对 Windows 身份验证的支持以 libmysqlclient引入对系统 Secur32 库的链接依赖性。Microsoft Visual C++ 链接信息现在会自动拉入此库。(漏洞 #12612143)

  • Microsoft Windows: 在 Windows 上,如果没有可用的 DNS 服务器,服务器会拒绝客户端连接。(漏洞 #12325375)

  • Microsoft Windows: 在 Windows 上,authentication_string最近添加到mysql.user表中的列导致配置向导失败。(错误#59038,错误#11766011)

  • 性能模式导致了 LOCK_open. (漏洞 #12993572)

  • mysqld_safe忽略文件plugin_dir指定的 任何值 my.cnf(漏洞 #12925024)

  • INFORMATION_SCHEMA元数据锁定子系统为仅通过打开.frm或 文件处理的查询 增加了太多开销, .TRG并且必须扫描许多表。例如,SELECT COUNT(*) FROM INFORMATION_SCHEMA.TRIGGERS受到影响。(漏洞 #12828477)

  • 具有嵌套连接的子查询的结果ANY可能缺少行。(漏洞 #12795555)

  • 在禁用或未编译的情况下, set_thd_proc_info()不必要地检查文件名长度。(漏洞 #12756017)

    参考资料:这个问题是 Bug #59273 的回归。

  • 对于gcc 4.6 或更高版本 ,在启用维护者模式的情况下编译服务器失败 。(漏洞 #12727287)

  • 对于准备好的语句,OK如果准备由于被杀死而失败,则可以将 发送给客户端。(漏洞 #12661349)

  • 更正了一些 Valgrind 警告:

    (错误#12634989,错误#59851,错误#11766684)

  • 对于调试版本,如果类型为 ,则字段类型检查会引发断言MYSQL_TYPE_NULL。(漏洞 #12620084)

  • 启用索引条件下推后,可能会因无效的范围结束值而发生崩溃。(漏洞 #12601961)

  • 空字符串的选项解析代码泄漏了内存。(漏洞 #12589928)

  • INSERT DELAYED在启用二进制日志记录的情况下使用 时,服务器可能无法释放分配的内存 。(漏洞 #12538873)

  • Bug #11792200 添加的ADBUG_ASSERT在提出断言时过于激进。(漏洞 #12537160)

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

  • 在某些情况下,分配给的内存 Query_tables_list::sroutines()未正确释放。(漏洞 #12429877)

  • 修复 Bug #11889186 后, MAKEDATE()年份部分大于 9999 的参数会引发断言。(漏洞 #12403504)

    参考资料:这个问题是 Bug #11889186 的回归。

  • 由于 NULL检查中缺少值, 可能会引发断言Item_func_round::fix_length_and_dec()。(漏洞#12392636)

  • 对具有 a 或 类型的 内部触发器的 分配 未得到正确处理,并产生了不正确的结果。(漏洞 #12362125)NEW.var_namevar_nameBLOBTEXT

  • 如果索引条件下推代码下推包含子查询的索引条件,则可以引发断言。(漏洞 #12355958)

  • XA COMMIT如果发现必须回滚当前的 XA 事务,则可能无法清除错误状态。因此,下一个 XA 事务在检查前一个事务的正确清理时可能会引发断言。(漏洞 #12352846)

  • 如果二进制日志用作事务协调器日志,则可以在两阶段提交期间引发断言。(漏洞 #12346411)

  • InnoDB可以将临时索引信息添加到INFORMATION_SCHEMA,这可以引发断言。(漏洞 #12340873)

  • mysql_list_fields()为视图的字符列返回不正确的字符集信息。(漏洞 #12337762)

  • 过于严格的断言可能会导致服务器崩溃。(漏洞 #12321461)

  • mysql_upgrade没有正确升级表的 authentication_stringmysql.user。(漏洞 #11936829)

  • 优化器有时会选择正向索引扫描,然后是文件排序来反转顺序,而不是以相反的顺序扫描索引。(漏洞 #11882131)

  • InnoDB以前,如果对具有聚簇主键的表进行多表更新会通过多个别名更新表,并执行可能会物理移动这些别名中的至少一个中的行的更新,则会 产生不适当的错误消息。现在错误信息是:( 错误#11882110)Primary key/partition key update is not permitted since the table is updated both as 'tbl_name1' and 'tbl_name2'

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

  • 启用索引条件下推后, STRAIGHT_JOIN对包含 NULL值的数据使用的查询可能会返回不正确的结果。(漏洞 #11873324)

  • InnoDBzlib在没有正确初始化的情况下调用了一些 函数。(漏洞 #11849231)

  • 大量除法可能会导致堆栈损坏。(漏洞 #11792200)

  • 更正了InnoDB 在错误日志中生成消息的条件,unlock row could not find a 3 mode lock on the record。这种情况可能发生在子查询和隔离级别FOR UPDATE下的子句的组合中。READ UNCOMMITTED该修复程序还通过包含导致此类消息的原始 SQL 语句来提高此类消息的可调试性。(缺陷 #11766322,缺陷 #59410)

  • 启用 Valgrind 后,InnoDB 信号量等待超时时间太短,可能会过期。(漏洞 #11765460)

  • CHECK TABLE并且 REPAIR TABLE未能找到MERGE缺少基础表或存储引擎错误的表的问题。仅针对第一个基础表报告了问题。(漏洞 #11754210)

  • (5 DIV 2)(5.0 DIV 2) 产生不同的结果(2 对 3),因为后一个表达式的结果在转换为整数之前未被截断。这与 MySQL 5.0 和 5.1 中的行为不同。现在两个表达式都产生 2。(Bug #61676,Bug #12711164)

  • 如果禁用分区支持,则服务器无法编译。(缺陷 #61625,缺陷 #12694147)

  • ALTER TABLE {MODIFY|CHANGE} ... FIRST如果表的新旧版本在列数据类型方面具有完全相同的结构,则除了重命名列之外什么都不做。结果,列名到列数据的映射不正确。ALTER TABLE DROP COLUMN ... ADD COLUMN对于旨在生成与旧版本具有完全相同结构的新版本表的语句,也会发生同样的事情 。(缺陷 #61493,缺陷 #12652385)

  • FLUSH TABLES WITH READ LOCK对需要预锁定的 for 语句 的元数据锁定处理 不当导致了两个问题:

    • 作为事务的一部分执行任何需要预锁定(即涉及存储函数或触发器)的数据更改语句都会在某种程度上减慢事务中的所有后续语句。随着时间的推移,定期涉及此类语句的事务中的性能会逐渐下降。

    • 执行任何需要预锁定的数据更改语句作为事务的一部分会阻止并发 FLUSH TABLES WITH READ LOCK 继续进行,直到事务结束而不是在特定语句结束时。

    (漏洞 #61401,漏洞 #12641342)

  • MySQL 5.5.11 中引入的问题导致非常旧的 (MySQL 4.0) 客户端无法连接到服务器。(缺陷 #61222,缺陷 #12563279)

  • Queries per second值 的小数部分 可能在 MySQL 状态输出中显示不正确(例如,在mysqladmin statusmysql STATUS 命令的输出中)。(缺陷 #61205,缺陷 #12565712)

  • mysql-log-rotate脚本已更新 ,因为它引用了已弃用的 MySQL 选项。(缺陷 #61038,缺陷 #12546842)

  • 用于CREATE EVENT IF NOT EXISTS已存在且已启用的事件会导致该事件的多个实例运行。(缺陷 #61005,缺陷 #12546938)

  • 如果语句以不匹配的引号结尾,服务器将接受该语句并将初始引号之后的任何内容解释为文本字符串。(缺陷 #60993,缺陷 #12546960)

  • LOAD DATA错误地解析了在文件系统中上升超过三个级别的相对数据文件路径名,因此无法找到该文件。(漏洞 #60987,漏洞 #12403662)

  • 修复了移位计数大于类型宽度 编译警告。(缺陷 #60908,缺陷 #12402772)

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

  • Performance Schema 表的表 I/O table_io_waits_summary_by_index_usage 被计为未使用索引 UPDATEDELETE语句,即使使用了索引也是如此。(缺陷 #60905,缺陷 #12370950)

  • 从头文件中删除了内部客户端宏引用 client_plugin.h。此引用使文件无法使用。(缺陷 #60746,缺陷 #12325444)

  • 比较DATETIME存储的程序变量并在设置为时 NOW() 导致非法混合排序规则错误。(缺陷 #60625,缺陷 #11926811)character_set_connectionutf8

  • 从定义中包含 HAVING子句的视图中进行选择失败并出现错误:

    1356: View '...' references invalid table(s) or column(s)
    or function(s) or definer/invoker of view lack rights to use them

    (缺陷 #60295,缺陷 #11829681)

  • CREATE TABLE语法允许指定一个STORAGE {DEFAULT|DISK|MEMORY}选项。但是,此值未写入.frm文件,因此表的后续操作 CREATE TABLE ... LIKE不包含该选项。

    此外,ALTER TABLE具有表空间的表错误地销毁了表空间。(错误#60111、错误#11766883、错误#34047、错误#11747789)

  • mysql_load_plugin()C API 函数没有清除之前的错误 。(缺陷 #60075,缺陷 #11766854)

  • 对于某些存储过程的重复调用,服务器消耗了直到连接终止才释放的内存。(缺陷 #60025,缺陷 #11848763)

  • 允许 max_allowed_packet设置的服务器低于net_buffer_length,这没有意义,因为 max_allowed_packet是值的上限net_buffer_length 。现在出现警告,值保持不变。(错误#59959,错误#11766769)

  • 服务器没有检查 XA 语句的某些无效的乱序序列,并且这些序列引发了断言。(错误#59936、错误#11766752、错误#12348348)

  • 索引条件下推代码访问了未初始化的变量。(错误#59843,错误#11766678)

  • 对于未知用户,本机密码插件错误地报告没有指定密码,即使有。(错误#59792,错误#11766641)

  • SELECT DISTINCTWHERE子句中使用确定性存储函数可能会产生不正确的结果。(错误#59736,错误#11766594)

  • 设置optimizer_join_cache_level为 3 或更大会引发某些查询的断言。(错误#59651,错误#11766522)

  • 以前,保存字节数的性能模式表列是BIGINT UNSIGNED. 这些已更改为 BIGINT(已签名)。这使得执行计算列之间差异的计算变得更加容易。(错误#59631,错误#11766504)

  • 缺少对象的变量初始化 Item_func_set_user_var可能会引发断言。(错误#59527,错误#11766424)

  • 对于某些查询,优化器对同一个索引执行了太多次范围分析。(错误#59415,错误#11766327)

  • 随着从 GNU autotools 到 CMake的转换以配置 MySQL, USE_SYMDIR预处理器符号被省略了。这导致符号链接失败(在 使用符号链接中描述)。(缺陷 #59408,缺陷 #11766320)

  • 的临时结果表中可能会使用 不正确max_length的 values 值,从而导致不正确的结果。(错误#59343,错误#11766270)YEARUNION

  • Item_func_in::fix_length_and_dec()中,更正了针对未初始化值的 Valgrind 警告。(缺陷 #59270,缺陷 #11766212)

  • MySQL 程序选项的无效路径名参数 --defaults-extra-file导致程序崩溃。(错误#59234,错误#11766184)

  • Item_func_month::val_str()中,更正了 Valgrind 对太晚NULL值检查的警告。(错误#59166,错误#11766126)

  • Item::get_date中,针对缺失NULL值检查的 Valgrind 警告已得到纠正。(错误#59164,错误#11766124)

  • extract_date_time()中,针对缺少字符串结尾检查的 Valgrind 警告已得到纠正。(错误#59151,错误#11766112)

  • 有些表即使在 setup_objects表中列出,也没有被性能模式检测。(缺陷 #59150,缺陷 #11766111)

  • 在字符串上下文中,MIN()and MAX()函数没有考虑BIGINT UNSIGNED 参数的无符号性。(错误#59132,错误#11766094)

  • Item_func::val_decimal中,针对缺失NULL值检查的 Valgrind 警告已得到纠正。(缺陷 #59125,缺陷 #11766087)

  • ROUND()计算中,纠正了未初始化内存的 Valgrind 警告。(错误#58937,错误#11765923)

    参考资料:这个问题是 Bug #33143 的回归。

  • 优化器在对两个条件进行 OR 运算时创建的范围可能不正确,从而导致不正确的查询结果。(错误#58834,错误#11765831)

  • 更正了将索引值与未初始化字段进行比较所导致的 Valgrind 警告。(错误#58705,错误#11765713)

  • condition AND TRUE 作为优化or 的副作用 condition OR FALSE,某些子查询的 MySQL 忘记了需要读取条件使用的列,这在调试版本中引发了断言。(错误#58690,错误#11765699)

  • CREATE TRIGGER并且 DROP TRIGGER可以更改存储例程的预锁定列表,但例程缓存未检测到此类更改,导致例程执行时使用不准确的锁定列表。(错误#58674,错误#11765684)

  • Item_func_str_to_date::val_str中,更正了针对未初始化变量的 Valgrind 警告。(错误#58154,错误#11765216)

  • 的代码PROCEDURE ANALYSE()缺少一条DBUG_RETURN语句,这可能会导致调试版本中的服务器崩溃。(错误#58140,错误#11765202)

  • LOAD DATA错误可能会泄漏 I/O 缓存内存。(错误#58072,错误#11765141)

  • 对于LOAD DATA,多字节字符序列可能会被推到一个太小而无法容纳它们的堆栈上。(错误#58069,错误#11765139)

  • 嵌入式服务器在argc = 0. (错误#57931,错误#12561297)

  • Item_func_int_val::fix_num_length_and_dec() 由于几何函数的溢出, 可能会引发断言 。(错误#57900,错误#11764994)

  • 如果语句试图在存在活动 语句时升级元数据锁,则会引发断言。现在,如果语句尝试在这种情况下升级元数据锁,服务器 会向客户端返回一个错误。(错误#57649,错误#11764779)FLUSH TABLE tbl_list WITH READ LOCKER_TABLE_NOT_LOCKED_FOR_WRITE

  • 当不需要有序访问时,优化器有时会从存储引擎请求有序访问。(错误#57601,错误#11764737)

  • TEE如果嵌入式客户端发出命令 ( ) 并且包含该文件的目录不存在, 则它会中止而不是发出错误消息。这是因为调用了错误的错误处理程序。(错误#57491,错误#11764633)\T file_name

  • ALTER EVENT可以更改事件状态。(错误#57156,错误#11764334)

  • 对于子句中带有NOT IN子查询的外连接,返回WHERE的空左操作数与 NOT IN文字操作数的处理方式不同NULL。(错误#56881,错误#11764086)

  • 处于该状态的线程在或 waiting for table metadata中不可见 。(错误#56475,错误#11763728)performance_schema.THREADSSHOW PROFILE

  • 使用准备好的语句,服务器可以在表关闭后尝试发送结果集元数据。(错误#56115,错误#11763413)

  • 与一个会话的优化器结构关联的表对象在传递到另一个会话后可能会关闭,从而过早地结束第二个会话的表或索引扫描。(错误#56080,错误#11763382)

  • 在某些情况下,SHOW WARNINGS 当前一个语句失败时返回空结果。(错误#55847,错误#11763166)

  • 已处理的条件(错误或警告)可能会在语句末尾显示为未处理。(错误#55843,错误#11763162)

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

  • 在调试版本中, Field_new_decimal::store_value()容易出现缓冲区溢出。(错误#55436,错误#11762799)

  • 对于InnoDB表,在单个ALTER TABLE语句中删除和添加索引可能会失败。(错误#54927,错误#11762345)

  • 对于使用 SSL 连接的客户端, Ssl_cipher_list状态变量为空且未显示可能的密码类型。(错误#52596,错误#11760210)

  • mysql客户端有时无法正确关闭用户使用 Control+C终止 的会话。(错误#52515,错误#11760134)

  • CREATE TABLE ... LIKE对于MyISAM包含DATA DIRECTORYor INDEX DIRECTORYtable 选项的表定义失败,而不是像文档中那样创建一个省略了这些选项的表。(错误#52354,错误#11759990)

  • 某些极端情况下的空间操作可能会导致服务器崩溃:具有零点衬里的多边形;具有接触衬里的多边形。(错误#51979、错误#11759650、错误#47429、错误#11755628)

  • 尝试为不存在的存储过程授予EXECUTEALTER ROUTINE权限返回成功而不是错误。(错误#51401,错误#11759114)

  • 使用lower_case_table_names=2,解析由数据库名称限定的对象可能会失败。(错误#50924,错误#11758687)

  • CREATE TABLE没有 ENGINE选项在解析而不是执行时确定默认引擎。如果在存储程序中执行语句并且同时更改了默认引擎,这将导致不正确的结果。(错误#50614,错误#11758414)

  • 在 Linux 上,使用捆绑构建的mysqllibedit客户端没有读取 ~/.editrc. (缺陷 #49967,缺陷 #11757855)

  • 对于某些语句,例如 DESCRIBEor SHOW,包含太多列的视图会产生错误。(错误#49437,错误#11757397)

  • HAVING对于没有子句的查询, 优化器有时会错误地处理 ORDER BY子句。(错误#48916,错误#11756928)

  • PROCEDURE ANALYSE()可能会泄漏 NULL结果的内存,如果与LIMIT子句一起使用,可能会返回不正确的结果。(错误#48137,错误#11756242)

  • 使用数据库名称限定的名称加载存储例程和删除该数据库之间的竞争条件导致虚假错误消息:(The table mysql.proc is missing, corrupt, or contains bad data 错误#47870,错误#11756013)

  • 当用于升级表时,mysqlcheck(和 调用 mysqlcheck 的 mysql_upgrade 没有升级一些发现需要进行表修复的表。特别是,它未能升级InnoDB需要修复的表,使它们处于未升级状态。这是因为:

    • mysqlcheck --check-upgrade ---auto-repair 检查与当前版本的 MySQL 不兼容的表。它通过发出 CHECK TABLE ... FOR UPGRADE语句并检查结果来做到这一点。

    • 对于发现不兼容的任何表, mysqlcheck发出一条 REPAIR TABLE语句。但这对于 InnoDB不支持修复操作的存储引擎来说是失败的。因此,该表保持不变。

    CHECK TABLE ... FOR UPGRADE为解决此问题,对和mysqlcheck 进行了以下更改 。因为 mysql_upgrade调用 mysqlcheck,这些更改也解决了mysql_upgrade的问题。

    • CHECK TABLE ... FOR UPGRADE如果表需要修复但其存储引擎不支持,则返回不同的错误 REPAIR TABLE

      以前的:

      Error: ER_TABLE_NEEDS_UPGRADE
      Table upgrade required. Please do "REPAIR TABLE `tbl_name`" or
      dump/reload to fix it!

      现在:

      Error: ER_TABLE_NEEDS_REBUILD
      Table rebuild required. Please do "ALTER TABLE `tbl_name` FORCE" or
      dump/reload to fix it!
    • mysqlcheck识别出新错误并发出一条ALTER TABLE ... FORCE语句。的 FORCE选项 ALTER TABLE被识别但什么也没做;现在它已实现并充当重建表的 更改操作。

    (缺陷 #47205,缺陷 #11755431)

  • 在某些平台上,由Incorrect value: xxx for column yyy at row zzz产生的错误 LOAD DATA可能具有不正确的 值zzz。(错误#46895,错误#11755168)

  • 使用 RPM 包升级会重新创建 test数据库,这在 DBA 删除它时是不希望发生的。(错误#45415,错误#11753896)

  • 在 MySQL 5.1 及更高版本中,如果表具有使用 5.0 而不是 5.1 支持的语法的触发器,则该表将变得不可用。现在该表被标记为具有损坏的触发器。这些应该被删除并手动重新创建。(错误#45235,错误#11753738)

  • 在安装过程中尝试安装不存在的文件已得到纠正。(错误#43247,错误#11752142)

  • 一些状态变量在达到最大 32 位值后回滚到零。它们已更改为 64 位值。(错误#42698,错误#11751727)

  • SHOW EVENTS并不总是显示来自正确数据库的事件。(错误#41907,错误#11751148)

  • 对于具有许多eq_ref 连接的查询,优化器花费了过多的时间来制定执行计划。(错误#41740、错误#11751026、错误#58225、错误#11765274)

  • 在嵌入式服务器的 FreeBSD 64 位构建中,异常不会被阻止传播到嵌入式应用程序中。(缺陷 #38965,缺陷 #11749418)

  • 对于DISTINCT, 当 的参数是具有整数数据类型且声明的显示宽度窄于列中的值的列时, 返回不正确的结果 。(例如,如果 列包含 .)(缺陷 #4082)CONCAT(col_name,...)CONCAT()INT(1)1111