这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
-
复制: MySQL 复制现在支持多线程从属服务器并行执行来自不同数据库的主服务器的复制事件,这可以在满足某些条件时显着提高应用程序吞吐量。最佳情况是数据按数据库进行分区,并且给定数据库内的更新发生的顺序与它们在主数据库上发生的顺序相同。但是,不需要在不同数据库之间协调事务。
服务器系统变量(在此版本中
slave_parallel_workers
添加)设置用于并行执行复制事件的从属工作线程数。启用并行执行时,从属 SQL 线程充当从属工作线程的协调器,其中事务按数据库分布。这意味着从服务器上的工作线程可以处理给定数据库上的连续事务,而无需等待其他数据库上的更新完成。由于不同数据库上的事务在从服务器上的发生顺序可能与在主服务器上的顺序不同,因此检查最近执行的事务并不能保证来自主服务器的所有先前事务都已在从服务器上执行。这对使用多线程从站时的日志记录和恢复有影响。有关在从站上使用多线程时如何解释二进制日志记录信息的信息,请参阅 SHOW SLAVE STATUS 语句。
-
实施了这些查询优化器改进:
该
EXPLAIN
语句现在提供DELETE
、INSERT
、REPLACE
和UPDATE
语句的执行计划信息。以前,仅为 报表EXPLAIN
提供信息。SELECT
-
优化器更有效地处理
FROM
子句中的子查询(即派生表):-
子句中子查询的具体化
FROM
被推迟到查询执行期间需要它们的内容时,这提高了性能。物化的延迟甚至可以使优化器完全避免它。考虑一个将子句中子查询的结果连接FROM
到另一个表的查询:如果优化器首先处理另一个表并发现它没有返回任何行,则不需要进一步执行连接并且优化器不需要在全部。以前,
FROM
子句中的子查询是为EXPLAIN SELECT
语句具体化的。这导致部分SELECT
执行,即使目的EXPLAIN
是获取查询计划信息,而不是执行查询。这种具体化不再发生,因此EXPLAIN
此类查询速度更快。 在查询执行期间,优化器可能会向派生表添加索引以加速从中检索行。
有关详细信息,请参阅 优化派生表。
-
-
Batched Key Access (BKA) 连接算法现在可用,它使用对连接表的索引访问和连接缓冲区。BKA 算法支持内连接和外连接操作,包括嵌套外连接。BKA 的好处包括由于更有效的表扫描而提高了连接性能。
两个标志已添加到
optimizer_switch
系统变量(block_nested_loop
和batched_key_access
)。这些标志控制优化器如何使用 Block Nested-Loop 和 Batched Key Access 连接算法。以前,optimizer_join_cache_level
系统变量用于连接缓冲区控制;此变量已被删除。有关详细信息,请参阅 阻止嵌套循环和批量密钥访问联接。
优化器现在具有跟踪功能。这将对优化器开发人员以及针对优化器提交错误并希望提供更多信息以帮助解决错误的用户有用。该接口由一组 系统变量和 表格提供,但随时可能更改。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器。
optimizer_trace_
xxx
INFORMATION_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
值的 行stage
和statement
指示阶段和语句事件计时的单位。每个的默认单位是NANOSECOND
。这些新表存储阶段和语句事件:
events_stages_current
:现阶段活动events_stages_history
:每个线程的最新阶段事件events_stages_history_long
:最近的舞台活动整体events_statements_current
:当前语句事件events_statements_history
:每个线程的最新语句事件events_statements_history_long
:最近的声明事件整体
该表现在
setup_consumers
包含名称与这些表名称相对应的消费者值。这些消费者可用于过滤阶段和语句事件的集合。还有提供聚合阶段和语句信息的汇总表。
应用程序开发人员可以使用语句检测来详细查看应用程序生成的语句,以及服务器如何执行这些语句。舞台乐器可用于专注于陈述的特定部分。此信息可能有助于更改应用程序对数据库发出查询的方式、最小化服务器上的应用程序占用空间以及提高应用程序性能和可伸缩性。
-
性能模式现在提供有关服务器连接的统计信息。当客户端连接时,它会使用特定的用户名和特定的主机进行连接。Performance Schema 跟踪每个帐户(用户名加主机名)的连接,并使用这些表分别跟踪每个用户名和每个主机名:
还有提供聚合连接信息的汇总表。
为每个应用程序定义一个专用帐户是一种很好的安全做法,这样应用程序就被赋予了在其运行期间仅执行所需操作的权限。这也有助于监控,因为应用程序开发人员可以使用连接表中的信息在针对给定数据库服务器部署多个应用程序时查看每个应用程序的负载统计信息。
有关详细信息,请参阅 性能模式连接表。
-
以前,该
setup_objects
表只能用于通过包含来指定要检测的对象。无法显式禁用对象检测,例如为除特定数据库中的表之外的所有表配置检测。现在该setup_objects
表包含一个ENABLED
列,指示是否检测匹配对象。此功能提高了setup_objects
表的可用性,因为它允许排除模式。默认表内容现在包括一行,该行禁用数据库中表的检测
mysql
,这是对以前默认对象检测的更改。选择此更改是假设最终用户想要检测应用程序对象,而不是内部服务器表。该更改减少了默认的 Performance Schema 开销,因为 I/O 和表上的锁mysql
未被检测。该表还包括禁用对
INFORMATION_SCHEMA
和performance_schema
数据库中的表进行检测的行。这不是行为上的变化,因为这些表以前没有检测过,但这些行使完整的对象检测默认值明确。 -
性能模式现在检测套接字。这使得能够监视进出服务器的网络通信。收集的信息包括网络活动,例如套接字实例、套接字操作以及传输和接收的字节数。
该
setup_instruments
表现在包含名称以 开头的工具wait/io/socket
。当套接字等待来自客户端的下一个请求时,还有一个idle
用于空闲事件的工具。对应于后一种工具,该setup_timers
表现在包含一行,其NAME
值idle
指示空闲事件计时的单位。默认单位是MICROSECOND
.这些新表包含套接字信息:
socket_instances
:与 MySQL 服务器的活动连接的实时快照socket_summary_by_instance
wait/io/socket/*
:仪器为每个套接字实例为所有套接字 I/O 操作 生成的聚合计时器和字节计数统计信息socket_summary_by_event_name
wait/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
语句创建临时表。但是,对临时表的其他操作(例如INSERT
、UPDATE
或SELECT
)需要对包含临时表的数据库或同名的非临时表的这些操作具有额外的权限。为了将临时表和非临时表的权限分开,针对这种情况的一种常见解决方法是创建一个专用于使用临时表的数据库。然后对于该数据库,用户可以被授予
CREATE TEMPORARY TABLES
特权,以及该用户完成的临时表操作所需的任何其他特权。现在,该
CREATE TEMPORARY TABLES
权限使用户能够像以前一样使用创建临时表CREATE TEMPORARY TABLE
。但是,在会话创建临时表后,服务器不会对该表执行进一步的权限检查。创建会话可以对表执行任何操作,例如DROP TABLE
、INSERT
、UPDATE
或SELECT
。此更改的一个含义是即使当前用户没有创建它们的权限,会话也可以操作其临时表。假设当前用户没有
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.info
、relay-log.info
和所有中继日志文件外,RESET SLAVE ALL
还清除执行 . 后保存在内存中的所有连接信息RESET SLAVE
。(错误#11809016,错误#11763210)表现; InnoDB: 在关闭时,MySQL 可以记录缓存在
InnoDB
缓冲池中的页面,然后在重新启动时重新加载这些相同的页面。这种技术可以帮助在重启后快速达到一致的吞吐量,而无需漫长的预热期。此预加载功能使用紧凑的保存格式和后台 I/O 来最大限度地减少 MySQL 服务器的开销。基本的转储/恢复功能是通过配置选项innodb_buffer_pool_dump_at_shutdown
和innodb_buffer_pool_load_at_startup
。相关配置选项,例如innodb_buffer_pool_dump_now
和innodb_buffer_pool_load_now
为高级用户提供额外的灵活性来为不同的工作负载配置 MySQL 服务器。有关详细信息,请参阅 保存和恢复缓冲池状态。(错误#11765816,错误#58819)-
表现; InnoDB:
innodb_file_per_table
启用时,每个 表InnoDB
都在其自己的表空间文件(.ibd
文件)中创建。随着表内数据的增长,.ibd
文件也会扩展,这是一种 I/O 操作,可能会对包含许多InnoDB
表的繁忙系统造成瓶颈。对于InnoDB
存储在 系统表空间内的表,扩展操作发生的频率较低,因为一个表中释放的空间DELETE
或TRUNCATE
操作可以被另一个表重用。MySQL 5.6 改进了扩展
InnoDB
表空间文件(.ibd
files)的并发性,可以同时扩展多个.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 Index和 Doublewrite Buffer测试上述设置的每个组合
InnoDB
page_cleaner
innodb_lru_scan_depth
innodb_flush_neighbors
打开和关闭。有关详细信息, 请参阅 配置缓冲池刷新。-
表现; InnoDB: 此功能可选择将
InnoDB
撤消日志从 系统表空间移出 到一个或多个单独 的表空间中。撤消日志的 I/O 模式使这些新表空间成为迁移到 SSD 存储的良好候选者,同时将系统表空间保留在硬盘存储上。此功能由配置选项innodb_undo_directory
、innodb_undo_tablespaces
和innodb_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
现在可以创建collation ID大于255的字符集的表。例如,InnoDB
现在可以创建下表,而以前的collation 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_Error
和Last_SQL_Error
列中SHOW SLAVE STATUS
。现在这些时间戳显示在它们自己的单独列中,分别命名为Last_IO_Error_Timestamp
和Last_SQL_Error_Timestamp
。(缺陷 #11765599,缺陷 #58584)参考资料:另请参阅:Bug #43535、Bug #11752361。
-
复制:
BEGIN
、COMMIT
和ROLLBACK
语句现在与语句一起缓存,而不是在缓存刷新到二进制日志时写入。此更改不会影响 DDL 语句(写入语句缓存,然后立即刷新)或事件事件(与 Rotate 事件一起,仍直接写入二进制日志)。参考资料:另请参阅:Bug #57275、Bug #11764443。
Microsoft Windows: Windows 安装程序现在在 MySQL 菜单中创建一个名为
MySQL command line client - Unicode
. 此项调用带有属性集的mysql客户端,以使用 Unicode 通过控制台与 MySQL 服务器通信。它将--default-character-set=utf8
选项传递给mysql,并将字体设置为与Lucida Console
Unicode 兼容的字体。请参阅 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 --help
plugin-load
的输出,因为不再打印for 的值 。(错误#59026,错误#11766001) 当使用该
--auto-generate-sql
选项调用时, mysqlslap会在测试运行结束时丢弃使用该--create-schema
选项指定的模式,这可能是用户未预料到的。mysqlslap现在有一个--no-drop
选项可以防止在测试运行期间创建的任何模式被删除。(错误#58090,错误#11765157)Ssl_server_not_before
服务器现在通过和Ssl_server_not_after
status 变量 公开 SSL 证书到期日期。这两个变量的值均采用 ANSI 时间格式(例如,Sep 12 16:22:06 2013 GMT),或者对于非 SSL 连接为空。(错误#57648,错误#11764778)-
以前,除非定义包含显式 选项,否则使用默认存储引擎
TEMPORARY
创建的表 。(默认引擎是 系统变量的值。)从MySQL 5.5.5开始,当默认存储引擎从非事务 引擎改为事务 引擎时,表产生了事务处理的开销。CREATE TEMPORARY TABLES
ENGINE
default_storage_engine
MyISAM
InnoDB
TEMPORARY
为了允许
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_crl
和ssl_crlpath
系统变量,表示撤销列表文件或包含此类文件的目录。支持 SSL 的 MySQL 客户端程序识别
--ssl-crl
和--ssl-crlpath
选项用于指定吊销列表文件或包含此类文件的目录。-
该
CHANGE MASTER TO
语句具有MASTER_SSL_CRL
和MASTER_SSL_CRLPATH
选项,用于指定从站连接到主站时要使用的吊销列表信息。该mysql.slave_master_info
文件还有两行来存储这些选项的值。该SHOW SLAVE STATUS
语句还有两列来显示这些选项的值。mysql_options()
C API 函数具有MYSQL_OPT_SSL_CRL
和MYSQL_OPT_SSL_CRLPATH
选项,用于指定当客户端连接到主服务器时要使用的吊销列表信息 。此外,mysql_options()
现在还支持用于指定其他 SSL 参数的MYSQL_OPT_SSL_CA
、MYSQL_OPT_SSL_CAPATH
、MYSQL_OPT_SSL_CERT
、MYSQL_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 PLUGIN
andUNINSTALL PLUGIN
语句的替代方法。请参阅 mysql_plugin — 配置 MySQL 服务器插件。-
以下项目已弃用,将在未来的 MySQL 版本中删除。在显示备选方案的地方,应更新应用程序以使用它们。
innodb_table_monitor
桌子 。类似的信息可以从InnoDB
INFORMATION_SCHEMA
表格中获得。请参阅 INFORMATION_SCHEMA InnoDB 表。系统
innodb_stats_sample_pages
变量。改用innodb_stats_transient_sample_pages
。和
innodb_use_sys_malloc
系统innodb_additional_mem_pool_size
变量。
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。如果 在连接到mysqld
CLIENT_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
)InnoDB
N
表现; InnoDB:
InnoDB
用于检测 MySQL 服务器是否空闲 的机制 在没有其他活动发生时通常发生的刷新操作导致速度下降。InnoDB
如果有对缓冲池的未决读取请求,该机制现在认为服务器没有空闲 (缺陷 #11766123,缺陷 #59163)-
创新数据库;复制: 尝试更新一个
NULL
的InnoDB
表的列(之前设置为 )导致从属服务器上的复制失败,无法在“table
”中找到记录。笔记这个问题在 MySQL 5.6.6 中无意中重新引入,并在 MySQL 5.6.12 中再次修复。
(缺陷 #11766865,缺陷 #60091)
参考资料:另请参阅:Bug #16566658。
InnoDB:表中 的
DATA_LENGTH
列INFORMATION_SCHEMA.TABLES
现在可以正确报告InnoDB
压缩表的表空间的磁盘大小。(漏洞 #12770537)InnoDB:表 的失败
CREATE INDEX
操作InnoDB
可能导致一些内存被分配但没有被释放。此内存泄漏可能会影响使用ROW_FORMAT=DYNAMIC
或ROW_FORMAT=COMPRESSED
设置创建的表。(漏洞 #12699505)InnoDB: 使用配置设置
innodb_file_per_table=1
和innodb_file_format=Barracuda
,插入大于页面大小一半的列值,并将该列包含在二级索引中,可能会在更新该列值时导致崩溃。(漏洞 #12637786)InnoDB: 支持
InnoDB
持久统计功能的基础表已重命名并移入mysql
数据库。innodb.table_stats
成为mysql.innodb_table_stats
,innodb.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 TABLE
、OPTIMIZE TABLE
或ALTER 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 INFILE
或Making 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=
pos
pos
malformed binlog: it does not contain any Format_description_log_event...
但是,由于不打印格式描述日志事件并没有什么不安全的地方,因此在这种情况下错误已被删除。(漏洞 #12354268)
Replication: 一个失败的
CREATE USER
语句被错误地写入了二进制日志。(缺陷 #11827392,缺陷 #60082)-
复制: 不再可能在复制运行时
mysql.slave_master_info
和mysql.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 添加的A
DBUG_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_name
var_name
BLOB
TEXT
如果索引条件下推代码下推包含子查询的索引条件,则可以引发断言。(漏洞 #12355958)
XA COMMIT
如果发现必须回滚当前的 XA 事务,则可能无法清除错误状态。因此,下一个 XA 事务在检查前一个事务的正确清理时可能会引发断言。(漏洞 #12352846)如果二进制日志用作事务协调器日志,则可以在两阶段提交期间引发断言。(漏洞 #12346411)
InnoDB
可以将临时索引信息添加到INFORMATION_SCHEMA
,这可以引发断言。(漏洞 #12340873)mysql_list_fields()
为视图的字符列返回不正确的字符集信息。(漏洞 #12337762)过于严格的断言可能会导致服务器崩溃。(漏洞 #12321461)
mysql_upgrade没有正确升级表的
authentication_string
列mysql.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)InnoDB
zlib
在没有正确初始化的情况下调用了一些 函数。(漏洞 #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 status 或mysql
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
被计为未使用索引UPDATE
和DELETE
语句,即使使用了索引也是如此。(缺陷 #60905,缺陷 #12370950)从头文件中删除了内部客户端宏引用
client_plugin.h
。此引用使文件无法使用。(缺陷 #60746,缺陷 #12325444)比较
DATETIME
存储的程序变量并在设置为时NOW()
导致“非法混合排序规则错误”。(缺陷 #60625,缺陷 #11926811)character_set_connection
utf8
-
从定义中包含
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 DISTINCT
在WHERE
子句中使用确定性存储函数可能会产生不正确的结果。(错误#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)YEAR
UNION
在
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()
andMAX()
函数没有考虑BIGINT UNSIGNED
参数的无符号性。(错误#59132,错误#11766094)在
Item_func::val_decimal
中,针对缺失NULL
值检查的 Valgrind 警告已得到纠正。(缺陷 #59125,缺陷 #11766087)-
在
ROUND()
计算中,纠正了未初始化内存的 Valgrind 警告。(错误#58937,错误#11765923)参考资料:这个问题是 Bug #33143 的回归。
优化器在对两个条件进行 OR 运算时创建的范围可能不正确,从而导致不正确的查询结果。(错误#58834,错误#11765831)
更正了将索引值与未初始化字段进行比较所导致的 Valgrind 警告。(错误#58705,错误#11765713)
作为优化or 的副作用condition
AND TRUE
,某些子查询的 MySQL 忘记了需要读取条件使用的列,这在调试版本中引发了断言。(错误#58690,错误#11765699)condition
OR FALSECREATE 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.THREADS
SHOW 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 DIRECTORY
orINDEX DIRECTORY
table 选项的表定义失败,而不是像文档中那样创建一个省略了这些选项的表。(错误#52354,错误#11759990)某些极端情况下的空间操作可能会导致服务器崩溃:具有零点衬里的多边形;具有接触衬里的多边形。(错误#51979、错误#11759650、错误#47429、错误#11755628)
尝试为不存在的存储过程授予
EXECUTE
或ALTER ROUTINE
权限返回成功而不是错误。(错误#51401,错误#11759114)使用
lower_case_table_names=2
,解析由数据库名称限定的对象可能会失败。(错误#50924,错误#11758687)CREATE TABLE
没有ENGINE
选项在解析而不是执行时确定默认引擎。如果在存储程序中执行语句并且同时更改了默认引擎,这将导致不正确的结果。(错误#50614,错误#11758414)在 Linux 上,使用捆绑构建的mysql
libedit
客户端没有读取~/.editrc
. (缺陷 #49967,缺陷 #11757855)对于某些语句,例如
DESCRIBE
orSHOW
,包含太多列的视图会产生错误。(错误#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