这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
-
不兼容的更改: 以前,表中的帐户行
mysql.user
可能有一个空plugin
列值。mysql_native_password
在这种情况下,服务器使用或 此类帐户进行身份验证mysql_old_password
,具体取决于Password
列中的密码哈希值是使用本机哈希还是旧的 4.1 之前的哈希方法。随着 MySQL 5.6.5 中旧格式密码哈希的弃用,这种用于决定使用哪个身份验证插件的启发式方法是不必要的,并且希望user
表行始终明确指定应用哪个身份验证插件。为此,该
plugin
列现在被定义为非NULL
-,默认值为'mysql_native_password'
,并且关联的服务器操作要求该列为非空。结合此plugin
列定义修改,还进行了其他几项更改:命令行
--default-authentication-plugin
选项重新实现为default_authentication_plugin
系统变量。它在服务器启动时的使用没有改变,但现在可以在运行时使用SHOW VARIABLES
或检查默认插件值SELECT @@default_authentication_plugin
。该变量是只读的,不能在运行时更改。当运行mysql_install_db时,它会调用服务器来初始化
mysql
数据库。服务器现在为每个user
表行分配一个非空plugin
列值。'mysql_native_password'
除非default_authentication_plugin
在服务器启动时以其他方式设置系统变量, 否则该值为 。mysql_upgrade检查
user
表行,对于任何具有空plugin
列的行,将该列设置为'mysql_native_password'
或'mysql_old_password'
取决于Password
列值的散列格式。-
在启动时和运行时
FLUSH PRIVILEGES
执行时,服务器会检查user
表行。对于任何包含空plugin
列的行,服务器都会将警告写入此表单的错误日志:[Warning] User entry 'user_name'@'host_name' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
要解决此问题,请执行 mysql_upgrade。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将
plugin
列更改合并到mysql
系统数据库中,并将适当的非空插件值分配给任何空plugin
列值。但是,由于服务器现在检查并禁用具有空plugin
列值的帐户,因此需要进行如下升级。如果您计划使用现有 MySQL 安装中的数据目录进行升级:
停止旧服务器
就地升级 MySQL 二进制文件(用新二进制文件替换旧二进制文件)
--skip-grant-tables
使用禁用权限检查 的选项重新启动服务器运行mysql_upgrade升级系统表
正常重启服务器(没有
--skip-grant-tables
)
如果您计划通过重新加载从现有 MySQL 安装生成的转储文件来升级:
要生成转储文件,请运行 不带 选项 的mysqldump
--flush-privileges
停止旧服务器
就地升级 MySQL 二进制文件(用新二进制文件替换旧二进制文件)
--skip-grant-tables
使用禁用权限检查 的选项重新启动服务器重新加载转储文件 ( mysql <
dump_file
)运行mysql_upgrade升级系统表
正常重启服务器(没有
--skip-grant-tables
)
mysql_upgrade默认以 MySQL
root
用户身份运行。对于前面的过程,如果在root
运行 mysql_upgrade时密码已过期,您将看到一条消息,提示您的密码已过期,因此 mysql_upgrade失败。要更正此问题,请重置root
密码以取消其有效期并再次运行mysql_upgrade:shell> mysql -u root -p Enter password: **** <- enter root password here mysql> SET PASSWORD = PASSWORD('root-password'); mysql> quit shell> mysql_upgrade -p Enter password: **** <- enter root password here
如果服务器以 启动,密码重置语句通常不起作用
--skip-grant-tables
,但mysql_upgrade的第一次调用刷新权限,因此当您运行mysql时,该语句被接受。
已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。
-
以前,程序选项可以完整指定或指定为任何明确的前缀。例如,
--compress
可以将选项赋予mysqldump as--compr
,但不能赋予 as ,--comp
因为后者不明确。不再支持选项前缀;只接受完整选项。这是因为当为程序实现新选项时,前缀可能会导致问题,并且当前明确的前缀将来可能会变得不明确。此更改的一些含义:该
--key-buffer
选项现在必须指定为--key-buffer-size
.该
--skip-grant
选项现在必须指定为--skip-grant-tables
.
(漏洞#16996656)
已弃用的
thread_concurrency
系统变量已被删除。(漏洞#16661195)-
以下项目已弃用,将在未来的 MySQL 版本中删除。在显示备选方案的地方,应更新应用程序以使用它们。
和
ENCODE()
功能DECODE()
。考虑使用AES_ENCRYPT()
andAES_DECRYPT()
代替。INFORMATION_SCHEMA.PROFILING
桌子 。 改用性能模式;请参阅 MySQL 性能模式。
(漏洞 #16463921)
-
不兼容的更改: 根据 SQL 标准,非诊断语句在开始执行时应清除诊断区域。以前,MySQL 与此不同,一些非诊断语句不会这样做。MySQL 现在遵循 SQL 标准,这会影响某些语句的诊断区域的内容。因此,
SHOW WARNINGS
显示诊断区域等语句的结果现在有所不同:先前的行为:
SHOW WARNINGS
显示有关条件(错误、警告和注释)的信息,该条件由当前会话中生成消息的最新语句产生。如果最近的语句使用了一个表并且没有生成任何消息,它什么也不会显示。(即,使用表但不生成消息的语句清除消息列表。)不使用表且不生成消息的语句对消息列表没有影响。新行为:
SHOW WARNINGS
显示有关在当前会话中执行最近的非诊断语句所产生的条件的信息。
其他诊断语句的结果受到类似的影响 (
SHOW ERRORS
,GET DIAGNOSTICS
)。以下示例演示了行为上的差异。
之前:
mysql> DROP TABLE test.no_such_table; ERROR 1051 (42S02): Unknown table 'test.no_such_table' mysql> SELECT @@warning_count; Query OK, 0 rows affected (0.00 sec) mysql> SHOW WARNINGS; +-------+------+------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------+ | Error | 1051 | Unknown table 'test.no_such_table' | +-------+------+------------------------------------+ 1 row in set (0.00 sec)
在这里,该
SELECT
语句不使用表并且不生成消息,因此它不会更改诊断区域。因此,SHOW WARNINGS
输出属于DROP TABLE
语句。现在:
mysql> DROP TABLE test.no_such_table; ERROR 1051 (42S02): Unknown table 'test.no_such_table' mysql> SELECT @@warning_count; Query OK, 0 rows affected (0.00 sec) mysql> SHOW WARNINGS; Empty set (0.00 sec)
此处,
SELECT
语句清除诊断区域,因为它是非诊断语句。因此,SHOW WARNINGS
输出属于该SELECT
语句(并且是空的,因为它SELECT
不产生任何消息)。诊断区域处理中的这一变化意味着如果您希望显示警告计数和消息列表,您应该首先列出消息,因为选择该
warning_count
值会清除消息列表。或者,用于SHOW COUNT(*) WARNINGS
显示计数;这被识别为诊断语句并且不会清除诊断区域。类似的考虑适用于error_count
.为了符合 SQL 标准,该标准规定诊断语句不可准备,MySQL 不再支持以下准备语句:
SHOW WARNINGS
,SHOW COUNT(*) WARNINGS
SHOW ERRORS
,SHOW COUNT(*) ERRORS
warning_count
包含对或error_count
系统变量 的任何引用的语句 。
换句话说,就可准备性而言,这些陈述现在被视为与
GET DIAGNOSTICS
已经不可准备的相同。
-
不兼容的更改: 已进行多项更改以提供更多日志记录控制和更多信息日志消息:
-
log_error_verbosity
系统变量现在控制服务器在将错误、警告和注释消息写入错误日志时的详细程度 。允许的值为 1(仅错误消息)、2(错误和警告消息)、3(错误、警告和注意消息),默认值为 3。log_error_verbosity
优先于旧的系统变量,应该使用它来代替旧的log_warnings
系统变量。log_warnings
有关该变量如何与log_error_verbosity
(服务器系统变量)相关的信息,请参阅说明 。系统log_warnings
变量和--log-warnings
命令行选项现在已弃用,并将在未来的 MySQL 版本中删除。笔记有效的默认详细程度现在不同了。之前的默认值 (
log_warnings=1
) 对应于log_error_verbosity=2
,但默认log_error_verbosity
值为 3。要实现与之前的默认值类似的日志记录级别,请设置log_error_verbosity=2
。 使用该选项调用时,默认服务器的详细程度较低
--bootstrap
(例如mysql_install_db完成的):在安装过程中仅写入错误,因此安装程序不太可能忽略它们。-
引入了
log_timestamps
系统变量来控制写入错误日志的消息的时间戳时区,以及写入文件的一般查询日志和慢查询日志消息。(它不影响写入日志表的一般查询日志和慢速查询日志消息的时区,但是可以使用CONVERT_TZ()
或通过设置会话time_zone
系统变量从这些表中检索的行从本地系统时区转换为任何所需的时区.)笔记默认时间戳时区现在不同了(
UTC
而不是本地系统时区)。要恢复以前的默认值,请设置log_timestamps=SYSTEM
。 -
对于写入错误日志的消息,以及写入文件的一般查询日志和慢速查询日志消息,时间戳的格式已更改。时间戳使用 ISO 8601 / RFC 3339 格式编写: 加上表示祖鲁时间 (UTC) 或 (与 UTC 的偏移量)的尾值。此外,对于一般的查询日志文件,时间戳包含在每条消息中,而不仅仅是第二次更改的时间。
YYYY-MM-DD
Thh:mm:ss.uuuuuu
Z
±
hh:mm
对于写入一般查询日志和慢速查询日志表 (
mysql.general_log
,mysql.slow_log
) 的消息,时间戳的格式也发生了变化,现在包括小数秒。(时间戳的列类型已从 更改TIMESTAMP
为TIMESTAMP(6)
。) 以前,错误日志消息中包含的 ID 是 mysqld进程 ID。现在 ID 是mysqld中负责写入消息的线程的 ID。这对于服务器的哪个部分产生了消息提供了更多信息。它还与包含连接线程 ID 的一般查询日志和慢速查询日志消息更加一致。
有关日志输出目标的信息,请参阅 选择一般查询日志和慢速查询日志输出目标。有关特定日志的信息,请参阅错误日志、 一般查询日志和 慢速查询日志。
-
-
性能模式现在提供公开复制信息的表。这类似于
SHOW SLAVE STATUS
语句中可用的信息,但表格形式的表示更易于访问并且具有可用性优势:SHOW SLAVE STATUS
output 对于目视检查很有用,但对于编程用途则没有那么多。相比之下,使用 Performance Schema 表,可以使用一般SELECT
查询来搜索有关 slave 状态的信息,包括复杂WHERE
条件、连接等。查询结果可以保存在表中以供进一步分析,或分配给变量,从而在存储过程中使用。
复制表提供更好的诊断信息。对于多线程从属操作, 使用和 字段
SHOW SLAVE STATUS
报告所有协调器和工作线程错误 ,因此只有最近的这些错误是可见的,信息可能会丢失。复制表以每个线程为基础存储错误,不会丢失信息。Last_SQL_Errno
Last_SQL_Error
最后看到的事务在每个工作人员的复制表中是可见的。这是无法从 获得的信息
SHOW SLAVE STATUS
。熟悉 Performance Schema 接口的开发人员可以扩展复制表,通过向表中添加行来提供额外的信息。
这些表提供复制信息:
replication_connection_configuration
并replication_connection_status
指示slave用于连接master的配置参数和连接状态。replication_execute_configuration
并replication_execute_status
指出,对于不特定于任何给定线程的从属事务执行的方面,配置参数和当前执行状态。replication_execute_status_by_coordinator
并replication_execute_status_by_worker
包含特定于线程的事务执行信息,或者关于 SQL 线程(对于单线程从属),或者关于协调器和工作线程(对于多线程从属)。
如果从属是多线程的,则 SQL 线程是工作线程的协调器。在这种情况下, 输出
Last_SQL_Error
字段SHOW SLAVE STATUS
现在准确显示 Performance Schema 表中的Last_Error_Message
列 显示的内容。replication_execute_status_by_coordinator
修改字段值以表明其他工作线程中可能存在更多故障,这可以在replication_execute_status_by_worker
显示每个工作线程状态的表中看到。有关详细信息,请参阅 性能模式复制表。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
performance_schema
数据库中。 -
Performance Schema 现在检测存储的程序执行并为它们聚合统计信息。这包括存储过程、存储函数、触发器和事件调度程序事件。
实施了这些具体更改:
桌子上
setup_instruments
有新仪器。statement/scheduler/event
仪器跟踪事件调度程序执行的所有事件。 具有表格名称的仪器 跟踪由存储程序执行的内部指令。statement/sp/
program_instruction
setup_objects
表格OBJECT_TYPE
列现在允许'EVENT'
,'FUNCTION'
,'PROCEDURE'
,'TABLE'
, 或 的值'TRIGGER'
,而不仅仅是'TABLE'
.语句事件表(
events_statements_current
、events_statements_history
和events_statements_history_long
)现在有一NESTING_LEVEL
列指示事件嵌套级别。performance_schema_max_program_instances
和 系统变量配置存储程序 的performance_schema_max_statement_stack
最大数量和嵌套存储程序调用的最大深度,Performance Schema 为其维护统计信息。和状态变量指示丢失统计信息的存储程序的数量,
Performance_schema_program_lost
以及Performance_schema_nested_statement_lost
丢失统计信息的存储程序语句的数量。events_statements_summary_by_program
汇总表汇总了每个存储程序的语句事件 。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
performance_schema
数据库中。 -
Performance Schema 现在检测内存使用情况并汇总内存使用情况统计信息,详细说明如下:
使用的内存类型(各种缓存、内部缓冲区等)
间接执行内存操作的线程、账户、用户、主机
性能模式检测内存使用的以下方面
使用的内存大小
操作计数
低水位线和高水位线
内存大小有助于了解或调整服务器的内存消耗。
操作计数有助于了解或调整服务器对内存分配器施加的总体压力,这会对性能产生影响。分配单个字节一百万次与一次分配一百万个字节不同;跟踪大小和数量可以揭示差异。
低水位线和高水位线对于检测工作负载峰值、整体工作负载稳定性和可能的内存泄漏至关重要。
实施了这些具体更改:
该
setup_instruments
表现在有记忆工具。这些具有形式的名称 。默认情况下禁用内存检测。memory/
component
/instrument_name
系统
performance_schema_max_memory_classes
变量配置最大存储仪器数。Performance_schema_memory_classes_lost
状态变量指示无法加载存储工具的次数 。几个汇总表汇总了与内存相关的事件。
有关详细信息,请参阅 内存摘要表。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
performance_schema
数据库中。
-
无法使用rpm -uvh或yum localupdate将社区 RPM 升级到商业 RPM 。为了解决这个问题,MySQL 5.7.2 更新了 RPM spec 文件,结果如下:
对于非升级安装(未安装现有的 MySQL 版本),可以使用 yum安装 MySQL 。
对于升级,有必要清理任何早期的 MySQL 安装。实际上,更新是通过删除旧安装并安装新安装来执行的。
其他详细信息如下。
对于 MySQL 5.7.2 的非升级安装,可以使用yum安装:
shell> yum install MySQL-server-NEWVERSION.glibc23.i386.rpm
对于升级到 MySQL 5.7.2,升级是通过删除旧安装并安装新安装来执行的。为此,请使用以下过程:
-
删除现有的 5.7。
X
安装。OLDVERSION
是要删除的版本。shell> rpm -e MySQL-server-OLDVERSION.glibc23.i386.rpm
对所有已安装的 MySQL RPM 重复此步骤。
-
安装新版本。
NEWVERSION
是要安装的版本。shell> rpm -ivh MySQL-server-NEWVERSION.glibc23.i386.rpm
或者,可以使用 yum完成删除和安装:
shell> yum remove MySQL-server-OLDVERSION.glibc23.i386.rpm shell> yum install MySQL-server-NEWVERSION.glibc23.i386.rpm
(错误#16445097、错误#16445125、错误#16587285)
-
mysql_secure_installation 的平台可用性、可用性和安全性 已得到改进。以前,该程序是可用于 Unix 和类 Unix 系统的 shell 脚本。它已转换为可在所有平台上使用的二进制可执行程序(用 C++ 编写)。作为 C++ 程序的实现允许 mysql_secure_installation使用客户端/服务器协议直接连接到 MySQL 服务器,而不是通过调用mysql来这样做并使用临时文件 与mysql通信。
mysql_secure_installation的 重新实现 与以前的版本功能兼容,但在可用性方面进行了以下改进:
该
validate_password
插件可用于密码强度检查。命令行和选项文件中支持 标准 MySQL 选项,例如
--host
和 。--port
有关详细信息,请参阅 mysql_secure_installation — 提高 MySQL 安装安全性。有关 的更多信息
validate_password
,请参阅 密码验证插件。
-
复制: 半同步复制主服务器现在默认使用不同的等待点与从服务器通信。这是在将状态返回给提交事务的客户端之前,master 等待 slave 确认事务接收的时间点。等待点由新的
rpl_semi_sync_master_wait_point
系统变量控制。这些值是允许的:AFTER_SYNC
(默认):master 将每个事务写入其二进制日志和 slave,并将二进制日志同步到磁盘。master 在同步后等待 slave 确认交易接收。收到确认后,主服务器将事务提交给存储引擎并将结果返回给客户端,然后客户端可以继续进行。-
AFTER_COMMIT
:master将每个事务写入自己的binary log和slave,同步binary log,将事务提交给存储引擎。master 在提交后等待 slave 确认交易接收。收到确认后,master 将结果返回给 client,然后 client 可以继续。对于旧版本的 MySQL,半同步 master 行为等同于
AFTER_COMMIT
.
这些设置的复制特征不同如下:
-
使用
AFTER_SYNC
,所有客户端同时看到已提交的事务:在它被从服务器确认并提交给主服务器上的存储引擎之后。因此,所有客户端都在主服务器上看到相同的数据。在主服务器发生故障的情况下,主服务器上提交的所有事务都已复制到从服务器(保存到其中继日志中)。主服务器崩溃和故障转移到从服务器是无损的,因为从服务器是最新的。
-
使用
AFTER_COMMIT
,发出事务的客户端仅在服务器提交到存储引擎并收到从属确认后才获得返回状态。在提交之后和从确认之前,其他客户端可以在提交客户端之前看到提交的事务。如果出现问题导致从服务器不处理事务,那么在主服务器崩溃并故障转移到从服务器的情况下,这些客户端可能会看到与他们在主服务器上看到的相关的数据丢失。
新的等待点是一种行为更改,但不需要重新配置。该更改确实引入了版本兼容性约束,因为它增加了半同步接口版本:MySQL 5.7.2 及更高版本的服务器不能使用旧版本的半同步复制插件,旧版本的服务器也不能使用 MySQL 5.7 的半同步复制插件。 2 及以上。
-
INSERT
以前,对于触发事件 ( ,UPDATE
,DELETE
) 和操作时间 (BEFORE
, ) 的每个组合,一张表最多只能有一个触发器AFTER
。此限制已取消,允许多个触发器。伴随着这一变化,还进行了一些额外的修改:默认情况下,触发事件和动作时间的每个组合的触发器按照它们创建的顺序执行。为了能够指定触发器激活顺序,
CREATE TRIGGER
现在支持FOLLOWS
和PRECEDES
子句。每个子句都采用具有相同触发事件和动作时间的现有触发器的名称。表中的
ACTION_ORDER
列INFORMATION_SCHEMA.TRIGGERS
不再是 0,而是一个大于零的整数,表示触发器激活的顺序。-
触发器的创建时间现在保持为一个
TIMESTAMP(2)
值(以百分之一秒为单位的小数部分):对于从 MySQL 5.7.2 开始创建的触发器, 表中 的
CREATED
列TRIGGERS
不再是 。NULL
对于输出
Created
列和SHOW TRIGGERS
输出的(新)Created
列也是如此SHOW CREATE TRIGGER
。
存储表触发器信息 的 文件tbl_name
.TRGtbl_name
现在包含created
一行触发器创建时间。
有关其他信息,请参阅使用触发器、 CREATE TRIGGER 语句、 SHOW CREATE TRIGGER 语句、 SHOW TRIGGERS 语句、 INFORMATION_SCHEMA TRIGGERS 表和 表触发器存储。
-
如果针对具有触发器的表运行, mysql_upgrade并
CHECK TABLE ... FOR UPGRADE
为在 MySQL 5.7.2 之前创建的每个触发器显示此警告:Trigger db_name.tbl_name.trigger_name does not have CREATED attribute.
该警告仅供参考。没有对触发器进行任何更改。
这些更改对备份、升级和降级有影响,如下所述。为了简洁起见,这里的“多个触发器”是“具有相同触发事件和动作时间的多个触发器”的简写。”
备份还原。 mysqldump以激活顺序转储触发器,以便在重新加载转储文件时,以相同的激活顺序重新创建触发器。但是,如果 mysqldump转储文件包含具有相同触发事件和操作时间的表的多个触发器,则尝试将转储文件加载到不支持多个触发器的旧服务器时会发生错误。(有关解决方法,请参阅降级说明;您可以转换触发器以与旧服务器兼容。)
升级。假设您将不支持多触发器的旧服务器升级到 MySQL 5.7.2 或更新版本。如果新服务器是复制主服务器并且具有不支持多个触发器的旧从服务器,如果在主服务器上为已经具有具有相同触发事件和操作时间的触发器的表创建触发器,则这些从服务器会发生错误。为避免此问题,请先升级从属服务器,然后再升级主服务器。
降级。如果将支持多个触发器的服务器降级为不支持的旧版本,则降级会产生以下影响:
对于具有触发器的每个表,所有触发器定义都保留在
.TRG
该表的文件中。但是,如果有多个触发器具有相同的触发事件和动作时间,则服务器在触发事件发生时只执行其中一个。有关.TRG
文件的信息,请参阅 表触发器存储。如果在降级后添加或删除表的触发器,服务器将重写表的
.TRG
文件。重写的文件只保留每个触发事件和动作时间组合的触发;其他人都迷路了。
为避免这些问题,请在降级之前修改您的触发器。对于每个触发器事件和操作时间的组合都有多个触发器的每个表,将每个这样的触发器集转换为单个触发器,如下所示:
对于每个触发器,创建一个包含触发器中所有代码的存储例程。
NEW
使用和访问的值可以OLD
使用参数传递给例程。如果触发器需要来自代码的单个结果值,您可以将代码放在存储函数中并让函数返回该值。如果触发器需要来自代码的多个结果值,您可以将代码放在存储过程中并使用OUT
参数返回值。删除表的所有触发器。
为调用刚刚创建的存储例程的表创建一个新触发器。因此,此触发器的效果与其替换的多个触发器相同。
参考资料:另请参阅:Bug #28803、Bug #11746800、Bug #37567、Bug #11748861。
不兼容的更改: 以前,Performance Schema 语句检测不包括在从属复制服务器上执行的语句。
statement/rpl/relay_log
为了解决这个问题,表中添加了一个新的抽象工具setup_instruments
。在知道确切的语句类型之前,在复制语句分类的早期阶段使用该工具。(错误#16750433,错误#17271055)-
Incompatible Change: 之前,负责接受客户端连接的主循环还会对每个连接相关的数据结构进行初始化。这些初始化任务现在委托给工作线程,以最大限度地减少接受循环所做的工作并最大限度地提高连接接受率。
作为此更改的结果
bind_address
,thread_cache_size
、 和thread_handling
系统变量不再对嵌入式服务器可见 (libmysqld
)。同样,Slow_launch_threads
和Threads_cached
状态变量在嵌入式服务器中没有意义。这些变量在嵌入式服务器中不再可见,并且应该相应地修改依赖这些变量的嵌入式应用程序。(错误#62288、错误#12951536、错误#62284、错误#12951595、错误#62283、错误#12951605) 不兼容的更改:mysql_upgrade 的未使用
--basedir
和--datadir
选项 已被删除。-
重要变更;分区: 现在可以检查和修复包含重复键违规的分区。这是通过or选项语句中
IGNORE
关键字 关键字对这些语句的行为有以下影响:ALTER TABLE
CHECK PARTITION
REPAIR PARTITION
ALTER IGNORE TABLE ... REPAIR PARITION
删除所有由于存在重复键而无法移动的行。ALTER IGNORE TABLE ... CHECK PARTITION
报告每行的分区表达式中所有列的内容。
笔记IGNORE
MySQL 5.7.4 中删除 了对关键字的支持。(漏洞 #16900947)
重要变更;复制: 默认情况下,当将整数从 master 上的较小类型提升到 slave 上的较大类型时(例如,从
SMALLINT
master 上的BIGINT
列到 slave 上的列),提升后的值被视为已签名. 现在在这种情况下,可以使用 服务器系统变量指定的一组值中的ALL_SIGNED
一个 有关详细信息,请参阅 基于行的复制:属性提升和降级,以及变量的说明。(漏洞 #15831300)ALL_UNSIGNED
slave_type_conversions
表现; InnoDB: 多版本并发控制 ( MVCC )
InnoDB
要求为每个使用 MVCC的事务分配一个读取视图。为了提高InnoDB
只读和读写性能,已通过减少互斥争用来优化读取视图创建。表现; InnoDB: An
sx-lock
,一种新型的 rw-lock,优化并发性并提高读写工作负载的可扩展性。sx-locks
通过提供写访问同时允许其他线程进行不一致的读取来减少 B 树索引操作的锁定争用。表现; InnoDB: 事务实例 (
trx_t
) 的内存现在分配在可配置大小的块中,这些块是事务实例大小的倍数。事务实例也被放置在一个优先队列中,并按它们在内存中的地址排序,这样当实例从池中分配时,它们就靠得很近。此增强功能减少了在从池中分配实例时迭代事务实例所产生的成本。InnoDB: innochecksum功能已通过新选项和扩展功能得到增强。请参阅 innochecksum — 离线 InnoDB 文件校验和实用程序。(漏洞 #16945722)
InnoDB:添加了 一个新的CMake选项,
WITH_INNODB_EXTRA_DEBUG
可以启用额外的 InnoDB 调试检查。WITH_INNODB_EXTRA_DEBUG
仅当该WITH_DEBUG
选项也已启用时才能启用。(漏洞 #16821155)InnoDB: 从源代码构建 MySQL 时,您现在可以
InnoDB
使用新的 CMake选项定义使用的互斥体类型。MUTEX_TYPE
InnoDB: 重构的互斥锁代码使得选择合适的互斥锁更容易,并允许在同一个实例中组合多个互斥锁类型。
fast_mutex_t
重构后的代码还消除了brew 和 home brew 之间的区别ib_mutex_t
,为两种 mutex 类型实现了一个通用接口,并允许在未来添加新的 mutex 类型。此外,互斥锁代码与代码分离,InnoDB
因此它可以用作库,并且引入了“ PolicyMutex ”接口。新接口使用静态继承(模板)实现互斥量,从而更容易定义策略和自定义互斥量行为。InnoDB: 优化了缓冲池列表扫描和相关批处理,以降低扫描复杂度和扫描页数。
InnoDB:
InnoDB
缓冲池转储和加载操作已得到增强。一个新的系统变量,innodb_buffer_pool_dump_pct
允许您指定每个缓冲池中最近使用的页面的百分比以读出和转储。InnoDB
当后台任务正在执行其他 I/O 活动时设置InnoDB
限制每秒缓冲池加载操作的数量innodb_io_capacity
InnoDB:通过禁用重做日志记录、锁定和更改缓冲来优化临时表上的 DML 操作(
INSERT
、、UPDATE
)DELETE
不需要重做日志记录,因为临时表的生命周期受服务器进程生命周期的限制,并且不需要锁定,因为临时表仅对创建它的会话可见。临时表大小的减少使得更改缓冲变得不必要,因为临时表现在更有可能驻留在内存中。InnoDB: 并发数据修改 事务的限制现在是 96 * 1023 个生成 撤消记录的事务。从 MySQL 5.7.2 开始,128 个回滚段中的 32 个被分配给修改临时表和相关对象的事务的非重做日志。这将并发数据修改事务的最大数量从 128K 减少到 96K。96K 限制假定事务不修改临时表。如果所有数据修改事务也修改临时表,则限制为 32K 并发事务。
InnoDB: MySQL 5.7.2 为普通和压缩临时表及相关对象引入了一种新型撤消日志。新类型的撤销日志不是重做日志,因为临时表在崩溃恢复期间不被恢复并且不需要重做日志。新的撤销日志驻留在临时表空间中。默认临时表空间文件默认
ibtmp1
位于数据目录中,并且始终在服务器启动时重新创建。可以通过设置指定临时表空间文件的用户定义位置innodb_temp_data_file_path
。有关详细信息,请参阅撤消日志。InnoDB: 只读事务将不再分配事务 ID。相反,只有当事务被明确标记为“读写”,如果事务已获取表上的 X 或 IX 锁,或者事务是写入临时表的只读事务时,才会分配 ID. 所有其他事务都被视为“只读”并且未分配 ID。此外,只读事务不会被标记为“只读”,除非它们明确地以 开头
START TRANSACTION READ ONLY
。对于没有交易 ID 的交易,SHOW ENGINE INNODB STATUS
打印唯一的标识符,但仅在SHOW ENGINE INNODB STATUS
调用的上下文中。InnoDB:
SELECT COUNT(*) FROM t
语句现在调用对存储引擎的单个处理程序调用来扫描聚簇索引并将行计数返回给优化器。以前,行计数通常是通过遍历较小的二级索引并为每条记录调用处理程序来执行的。SELECT COUNT(*) FROM t
在大多数情况下,对存储引擎的单个处理程序调用以对聚集索引中的行进行计数可以提高有关详细信息,请参阅 InnoDB 限制和限制。InnoDB: 从 MySQL 5.7.2 开始,显示 上 执行
UPDATE_TIME
的时间戳值 。以前, 表显示 NULL 值 对于 MVCC,时间戳值反映了时间,这被认为是最后更新时间。当服务器重新启动或表从数据字典缓存 中逐出时,时间戳不会保留UPDATE
INSERT
DELETE
InnoDB
UPDATE_TIME
InnoDB
COMMIT
InnoDB
InnoDB: 优化了将事务的隐式锁转换为显式锁的过程以提高性能。优化减少了
lock_sys_t::mutex
争用。InnoDB:代码 中的许多内部调试标志
InnoDB
只能在编译时或从调试器中设置。结果,大量诊断信息未被使用。此增强功能将内部调试标志替换为 DBUG 标签,以便 可以使用DBUG 包,并且可以使用mysqld命令行选项来自各种InnoDB
子系统的有关配置 MySQL 以进行调试、创建跟踪文件和使用mysqld选项 请参阅调试 MySQL 服务器部分。--debug
--debug
-
分区: 现在单个子分区和分区都支持以下操作:
ANALYZE
、CHECK
、OPTIMIZE
、REPAIR
和TRUNCATE
(请参阅 ALTER TABLE 分区操作)。笔记此修复程序还允许使用
REBUILD
单独的子分区,即使这实际上不受 MySQL 支持,并且没有任何效果。此问题在 MySQL 5.7.5 及更高版本中通过禁止REBUILD
在ALTER TABLE
语句中使用子分区得到解决。(缺陷 #14028340,缺陷 #65184)
参考资料:另请参阅:Bug #19075411、Bug #73130。
-
复制: 以前,事务只有在不接触同一个数据库的情况下才能并行应用。但是,MySQL 服务器使用基于锁的调度程序,这意味着应该可以并行执行准备阶段中所有未提交的复制线程,而不会违反一致性。现在可以通过启动从属mysqld来在从属上启用这种并行执行,
slave_parallel_type=LOGICAL_CLOCK
或者,如果mysqld已经启动,则通过将全局slave_parallel_type
值'LOGICAL_CLOCK'
为停止的从属。启用此功能后,每个事务都标记有逻辑时间戳。这个时间戳标识当前事务进入准备阶段时最后提交的事务,具有相同时间戳的所有事务可以并行执行。
要在不重新启动的情况下禁用此功能,请停止从站使用
STOP SLAVE
(如果它作为从站运行),发出SET @global-slave_parallel_type='DATABASE'
,然后START SLAVE
在您希望从站恢复时发出。您还可以通过在不设置 的情况下重新启动从属mysqldslave_parallel_type
或将其显式设置为来禁用该功能DATABASE
。当禁用预准备事务的并行执行时,从服务器遵循旧行为并仅并行应用那些不会导致同一数据库中发生更改的事务。 复制: 重构主转储线程以减少锁争用并提高主吞吐量。以前,转储线程在读取事件时锁定二进制日志;现在只有在读取最后一次成功写入事件结束时的位置时才会持有锁。这意味着多个转储线程现在可以从二进制日志文件并发读取,并且转储线程可以在客户端写入二进制日志时读取。
已从源代码中删除对 LinuxThreads 的支持。LinuxThreads 在 Linux 2.6 中被 NPTL 取代。(错误#17007529、错误#72888、错误#18913935)
已从源代码中删除对构建 Apple 通用二进制文件以支持 PowerPC 的支持。(漏洞 #16959103)
CMake不再检查
memmove()
ormemcpy()
因为它们是标准 C 库函数。此外,该bmove_upp()
函数的实现已替换为对 的调用memmove()
,这可能会对性能产生积极影响。(漏洞 #16839824)C API
libmysqlclient
共享库.so
文件现在有版本 18.1.0(从 MySQL 5.5 中使用的版本 18.0.0 开始)。18.1.0 可用作 18.0.0 的替代品。(错误#16809055、错误#59106、错误#12407476)的使用
DYNAMIC_ARRAY
减少了,这将某些范围查询的性能提高了 3-4%。(错误#16736776,错误#17030235)mysqladmin现在支持
--show-warnings
显示因执行发送到服务器的语句而产生的警告的选项。(漏洞 #16517756)mysql_upgrade现在验证服务器版本是否与编译它的版本相匹配,如果不匹配则退出。此外,一个
--version-check
选项允许指定是否启用版本检查(默认),或者如果给定则禁用检查--skip-version-checking
。(漏洞 #16500013)如果无法构建 PAM 插件,则使用 now 调用CMake会导致构建失败(而不是仅发出警告)。
-DWITH_AUTHENTICATION_PAM=1
(漏洞 #14554639)在批处理模式下,mysql 会格式化结果状态消息,例如“ “Query OK, 1 row affected” ”,但不会打印它们。现在这些消息没有格式化。(漏洞 #69486,漏洞 #16971432)
-
纠正了几个效率低下的问题:
一个循环
Item_in_subselect::single_value_transformer()
可能会执行太多次。代码中的
myisamchk()
、my_test_if_sort_rep()
和recreate_table()
函数MyISAM
可能会执行太多次。
感谢 Po-Chun Chang 提供修复这些问题的补丁。(错误#69138、错误#16764131、错误#69117、错误#16751784、错误#69561、错误#17007268、错误#69553、错误#17001703)
MYSQL_SYSVAR_DOUBLE()
插件现在可以使用和MYSQL_THDVAR_DOUBLE()
访问器宏 定义和公开双精度类型的浮点系统变量 。请参阅 客户端插件描述符。(缺陷 #68121,缺陷 #16194302)-
MySQL 现在支持使用协议跟踪插件:客户端插件实现了使用客户端/服务器协议跟踪客户端和服务器之间的通信。协议跟踪插件使用客户端插件 API。
在 MySQL 源代码发行版中,测试协议跟踪插件
test_trace_plugin.cc
在目录中的文件中实现libmysql
。这可以作为编写其他协议跟踪插件的指南进行检查。 -
为了更容易看出好的和坏的执行计划之间的区别,JSON 格式的
EXPLAIN
输出现在包括以下额外的成本信息:query_cost
:查询块的总成本,无论是顶级查询还是子查询。对于顶级SELECT
,这应该等于Last_query_cost
状态变量。sort_cost
: where 和 if使用的第一个排序操作 (GROUP BY
or )的成本。ORDER BY
filesort
read_cost
:从查询块中使用的每个表读取数据的成本(即访问方法成本)。eval_cost
:查询块中每个表的条件评估成本。prefix_cost
:在查询块中执行prefix join的开销;也就是说,将查询块的表从第一个表连接到给定值的那个表(包括它)的成本。data_read_per_join
:每次查询或子查询执行时处理程序接口处理的估计数据量。这本质上是记录宽度 * 读取记录数。rows_produced_per_join
/rows_examined_per_join
:每次单个查询块执行时生成或检查的表中记录的估计数量(查询块中的每个表)。used_columns
:用于在查询中读取或写入的表中的列列表(查询块中的每个表)。
不会为
INFORMATION_SCHEMA
表显示此成本信息。 -
EXPLAIN
现在可用于获取在命名连接中执行的可解释语句的执行计划:EXPLAIN [options] FOR CONNECTION connection_id;
例如,如果您在一个会话中运行一条需要很长时间才能完成的语句,那么
EXPLAIN FOR CONNECTION
在另一个会话中使用它可能会产生有关延迟原因的有用信息,并帮助您优化该语句。connection_id
是从INFORMATION_SCHEMA
PROCESSLIST
表或SHOW PROCESSLIST
语句中获取的连接标识符。如果您有PROCESS
权限,您可以为任何连接指定标识符。否则,您可以仅为自己的连接指定标识符。输出变化
EXPLAIN
:新的状态变量
Com_explain_other
指示EXPLAIN FOR CONNECTION
已执行的语句数。有关详细信息,请参阅EXPLAIN 语句和 获取命名连接的执行计划信息。
Semijoin LooseScan 策略现在可以使用
ref
访问并适用于更广泛的查询。
-
不兼容的更改: 当用于现有 MySQL 帐户时, 表行 中命名的插件不同的身份验证插件的子句,
GRANT
语句可能会产生意外结果IDENTIFIED WITH
mysql.user
因为
IDENTIFIED WITH
仅用于GRANT
创建新用户的语句,所以如果指定的帐户已经存在,现在将被禁止。(漏洞 #16083276) -
Incompatible Change: 列
DEFAULT
值可能在建表时有效,在插入或更新行时sql_mode
无效sql_mode
例子:SET sql_mode = ''; CREATE TABLE t (d DATE DEFAULT 0); SET sql_mode = 'NO_ZERO_DATE,STRICT_ALL_TABLES'; INSERT INTO t (d) VALUES(DEFAULT);
在这种情况下,应该接受 0
CREATE TABLE
而拒绝 0INSERT
。但是,以前服务器不会DEFAULT
根据当前sql_mode
. 在示例中,INSERT
成功并插入'0000-00-00'
到DATE
列中。服务器现在应用适当的
sql_mode
检查以在插入或更新时生成警告或错误。如果您使用基于语句的日志记录 (
binlog_format=STATEMENT
),则导致的复制不兼容是,如果从属服务器升级,未升级的主服务器将无错误地执行前面的示例,而INSERT
从属服务器将失败并且复制将停止。要处理这个问题,请停止主服务器上的所有新语句并等待从服务器赶上来。然后升级奴隶,然后升级主人。或者,如果您不能停止新语句,请暂时更改为在主服务器上进行基于行的日志记录 (
binlog_format=ROW
) 并等待所有从服务器处理到此更改点之前生成的所有二进制日志。然后升级从属服务器,然后升级主服务器,并将主服务器更改回基于语句的日志记录。(缺陷 #68041,缺陷 #16078943) 重要变更;表现; InnoDB:
InnoDB
无法打开具有多个数据文件的表空间。这消除了 MySQL Server 5.6.12 中的已知限制。(错误#17033706,错误#69623)-
重要变更;复制: 当服务器运行
--binlog-ignore-db
并 返回 (即,当前没有选择的数据库),使用完全限定表名的语句 。 格式未写入二进制日志。这是因为在这种情况下缺少当前选择的数据库被视为匹配任何可能的忽略选项,而不是没有这样的选项;这意味着这些陈述总是被忽略。SELECT
DATABASE()
NULL
dbname
tblname
现在,如果没有当前数据库,则始终将使用完全限定表名的语句写入二进制日志。(缺陷 #11829838,缺陷 #60188)
表现; InnoDB: MySQL 5.6 中引入的代码回归对性能产生了负面
DROP TABLE
影响ALTER TABLE
。这可能会导致 MySQL Server 5.5.x 和 5.6.x 之间的性能下降。(漏洞 #16864741,漏洞 #69316)表现; InnoDB: 当
innodb_thread_concurrency
设置为非零值时,有可能innodb_concurrency_tickets
在读取每一行后全部释放,导致每次读取后进行并发检查。这可能会影响所有查询的性能。一种症状可能是系统 CPU 使用率较高。如果您使用此设置,我们强烈建议您升级到 MySQL Server 5.6.13。这可能会导致 MySQL Server 5.5.x 和 5.6.x 之间的性能下降。(错误#68869,错误#16622478)创新数据库;分区: 涉及
InnoDB
具有一列或多BLOB
列的分区表的联接并不总是能得到正确处理。一个BLOB
或多个列不需要是连接列,或者在包含连接的语句中以其他方式命名或引用,才会发生此问题。(漏洞#16367691)-
创新数据库;分区: 在对
INFORMATION_SCHEMA.PARTITIONS
表进行任何查询之后,InnoDB
如语句输出中所示的索引统计信息是 从最后一个分区读取的,而不是从包含最大行数的分区读取的。(缺陷 #11766851,缺陷 #60071)SELECT
* FROM
INFORMATION_SCHEMA.STATISTICS
参考资料:另请参阅:Bug #16882435、Bug #69179。
-
创新数据库;复制: 尝试更新一个
NULL
的InnoDB
表的列(之前设置为 )导致从属服务器上的复制失败,无法在“table
”中找到记录。笔记这个问题在 MySQL 5.6.6 中无意中重新引入,并在 MySQL 5.6.12 中再次修复。
(缺陷 #11766865,缺陷 #60091)
参考资料:另请参阅:Bug #16566658。
InnoDB: 在 Windows 64 位调试版本中,读取视图 向标准错误输出
COPY_TRX_IDS
报告 “矢量下标超出范围”错误。(漏洞 #17320056)InnoDB: 在在线期间记录记录的删除标记时
ALTER TABLE...ADD PRIMARY KEY
,InnoDB
将事务 ID 写入日志,就像记录删除或删除标记之前一样。这样做时,InnoDB
会覆盖DB_TRX_ID
原始表中的字段,这可能会导致锁定问题。(漏洞 #17316731)InnoDB: 在搜索索引树并遍历在每个级别访问或固定块的多个级别时,会发生断言失败。(漏洞 #17315967)
InnoDB: 该
row_sel_sec_rec_is_for_clust_rec
函数会错误地准备将二级索引中的 NULL 列前缀与聚集索引中的非 NULL 列进行比较。(漏洞#17312846)InnoDB: 回滚对删除标记的记录的更新时会发生不正确的清除。(漏洞 #17302896)
InnoDB:
ut_ad(oldest_lsn <= cur_lsn)
文件中 的断言buf0flu.cc
失败,因为当前最大 LSN 将在最早的 LSN 之前从缓冲池中检索。(漏洞 #17252421)InnoDB:
InnoDB
memcachedadd
和set
操作比 SQLINSERT
操作执行得更慢。(漏洞 #17214191)InnoDB: 如评论中
log0log.h
,old_lsn
并且old_buf_free
只应在UNIV_LOG_DEBUG
启用时编译。(漏洞 #17160270,漏洞 #69724)InnoDB: 当以只读模式启动时,
InnoDB
将断言保存点。(漏洞#17086428)InnoDB: 在删除索引之前,执行检查以确保索引根页面是空闲的。如果索引根页面空闲,则可以避免删除活动。在执行检查之前将初始化事务。如果检查评估为真,则初始化的事务将处于悬空状态。(漏洞#17076822)
InnoDB: 添加一个外键,其约束名称包含字符串“ _ibfk_ ” ,导致
InnoDB
创建具有生成的内部名称的重复约束。生成的内部名称也可能与同名的现有用户定义约束冲突,导致重复键错误。(错误#17076737、错误#69693、错误#17076718、错误#69707)InnoDB:由于互斥体冲突 ,
InnoDB
监视器测试会引发断言ha_innodb.cc
(漏洞 #17027249)InnoDB: 在调试版本中,
trx_sys->rw_max_trx_id
变量有时会被反转导致CLUST_INDEX_SIZE
值不一致。(漏洞 #17026780)InnoDB: 该
ha_innobase::clone
函数会错误地断言一个线程不能克隆另一个线程使用的表处理程序,并且原始表处理程序和克隆的表处理程序必须属于同一个事务。不正确的断言已被删除。(漏洞 #17001980)InnoDB: 错误 #14606334 的修复中引入的回归会导致崩溃恢复期间启动时崩溃。(漏洞#16996584)
InnoDB:
INSERT
在写入失败后 回滚BLOB
将导致断言失败。如果在写入BLOB
期间发生错误,断言已被修改为允许 NULLBLOB
(漏洞 #16971045)InnoDB:
SHOW ENGINE INNODB STATUS
输出以十六进制格式引用了一个线程(示例:)事务列表中以十进制格式thread handle 0x880
引用了相同的线程 。(漏洞 #16934269,漏洞 #69437)SHOW ENGINE INNODB STATUS
thread id 2176
-
InnoDB:使用IN BOOLEAN MODE修饰符 的全文搜索将导致断言失败。(漏洞 #16927092)
参考:这个问题是 Bug #16516193 的回归。
InnoDB: 当
CHECK TABLE
发现包含错误数量条目的二级索引时,它会报告错误但不会将索引标记为已损坏。CHECK TABLE
现在遇到此错误时会将索引标记为损坏,但只有索引被标记为损坏,表不会。结果,只有索引变得不可用,直到它被删除并重建。该表不受影响。(漏洞 #16914007)InnoDB:
InnoDB
将尝试收集有关部分创建的索引的统计信息。(漏洞 #16907783)InnoDB: 为避免命名空间冲突,
'using namespace std'
已从InnoDB
. (漏洞 #16899560)InnoDB: 当删除具有多个索引的列上的所有索引 当外键约束需要索引时
InnoDB
无法阻止DROP INDEX
(漏洞#16896810)InnoDB: 优化显式记录锁定例程。(漏洞 #16880127)
InnoDB:服务器会在memcached设置操作 期间崩溃失败是由于 utf8
CHAR
列的填充长度值造成的。在 memcached更新操作期间,旧元组中的字段将被复制,其数据长度小于填充的 utf8CHAR
列值。此修复可确保不会复制旧元组。相反,每次都会创建一个新的元组。(漏洞 #16875543)InnoDB: innochecksum将忽略其返回值, 启用CMake
fwrite
时可能会导致错误或生成警告和编译错误 (漏洞#16872677)WITH_INNODB_EXTRA_DEBUG
InnoDB: 断言失败将发生在 包含意外但有效数据目录标志的表
row0log.cc
的ROW_FORMAT=REDUNDANT
(漏洞#16863098)InnoDB: 中的一个断言
row0mysql.cc
,它确保字典操作锁不是递归的,失败了。(漏洞 #16862290)InnoDB: InnoDB 缓冲池 的两个
INFORMATION_SCHEMA
表可能显示读取固定块的无效页面类型。此修复将显示 I/O 固定读取块的未知页面类型。(漏洞 #16859867)InnoDB:
InnoDB
简化和优化了记录比较功能。(漏洞 #16852278)InnoDB:
InnoDB
删除了编译memcached 插件 时出现的无效编译警告消息(漏洞 #16816824)InnoDB: 在插入缓冲区合并期间,InnoDB 将调用
lock_rec_restore_from_page_infimum()
可能无效的记录指针。(漏洞 #16806366)InnoDB:表中 的
innodb_rwlock_x_spin_waits
项目INFORMATION_SCHEMA.INNODB_METRICS
将显示与项目相同的值innodb_rwlock_x_os_waits
。(漏洞 #16798175)InnoDB: 中的
trx_tables_locked
计数器INFORMATION_SCHEMA.INNODB_TRX
不会考虑所有带锁的表。(漏洞#16793724)InnoDB: 此补丁删除了
UNIV_INTERN
MySQL 5.1 中引入的功能,以帮助用共享对象插件替换 InnoDB 中的静态链接。UNIV_INTERN
不再需要。(漏洞 #16781511)InnoDB: 在调试版本中,执行全表复制的在线
ALTER TABLE
操作会引发断言。该断言是由于在 BLOB 检索期间将表修改日志应用于除最后一个日志块之外的任何日志块时会发生的竞争条件。此修复修改row_log_table_apply_convert_mrec()
以确保获取索引 B 树锁以保护对log->blobs
BLOB 页面的访问。(漏洞#16774118)InnoDB:
OPT_CHECK_ORDER_BY
在调试版本中,在搜索字符串中直接使用二进制时 可能会出现断言NULL
字节和其他无意义的字符。此修复程序将在运行搜索之前删除无意义的字符。(漏洞#16766016)InnoDB: 调试
page_zip_validate()
功能,UNIV_ZIP_DEBUG
在编译时定义时启用,调用page_zip_decompress()
,这反过来会更新一些压缩统计信息。这会导致一些 mysql-test-run 测试失败。(漏洞 #16759605)InnoDB: Valgrind 测试返回了内存泄漏错误,这是由修复 Bug #11753153 引入的回归引起的。该
dict_create_add_foreign_to_dictionary
函数将调用pars_info_create
但未能调用pars_info_free
. (漏洞 #16754901)InnoDB: 当函数
trx_rollback_or_clean_recovered()
在崩溃恢复期间回滚或清理事务时,它会从trx_sys
列表中删除 trx 对象,而不释放这些对象使用的内存。为防止内存泄漏,此修复添加了对删除 trx 对象的函数的trx_free_for_background()
调用trx_rollback_resurrected()
(漏洞#16754776)InnoDB:
dict_check_tablespaces_and_store_max_id()
当space_id
等于零 会发生内存泄漏 (漏洞 #16737332)InnoDB: 压缩
page_zip_validate()
页面后一致性检查失败,在page_zip_compress()
. 此问题是由 引起的当记录不包含用户数据字节时page_zip_decompress()
未能正确设置heap_no
例如,当主键为空字符串且所有二级索引字段为 NULL 或空字符串时,会出现没有用户数据字节的记录。(漏洞 #16736929)InnoDB:输出 中缺少逗号
SHOW STATUS
会破坏 MySQL Enterprise Monitor 解析。(漏洞#16723686)InnoDB: 此补丁是一个代码清理,当键未用于列和使用默认
latin1_swedish_ci
排序规则时,它可能会提供较小的性能改进。(漏洞 #16723431)InnoDB:在表导出期间修改了外键约束 标识符中的某些字符 (漏洞 #16722314,漏洞 #69062)
InnoDB: 干净关闭后,
InnoDB
不在.ibd
启动时检查文件头。因此,在崩溃恢复情况下,InnoDB
可能会加载损坏的表空间文件。此修复实施一致性和状态检查以避免加载损坏的文件。(漏洞 #16720368)-
InnoDB: 针对 Bug #11762038 的修复引入的回归会导致
InnoDB
引发不正确的错误消息。该消息指出, “ InnoDB 无法删除/更新具有超过最大深度 20 的级联外键约束的行”。当终止从InnoDB
没有外键约束的表中读取的连接时,会出现错误消息。(漏洞 #16710923)参考:这个问题是 Bug #11762038 的回归。
InnoDB: 陈旧
InnoDB
的 memcached 连接会导致内存泄漏。(漏洞 #16707516,漏洞 #68530)InnoDB:
innodb_log_group_home_dir
在调试版本中,如果不存在 ,则会发生断言失败 如果不存在InnoDB
现在会中止并显示错误消息 ,而不是断言innodb_log_group_home_dir
(缺陷 #16691130,缺陷 #69000)InnoDB:
ALTER TABLE ADD FULLTEXT
由于全文缓存不同步, 现有的全文索引运行后会失效 (错误#16662990,错误#17373659)InnoDB: 进入
INSERT
临时表导致以下断言:ASSERT ID > 0 IN TRX_WRITE_TRX_ID()
。此修复更正了当服务器以只读模式运行时将事务从只读列表移动到读写列表的情况。(漏洞 #16660575)InnoDB: 关闭并重新启动
--innodb-force-recovery
设置为 3 或更大(4、5 或 6)的 InnoDB 并尝试删除表会导致崩溃。innodb_force_recovery
模式设置为 3 或更大时,应阻止 DML 操作并允许 DDL 操作。此修复确保允许 DDL 操作。(漏洞 #16631778)InnoDB:
ALTER TABLE ... ADD KEY
和 之间会出现竞争条件INSERT
,导致“无法清除记录”错误。(漏洞 #16628233)InnoDB: 非常大
InnoDB
的全文搜索 (FTS) 结果可能会消耗过多的内存。此错误修复减少了 FTS 结果的内存消耗,并引入了一个新的配置参数,innodb_ft_result_cache_limit
它将InnoDB
FTS 查询结果缓存的默认大小限制设置为 2000000000 字节。innodb_ft_result_cache_limit
具有无限的最大值,可以动态设置。(漏洞 #16625973)InnoDB: 此修复解决了在已恢复事务的回滚和锁定操作中创建二级索引之间可能发生的竞争条件。竞争条件会破坏二级索引。(漏洞 #16593427)
InnoDB: 压缩临时表上的 DML 操作会导致缓冲区管理器堆栈中出现 Valgrind 错误。(漏洞 #16593331)
InnoDB: 当
ADD PRIMARY KEY
列在ALTER TABLE
语句中重新排序时(例如ALTER TABLE t1 ADD PRIMARY KEY(a,b), CHANGE a a INT AFTER b
,日志申请UPDATE
操作无法找到行。(漏洞 #16586355)InnoDB: 代码回归导致字典操作中的记录锁定等待。为避免在临时表上启动事务而进行的代码修改未能将状态重置回
init
操作完成时的状态。如果事务开始,状态通常由 重置trx_commit
。为了在未来发现类似的问题,此修复程序将断言添加到innobase_commit()
,innobase_rollback()
, 并且 和 未设置ha_innobase::update_thd()
时触发 (漏洞#16575799)trx->dict_operation
trx->dict_operation_lock_mode
InnoDB: 在调试版本中,
assert_trx_in_list()
断言失败,导致竞争条件。此修复程序删除了断言。相同的断言在调用者中得到验证,现有的检查就足够了。(漏洞 #16567258)InnoDB: MySQL printf 工具 (
my_vsnprintf
) 不理解 Microsoft I32 和 I64 整数格式宽度说明符,例如%I64u
用于打印 64 位无符号整数。因此,DBUG_PRINT
无法与%I64u
在 Windows 上定义的 InnoDB UINT64PF 格式一起使用。此修复程序将 Windows 上的非标准“ I64 ” 和“ I32 ”长度修饰符替换 为“ ll ”和“ l ”my_snprintf()
,以便和 都能理解它们ut_snprintf()
。(漏洞 #16559119)InnoDB: 对使用列前缀添加的表的
ALTER TABLE
操作 可能会产生不正确的结果。(漏洞 #16544336)InnoDB
PRIMARY KEY
InnoDB: 对于
ALTER TABLE
操作InnoDB
的表操作,表上的其他事务可能会在复制过程中失败。但是,如果此类事务发出部分回滚,则回滚将被视为完整回滚。(漏洞 #16544143)InnoDB: 包含
row0purge.h
文件包含自引用包含。(漏洞 #16521741)InnoDB: 在事务提交期间,
prepare_commit_mutex
获取以保留提交顺序。如果提交操作失败,事务将被回滚,但互斥锁不会被释放。随后的插入操作将无法获取相同的互斥体。此修复程序prepare_commit_mutex
在innobase_rollback
. (漏洞 #16513588)InnoDB: 线程
recv_writer
只会在所有重做日志扫描完成后启动。在多次重做日志扫描的情况下,累积的重做记录将在每次扫描之后和处理下一次扫描之前应用。缺少recv_writer
帮助刷新的线程会减慢恢复速度或导致服务器启动超时。此修复可确保recv_writer
线程在处理第一个扫描批次之前启动。(漏洞 #16501172)InnoDB: 在某些情况下,LRU 刷新会花费很长时间,可能会影响所有刷新活动并导致关闭超时。(漏洞 #16500209)
InnoDB: 当字符集表
InnoDB
memcachedtest.demo_test
表无法工作utf8
(漏洞 #16499038)InnoDB: 在线程被迫进行单页刷新的情况下,
fsync()
将为所有数据文件触发。此修复允许同步单页刷新。(漏洞 #16477781)InnoDB: 此修复
OS_THREAD_SLEEP
从 InnoDB 中删除了对的大多数调用。(错误#16472953,错误#68588)InnoDB:
FLUSH TABLES ... FOR EXPORT
从缓冲池中刷新页面时经常休眠。(漏洞 #16471701)InnoDB: 并发插入全文表会导致部分插入失败。在对隐藏的全文搜索文档 ID 列执行插入操作时,会为全文搜索文档 ID 生成重复值。(漏洞#16469399)
InnoDB: memcached
InnoDB
文件描述符泄漏会导致严重错误。(漏洞#16466664)InnoDB: 该
page_zip_available
函数会对某些字段进行两次计数。(漏洞 #16463505)InnoDB: 此修复将
IB_ULONGLONG_MAX
常量LSN_MAX
为代码引用日志序列号的TRX_ID_MAX
位置trx->no
为初始化为未定义值的位置。此更改不会改变常量的值。(漏洞 #16458660)InnoDB: 此修复更正了 InnoDB 错误 6025 的文本,该文本指出 “ InnoDB:无法在 ./ib_logfile0 模式下打开读取。”。更正后的消息指出, “ InnoDB: ./ib_logfile0 无法以读取模式打开。”消息结构中的变量和模式被调换了。(漏洞#16434398)
InnoDB:
innodb_data_file_path
当使用并保留当前日志文件 更改共享表空间文件名InnoDB
将创建一个新的表空间文件并覆盖日志文件,从而导致数据字典与磁盘上的表不匹配。如果存在不一致的系统表空间、撤消表空间或重做日志文件,此错误修复可确保InnoDB
不会创建新的表空间。(漏洞 #16418661)InnoDB:使用该算法 创建外键约束 设置为 0 ()。因此,不会执行适当的重复 ID 检查。(漏洞 #16413976)
ALTER TABLE
INPLACE
foreign_key_checks
SET foreign_key_checks = 0;
InnoDB: 当InnoDB shutdown mode(
innodb_fast_shutdown
)设置为2,master线程进入flush循环后,在某些情况下线程会无法退出。这可能会导致关机挂起。(漏洞#16411457)InnoDB: 在调试版本中,插入失败,断言无效:
sync_thread_levels_g(array, level - 1, TRUE)
。(漏洞 #16409715)InnoDB:
!recv_no_log_write
读取页面时崩溃恢复因断言而 失败 (漏洞 #16405422)InnoDB:
ALTER TABLE
执行表复制 的此修复通过将当前日志序列号 (LSN) 添加到先前表或文件名的末尾,使临时表和表空间名称更加独特。例如,表名 “test/#sql-ib21
”变为 “test/#sql-ib21-1701208
, ”,其中1701208
是当前 LSN。LSN 和表 ID 都需要确保名称是唯一的,因为理论上可能多个线程具有相同的 LSN。包括表 ID 允许临时名称与表相关联。(漏洞 #16403420)InnoDB: 多个并发调用
dict_update_statistics()
将导致不必要的服务器负载。(漏洞 #16400412)InnoDB: 在 64 位 Windows 构建中,
INNODB_BUFFER_POOL_SIZE
不会接受超过 32GB 的分配。此限制是由于一个错误,该错误在 64 位 Windows 构建中将 InnoDB 缓冲池大小的内部值截断为 32 位。(漏洞 #16391722,漏洞 #68470)InnoDB: 以只读模式重新启动 InnoDB 并运行工作负载偶尔会返回一个
global_segment < os_aio_n_segments
断言。(漏洞 #16362046)InnoDB:
DROP DATABASE
如果数据库包含一个 InnoDB 表,该表在外部数据目录中有一个数据文件,则失败。外部数据文件具有 MySQL 无法识别的“ InnoDB 符号链接”文件类型 (.isl
此修复程序添加了.isl
一个已知的 InnoDB 文件类型。(漏洞 #16338667)InnoDB:
RENAME TABLE
由于 MySQL mutex 获取死锁会导致挂起。(漏洞 #16305265)InnoDB: 此修复程序删除了受
UNIV_LOG_ARCHIVE
宏保护的过时和不完整的代码。(漏洞 #16296837)InnoDB: 在测试
FLUSH TABLES
由于缺少清除线程已停止的确认,操作导致超时。(漏洞#16277387)InnoDB: 对于压缩表,页面重组操作总是将
MLOG_ZIP_PAGE_REORGANIZE
记录写入重做日志,只有在innodb_log_compressed_pages=OFF
. 当 时innodb_log_compressed_pages=ON
,页面重组操作应该记录压缩页面图像。(漏洞 #16267120)InnoDB: 当表通过外键约束链接时,加载一个表将递归打开其他链接表。当许多表通过外键约束链接时,这有时会导致线程堆栈溢出,从而导致服务器退出。由外键约束链接的表现在以迭代方式加载。也以递归方式执行的级联操作现在使用显式堆栈迭代执行。(错误#16244691,错误#65384)
InnoDB: 禁用外键检查 并执行 a后,重新启动服务器后无法再访问该表。此修复允许在. 当表可访问时,用户必须重新创建丢失的索引以满足外键约束。(错误#16208542,错误#68148)
SET
foreign_key_checks=0
DROP INDEX
SET foreign_key_checks=0
InnoDB: 当事务处于
READ COMMITTED
隔离级别时,插入行时仍然在二级索引中获取间隙锁。当扫描二级索引以查找重复项时,会发生这种情况。无论事务隔离级别如何,该 函数row_ins_scan_sec_index_for_duplicate()
始终调用该函数 此修复根据事务隔离级别修改 函数以 使用 或 (漏洞 #16133801,漏洞 #68021)row_ins_set_shared_rec_lock()
LOCK_ORDINARY
row_ins_scan_sec_index_for_duplicate()
row_ins_set_shared_rec_lock()
LOCK_ORDINARY
LOCK_REC_NOT_GAP
InnoDB: 在只读模式下运行时,持久统计信息将被不必要地禁用。当以只读模式运行时,从磁盘获取统计信息不涉及对磁盘数据的任何修改,除了 when
ANALYZE TABLE
运行。此修复为只读模式启用持久统计信息。(漏洞 #16083211)InnoDB: 启动mysqld时
--innodb-log-buffer-size=50GB
分配内存失败并返回 NULL。对于非调试构建,没有适当的检查并且发生了分段错误。此修复程序添加了一条日志消息,指出无法分配内存,并添加了一个断言。(漏洞 #16069598,漏洞 #68025)InnoDB: 在
UNIV_DEBUG
调试版本中启用时,buf_validate()
通常会调用它,有时会在信号量等待超时测试中导致错误警报。此修复增加了计数器值以减少误报。(漏洞 #16068056)InnoDB: 打印 UTF-8 表名时,
InnoDB
会截断表名,导致缓冲区不完整和随后的 Valgrind 错误。此错误修复还解决了不正确的调试错误消息。(漏洞 #16066351)InnoDB: 该
explain_filename
函数通过解析文件名来提供有关分区的信息,在尝试解析没有分区信息的文件名时会返回错误。(漏洞 #16051728)InnoDB: 停止服务器,从数据目录中删除数据库表 (d1.t1)
.frm
文件,重新启动服务器并删除数据库 (d1),将导致断言。(漏洞 #16043216)InnoDB: 在处理读写工作负载时,InnoDB 会扫描比刷新所需更多的页面,从而不必要地消耗 CPU 资源。(漏洞 #16037180)
InnoDB:
TRUNCATE TABLE
无法处理调用 创建新索引btr_create
时 (漏洞 #16026889)btr_create
TRUNCATE TABLE
InnoDB:
innodb_row_lock_time_max
和 会发生溢出innodb_row_lock_current_waits
。此修复修改了storage/innobase/srv/srv0srv.c
. (漏洞 #16005310)InnoDB: 尝试在
innodb_read_only
模式下创建表导致以下错误:ERROR 1015 (HY000): Can't lock file (errno: 165 - Table is read only)
。(漏洞 #15963619)InnoDB: 活动
FLUSH TABLES ... FOR EXPORT
线程会在关闭期间导致挂起。该修复确保trx_is_interrupted()
在ibuf_merge
. (漏洞 #15953255)InnoDB: innochecksum在压缩表上运行时会返回错误。(缺陷 #14612872,缺陷 #66779)
InnoDB:由重复键错误引起的 多行
INSERT ... ON DUPLICATE KEY UPDATE
插入失败将导致重复的自动增量值。(漏洞 #14483484,漏洞 #66301)InnoDB:如果因崩溃而中断,
.ibd
文件和InnoDB
数据字典 之间的不匹配TRUNCATE TABLE
恢复后会遇到不匹配。为避免此问题,将截断表信息写入临时驻留在日志目录中的截断日志文件。截断日志文件具有以下命名约定: . 如果操作成功,截断日志文件将被删除。如果ib_
space_id
_trunc.logTRUNCATE
TRUNCATE
操作因崩溃而中断,在恢复期间从截断日志文件中读取信息,应用日志记录,并删除截断日志文件。(错误#14174004、错误#13997329、错误#17227149、错误#17238361)InnoDB: 文档错误地指出 或
START TRANSACTION WITH CONSISTENT SNAPSHOT
时才提供一致的快照 。 仅适用于 . 所有其他隔离级别都将被忽略。文档已修改,现在只要 忽略该子句就会生成警告。(错误#14017206,错误#65146)REPEATABLE READ
SERIALIZABLE
START TRANSACTION WITH CONSISTENT SNAPSHOT
REPEATABLE READ
WITH CONSISTENT SNAPSHOT
InnoDB: 后台
srv_master_thread
线程,它监视服务器活动并在服务器处于非活动状态或处于关闭状态时执行页面刷新等活动,以一秒延迟循环运行。srv_master_thread
休眠前未能检查服务器是否处于关机状态。(缺陷 #13417564,缺陷 #63276)-
InnoDB: 在错误日志中,在操作期间会报告数据字典中缺少全文搜索索引
TRUNCATE TABLE
。重启mysqldInnoDB
后会报 如下 错误: “ InnoDB: Error: trying to load index idx13 for table test/g1 but the index tree has been freed. . ” (漏洞 #12429565)参考资料:另请参阅:Bug #17402002。
InnoDB: 当
innodb_buffer_pool_size
在 32 位系统上提供的值太大时,错误消息会错误地引用内部变量 ,innobase_buffer_pool_size
而不是innodb_buffer_pool_size
。(缺陷 #11759578,缺陷 #51901)InnoDB:使用 Visual Studio 2005 在 Windows Vista 64 位上 编译
InnoDB
会导致编译错误。(缺陷 #11752731,缺陷 #44004)InnoDB:
row_check_index_for_mysql
在索引扫描或操作期间检查 NULL 字段 的CHECK TABLE
会不必要地迭代。感谢 Po-Chun Chang 提供的补丁解决了这个问题。(错误#69377,错误#16896647)InnoDB:在布尔模式下 运行
InnoDB
全文搜索时,在*
搜索字符串 ('*string'
) 会导致错误,而对于MyISAM
,前缀星号将被忽略。InnoDB
为确保和之间的兼容性MyISAM
,InnoDB
现在以与 相同的方式处理带前缀的星号MyISAM
。(缺陷 #68948,缺陷 #16660607)InnoDB: 按降序键顺序连续删除会导致
InnoDB
索引页不足。当InnoDB
索引页未满时,它会与左兄弟节点或右兄弟节点合并。为确定兄弟节点是否可用于合并而执行的检查未正常运行。(缺陷 #68501,缺陷 #16417635)-
InnoDB: 设置
foreign_key_checks=0
并运行ALTER TABLE
以更改具有多个具有外键约束的表的数据库的外键列的字符集将使数据库处于不一致状态。由于检测到不一致,后续ALTER TABLE
操作(使用该COPY
算法)foreign_key_checks=1
部分执行的ALTER TABLE
操作的恢复也会失败,导致被更改的表丢失。当使用子句运行相同的ALTER TABLE
操作时RENAME
,不会检测到不一致,但如果ALTER TABLE
操作由于其他原因失败,则部分执行的恢复ALTER TABLE
失败,结果相同。foreign_key_checks
在恢复以前的表定义时, 错误修复会暂时禁用 。(缺陷 #65701,缺陷 #14227431) InnoDB: 创建带有注释或默认文本值的表,其中包含用反斜杠转义的撇号有时会导致 InnoDB 存储引擎忽略外键定义。(缺陷 #61656,缺陷 #12762377)
InnoDB:已初始化但从未使用过 的
pthread_mutex
,commit_threads_m
已从代码库中删除。(缺陷 #60225,缺陷 #11829813)InnoDB:
exit(1)
在很多情况下,InnoDB在遇到致命错误时 调用exit(1)
调用不会产生故障转储或提供有关进程状态的信息。此外,在 Windows 上,exit(1)
调用不会在事件查看器中报告崩溃的进程。此修复 在许多地方exit(1)
用ut_error
(错误#56400,错误#11763660)分区:
t1
使用 创建表CREATE TABLE ... PARTITION BY LIST ... PARTITION ... VALUES IN (NULL)
,然后尝试执行CREATE TABLE ... LIKE t1
导致服务器失败。(漏洞 #16860588)分区:当升级到 MySQL 5.5.31 或更高版本时,当遇到分区表时 ,一条消息会写入mysql_upgrade
ALGORITHM
的输出中,该分区表需要选项来保持与原始文件的二进制兼容性;该消息包括ALTER TABLE
进行更改所需的声明。对于这样一个具有足够多分区的表,在ALTER TABLE
可以写入完整语句之前,消息被错误截断。(漏洞 #16589511)-
分区: 当在
WHERE
针对按范围分区的表的查询条件中指定范围时,并且指定的范围完全在其中一个分区内时,也会检查下一个分区的行,尽管它应该被删除。t
假设我们有一个使用以下 SQL 语句创建 的范围分区表:CREATE TABLE t ( id INT AUTO_INCREMENT, dt DATETIME, PRIMARY KEY (dt,id), UNIQUE KEY (id,dt) ) PARTITION BY RANGE COLUMNS(dt) ( PARTITION p0 VALUES LESS THAN ('2013-01-01'), PARTITION p1 VALUES LESS THAN ('2013-01-15'), PARTITION p2 VALUES LESS THAN ('2013-02-01'), PARTITION p3 VALUES LESS THAN ('2013-02-15'), PARTITION pmax VALUES LESS THAN (MAXVALUE) );
此处显示了在运行时出现此问题的查询示例
t
:SELECT COUNT(*) FROM t WHERE dt >= '2013-02-01' AND dt < '2013-02-15';
在这种情况下,
pmax
即使WHERE
子句中给出的范围完全位于 partition 内,也会检查 partitionp3
。(漏洞 #16447483) -
分区: 删除分区表时,
.par
首先删除表的文件,然后再删除表定义或数据。这意味着,如果服务器在删除操作期间发生故障,则表可能处于不一致状态,既无法访问也无法删除。此问题的修复进行了以下更改:
现在,删除分区表时,
.par
直到删除所有表数据后才会删除表的文件。在执行
DROP TABLE
分区表时,如果确定其.par
文件丢失,.frm
则立即删除该表的文件,从而强制完成删除。
(错误#13548704,错误#63884)
复制;Microsoft Windows: 在 Windows 平台上,
SHOW SLAVE STATUS
在从属 I/O 线程因错误而终止时发出导致从属失败。(漏洞 #16662771)复制: 服务器在重置表时尝试执行表的内部截断
slave_worker_info
,即使这是 DDL 操作并且不应与 DML 操作同时使用。为了防止这种情况发生,重置现在执行顺序行删除来代替截断操作。(错误#17286858,错误#69898)-
复制: 计算了在执行期间创建的表映射事件的数据大小,但不是在从网络数据包创建事件时计算的。当尝试将事件写入缓存或二进制日志时,当此类事件的数据字段被视为长度等于 0 时,这可能会在以后导致问题。
为了避免将来出现这种性质的问题,现在在两种情况下都会计算表格映射的数据大小。(漏洞 #17164074)
Replication: 当该设置为大于1的值
--relay-log-info-file
一起使用时 , mysqld启动失败。(漏洞 #17160671)slave_parallel_workers
-
Replication: 二进制日志轮转失败导致的提交错误在二进制日志文件中产生了一个事件事件,并以错误消息中断了用户会话,其中没有提到重播事件事件时从属服务器将在稍后停止。
现在,当遇到二进制日志轮换失败时,一个更有帮助的错误消息会写入日志,提醒用户及时进行调查。(漏洞 #17016017)
-
复制: 导致错误 #16579083 中修复的问题的条件继续引发错误,即使条件本身不再导致问题发生。(漏洞 #16931177,漏洞 #69369)
参考资料:另请参阅:Bug #16271657、Bug #16491597、Bug #68251、Bug #68569。此问题是 Bug #16579083 的回归。
复制:mysqlbinlog选项
--rewrite-db
导致 该USE
选项未引用的数据库也是如此。(漏洞 #16914535)Replication: 当
rpl_semi_sync_master_timeout
设置为非常大的值时,半同步复制变得非常慢,尤其是当许多会话并行工作时。发现计算这个超时的代码是在等待循环本身内部,结果是增加值rpl_semi_sync_master_timeout
导致重复迭代。此修复改进了用于计算唤醒时间的方法,并将其移出等待循环,以便仅执行一次。(漏洞 #16878043,漏洞 #69341)-
复制:
FLUSH TABLES WITH READ LOCK
通过向STOP SLAVE
从站发出新连接,然后SHOW SLAVE STATUS
使用原始连接 ,可能会在发出后导致死锁对此的修复包括添加 系统变量,以控制在返回警告之前
rpl_stop_slave_timeout
等待从发出后停止的时间(以秒为单位) 。STOP SLAVE
(漏洞 #16856735) 复制: 可以在
CHANGE MASTER TO
语句中将MASTER_DELAY
选项设置为大于支持的最大值 ()。此外,由于设置为大于的值 没有得到正确处理。(错误#16820156、错误#16960315、错误#69249、错误#69469)231 − 1
MASTER_DELAY
232
复制: 一些使用变量的表达式没有被正确处理
LOAD DATA
。(漏洞 #16753869)-
复制: 在某些情况下, 尽管当前未实现此变量(该名称已保留以备将来使用)引用
Last_Error
了输出列 现在在这种情况下,错误消息不再引用该变量。(漏洞 #16742886,漏洞 #69096)SHOW SLAVE STATUS
GTID_NEXT_LIST
参考资料:另请参阅:Bug #16715809、Bug #69045。
复制: 当目标数据库的名称包含任何下划线 () 字符时, mysqlbinlog失败。 (漏洞 #16737279)
--rewrite-db
_
-
复制:在启用 GTID 的主服务器上 发出
FLUSH TABLES
语句导致复制失败。发现此错误行为是由 Bug #16062608 的修复程序引入的,它不允许执行隐式提交但在gtid_next
设置为 . 以外的任何值AUTOMATIC
。该修复程序中所做的更改已被还原,并且(再次)允许此类语句而不考虑此变量的值。(漏洞 #16715809,漏洞 #69045)参考资料:恢复补丁:Bug #16062608。
复制:尝试使用带 选项的mysqlbinlog 从基于行格式的二进制日志还原单个数据库时,时间点恢复可能会失败
--database
(漏洞 #16698172)-
复制:
InnoDB
在执行RESET MASTER
语句 导致丢失先前事务的提交时崩溃错误 发生这种情况是因为准备阶段导致刷新到磁盘,而提交阶段没有在InnoDB
.为了解决这个问题,
RESET MASTER
现在导致存储引擎日志在提交时被刷新。(错误#16666456,错误#68932) -
复制: 当从二进制日志中处理一个
Update_rows_log_event
或Delete_rows_log_event
时,之前的图像被散列并存储在散列表中。在此之后,扫描原始表以查找所需的记录;后续处理对从原始表中获取的每条记录进行哈希处理,并在哈希表中对其执行查找。但是,从最初设置为的图像中读取的列NULL
可能包含随机或 “垃圾”数据,导致查找(以及复制)失败并出现诸如Could not execute Update_rows event on table...之类的错误。(漏洞 #16621923)参考资料:另请参阅:Bug #11766865。此问题是 Bug #16566658 的回归。
复制: 当与 options 一起使用时 , mysqldump在引号内打印端口号,就好像它是一个字符串值而不是一个整数。(漏洞 #16615117)
--dump-slave
--include-master-host-port
复制:
log_event.h
如果头文件包含在包含多个源文件的应用程序中,则会 发生链接器错误rpl_tblmap.cc
包含在log_event.h
. 此修复程序将包含的内容移动rpl_tblmap.cc
到使用log_event.h
. (漏洞#16607258)Replication:
SHOW SLAVE STATUS
当工作线程未能应用事件时 显示的错误事件组的 GTID 也未显示。现在在这种情况下,显示的文本Last_SQL_Error
以(物理)主二进制日志坐标为前缀,以及gtid_next
设置时的值。(漏洞 #16594095)-
复制: 组提交期间的会话附件错误导致事务回滚(如预期的那样),但发生这种情况的事务仍然写入二进制日志并复制到从属服务器。因此,这样的错误可能会导致主从不匹配。
现在,当发生此错误时,会在二进制日志中写入一个事件事件,导致复制停止,并通知用户二进制日志中可能存在冗余事件。现在还会向客户端报告一个额外的错误,表明正在进行的事务已被回滚。(漏洞 #16579083)
Replication: 由于某些系统上的时间分辨率问题,转储线程从从属回复所花费的时间可以计算为小于零,导致Semi-sync master wait for reply fail to get wait time错误. 由于这种情况不会对复制产生负面影响,因此由这些情况引起的错误已减少为警告。(漏洞#16579028)
复制:
--log-slave-updates
与一起 运行服务器--replicate-wild-ignore-table
或--replicate-ignore-table
在某些情况下导致不记录用户变量的更新。(漏洞 #16541422)复制: 当使用mysqlbinlog和 mysql客户端在启用了 GTID 的服务器上前滚两个或多个二进制日志
gtid_next
时,从第一个二进制日志切换到第二个二进制日志时变量没有正确重置,导致处理停止并出现错误观点。(漏洞 #16532543)复制:尝试处理多个文件时 , mysqlbinlog选项
--include-gtids
、--exclude-gtids
和--skip-gtids
(漏洞 #16517775)复制: 当在二进制日志中发现一个或多个 GTID 日志事件但没有以前的 GTIDs 日志事件时,由此产生的错误处理不当并导致服务器故障。(这是一种极其罕见的情况,在正常情况下永远不会发生,并且可能表明二进制日志文件已以某种方式损坏。)现在在这种情况下,会发出适当的错误并得到正确处理。(漏洞 #16502579,漏洞 #68638)
复制: 尝试
START SLAVE
在导入新slave_master_info
和slave_relay_log_info
表后执行失败并显示空错误消息。现在在这种情况下会发出适当的错误和消息。(缺陷 #16475866,缺陷 #68605)复制:
slave_relay_log_info
在清空表 后重新启动服务器 导致mysqld在尝试返回错误时失败。(漏洞 #16460978,漏洞 #68604)Replication:
MASTER_USER
specifying orMASTER_PASSWORD
with 时发出的警告CHANGE MASTER TO
由于多种原因不明确,已改为读取, Storing MySQL user name or password information in the master info repository is not secure,因此不推荐。请考虑为 START SLAVE 使用 USER 和 PASSWORD 连接选项;有关详细信息,请参阅 MySQL 手册中的“START SLAVE 语法”。 (错误#16460123、错误#16461303、错误#68602、错误#68599)复制: 由于在二进制日志变满时并发尝试旋转,因此执行了额外的二进制日志旋转,允许成功。这可能会导致不必要地创建许多小的二进制日志文件。(错误#16443676,错误#68575)
复制: 当执行事件的大小超过为缓冲区 (
slave_pending_jobs_size_max
) 设置的最大值时,基于行的复制可能会因Waiting for slave workers to free pending events 而挂起。(漏洞 #16439245,漏洞 #68462)复制: 在与主服务器断开连接后,从服务器在某些情况下可能会在重新连接时错误地报告它收到了一个大于 的数据包
slave_max_allowed_packet
,从而导致复制失败。(漏洞 #16438800,漏洞 #68490)复制: 使用基于行的复制的从属无法正确读取包含类型列的行
MYSQL_TYPE_DECIMAL
(旧式十进制,在 MySQL 5.0.3 之前使用)。现在,如果从站接收到这种类型的数据,它就会抛出一个错误。您可以使用 ; 将旧式DECIMAL
格式转换为当前 MySQL 版本中使用的二进制格式ALTER TABLE
;有关详细信息,请参阅 从 MySQL 4.1 升级到 5.0。(漏洞 #16416302)Replication: MTS slave 恢复期间的 SQL 线程错误导致 slave 失败。(缺陷 #16407467,缺陷 #68506)
复制: 当使用选项 , mysqlbinlog无法重置用于存储文件中当前位置的计数器。(漏洞 #16316123,漏洞 #68347)
--read-from-remote-server
--stop-never
--base64-output=decode-rows
--verbose
Replication: 使用mysqldump备份MySQL 5.6.4及之前版本创建的数据库时,设置
--set-gtid-purged=AUTO
导致备份失败,因为5.6.5之前版本的MySQL不支持GTIDs,无法判断是否为GTIDs已为数据库启用。此修复确保 mysqldumpSET @@GLOBAL.gtid_purged
在备份任何 5.6.5 之前的数据库时不会尝试输出 (错误#16303363,错误#68314)-
复制:
DROP TEMP TABLE IF EXISTS
语句可能导致在时间点恢复操作期间应用二进制日志失败。这是因为,当使用基于行的复制时,服务器会附加IF EXISTS
到写入二进制日志的任何DROP TEMPORARY TABLE
语句,并且从属 SQL 线程不会检查 * 通配符过滤规则DROP TEMPORARY TABLE IF EXISTS
。如果--log-slave-updates
在从机上也启用了,则这样的语句之前有一个USE
语句。如果语句引用的数据库USE
不存在,则语句失败,并停止复制。现在,写入
DROP TEMPORARY TABLE IF EXISTS
二进制日志时,没有USE
写入语句,语句中的表名DROP TEMPORARY TABLE
是完全限定的表名。(漏洞 #16290902) 复制: 死锁有时会发生在具有大量并发更新的组提交上,以及当一个客户端从提交中持有锁而另一个客户端在轮换二进制日志时强加锁。(错误#16271657、错误#16491597、错误#68251、错误#68569)
-
复制: 由于事务的 GTID 已被记录而跳过事务后,所有剩余的已执行事务都被错误地跳过,直到
gtid_next
指向不同的 GTID。为避免这种不正确的行为,所有事务(即使是那些已被跳过的事务)在提交或回滚时都被标记为未定义,因此每当在同一
SET @@SESSION.gtid_next
语句之后执行第二个事务时都会抛出错误。(漏洞 #16223835) 复制: 启用半同步复制后,使用创建的事件自动丢弃到主服务器上
ON COMPLETION NOT PRESERVE
会导致主服务器失败。(漏洞 #15948818,漏洞 #67276)复制: 在事务中修改大量数据会导致创建临时文件。
max_binlog_cache_size
当修改的数据大小超过二进制日志缓存 ( )的大小时,将创建此类文件以前,此类文件会一直存在,直到客户端连接关闭,这可以让它们不断增长,直到耗尽tmpdir
. 为防止这种情况发生,在给定事务中以这种方式创建的临时文件的大小现在在事务提交或回滚时重置为 0。(错误#15909788、错误#18021493、错误#66237)Replication: 当master有多个自增列的表, slave
--replicate-ignore-table
由于规则 原因忽略了至少其中一张表 ,但至少有一张被复制了,即便如此——被复制的一张或多张表至少有一个触发器更新仅存在于从属服务器上的一个或多个表——更新主服务器上的任何自动增量表导致复制失败。(缺陷 #15850951,缺陷 #67504)复制: 将
SET
列设置到NULL
存储过程内部导致复制失败。(缺陷 #14593883,缺陷 #66637)复制: 二进制日志内容有时会损坏,因为
MYSQL_BIN_LOG::write_cache
当函数报告“0”时,该函数始终认为它已到达缓存末尾my_b_fill()
,而这也可能意味着发生了错误。此修复可确保每当my_b_fill()
返回“0”时,都会对 执行错误检查info->error
。(缺陷 #14324766,缺陷 #60173)复制: 内部函数
MYSQL_BIN_LOG::open_binlog()
包含一个不需要的变量,已被删除。(漏洞 #14134590,漏洞 #60188)复制:
PURGE BINARY LOGS
按设计不会删除正在使用或活动的二进制日志文件,但在发生这种情况时没有提供任何通知。现在,如果在这种情况下未删除日志文件,则会发出警告;此警告包括有关文件的信息,或者在发出语句时文件未被删除。(错误#13727933,错误#63138)复制: 当从站在等待下一个成功的作业被添加到工作队列时停止时,多线程从站协调器可能会泄漏内存。(漏洞 #13635612)
-
复制: 当使用二进制日志记录格式复制到
BLACKHOLE
表时,无法应用更新和删除,因此会被跳过。现在,无论何时发生,都会为此生成警告。笔记binlog_format=STATEMENT
复制到使用BLACKHOLE
存储引擎的表时推荐使用。(漏洞 #13004581)
复制:
LOAD DATA
如果语句失败, 创建的临时文件(缺陷 #11763934,缺陷 #56708)复制: 在从机上的客户端线程执行 a
FLUSH TABLES WITH READ LOCK
并随后在主机上进行一些更新后,从机在执行时挂起SHOW SLAVE STATUS
。(漏洞 #68460,漏洞 #16387720)Microsoft Windows: 在 Microsoft Windows 上,
--local-service
给mysqld.exe
可能会导致启动时崩溃。(错误#16999777,错误#69549)涉及存储函数的查询的执行时间受同一会话中前一条语句生成的警告数量的影响。(漏洞 #23031008,漏洞 #80922)
如果存储例程条件处理程序重新发出信号 ,SQL 条件项(例如
TABLE_NAME
、 等)的内容将丢失。CONSTRAINT_NAME
(漏洞 #17280703)AES_ENCRYPT()
当 MySQL 使用 192 或 256 的值构建时AES_DECRYPT()
无法正常工作AES_KEY_LENGTH
。(缺陷 #17170207)SELECT * from performance_schema.events_statements_current
由于负载下的竞争条件,可能会引发断言。(漏洞 #17164720)InnoDB
在名称以数字开头的数据库中全文搜索失败。(漏洞 #17161372)成功的连接未能重置用于计算连续连接失败的每个 IP 地址计数器。
max_connect_errors
当达到限制时,这可能会导致主机被阻止 。(漏洞 #17156507)在启用线程池插件并使用 SSL 的情况下,一个连接中的错误可能会影响其他连接,导致它们失去连接。(漏洞 #17087862)
在负载下,截断
accounts
Performance Schema 表可能会导致服务器退出。(漏洞 #17084615)my_pthread.h
unconditionally includedpfs_thread_provider.h
,一个未安装的头文件,导致在针对已安装的头文件编译MySQL应用程序时编译失败。(漏洞 #17061480)与 5.6 相比,MySQL 5.7 中表的
POINT
列 索引查找速度较慢。InnoDB
(漏洞#17057168)Performance Schema 是为嵌入式服务器构建而构建的。这不再发生。(漏洞 #17041705)
可能会从消息缓冲区读取已关闭的连接。(漏洞 #17003702)
在使用游标从
UNION
查询中获取行时,服务器可能会退出。(漏洞 #16983143)范围优化器错误地假定空间索引上的任何几何函数都以 ROWID 顺序返回行,这可能导致不正确的查询结果。(漏洞 #16960800)
mysql_secure_installation没有正确清理
mysql.proxies_privs
已删除帐户的表。(漏洞 #16959850)线程池插件中的竞争条件可能会导致状态变量
Aborted_connects
不递增,并允许同一线程 ID 发生并发终止。(漏洞 #16959022)在服务器启动时,可以将
validate_password_length
系统变量设置为小于与其相关的其他密码长度变量的值所允许的值。(漏洞#16957721)keycache_*
服务器启动期间变量 的初始化(请参阅多键缓存)可能会写入不正确的内存。(漏洞 #16945503)对于调试版本,inside 的不当使用
SAFE_MUTEX
导致dbug.c
不同的代码区域对互斥锁的大小和内容有不同的想法。这可能会导致越界内存写入。(漏洞 #16945343)性能模式可能会使用不正确的检测信息生成线程。(漏洞 #16939689)
服务器对任何语句的
LOCK_active_mi
和 互斥锁进行 了过度锁定 ,即使模式与使用这些互斥锁的状态变量不匹配(, , , , )。现在尝试显示那些变量不会锁定那些互斥锁。这可能会导致数据稍微陈旧,但性能会更好。(漏洞 #16904035)active_mi->rli->data_lock
SHOW STATUS LIKE 'pattern'
Slave_heartbeat_period
Slave_last_heartbeat
Slave_received_heartbeats
Slave_retried_transactions
Slave_running
InnoDB
在表格 中进行全文短语搜索可能会读取不正确的内存。(漏洞 #16885178)不可能将多个主要版本的 MySQL 保存在同一个yum存储库中。(漏洞 #16878042)
在这些情况下,多次执行存储过程会导致内存消耗过多:1) 存储过程有一条 SQL 语句在验证期间失败。2) 存储过程有一个需要重新准备的 SQL 语句。(漏洞 #16857395)
InnoDB
如果 BKA 连接缓存中缓冲的表使用存储引擎(例如或MyISAM
具有小端存储格式),然后下一个表使用存储引擎(例如NDB
本机), 则批处理密钥访问方法可能会在大端机器上返回不正确的结果-endian 存储格式。(漏洞 #16853897)string 的错误字符串
ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE
包含硬编码的数据库名称 ('mysql.%s'
),当错误引用不同数据库中的表时,这是不正确的。(漏洞 #16813605)当优化器考虑下推包含可更新用户变量但不包含索引字段的索引条件时,可能会引发断言。(漏洞 #16804581)
如果
SET
包含子查询的语句导致内部死锁InnoDB
,InnoDB
则回滚事务。然而,SQL 层并没有注意到这一点并继续执行,最终导致内部出现断言InnoDB
。(漏洞 #16802288)删除服务器 RPM 包不会关闭正在运行的现有服务器。(漏洞#16798868)
MySQL 5.7 中的一些错误与 MySQL 5.6 中的编号不同。(漏洞 #16780120)
当启动被中止时 ,服务器中的竞争条件可能会导致 mysqld进程 ID 文件出现问题。作为此问题修复的一部分, mysqld_safe
mysqld_safe.pid
现在在服务器的数据目录中创建自己的 PID 文件 。(缺陷 #16776528,缺陷 #70308)HAVE_REPLICATION
now 是从 CMake而不是 in 设置的,my_global.h
因此它不依赖于是否my_global.h
包含在内。(漏洞 #16768511)-
INSERT ... ON DUPLICATE KEY UPDATE
如果将没有默认值的列设置为 ,可能会导致服务器退出DEFAULT
。(漏洞#16756402)参考资料:这个问题是 Bug #14789787 的回归。
CMake现在假定存在标准的 C 头文件,例如
stdlib.h
和stdarg.h
. (漏洞#16748528)在准备好的语句或存储例程中,如果子查询的
HAVING
子句引用了父查询的 GROUP BY 的某些列,则服务器可能会退出。(漏洞 #16739050)-DMY_ATOMIC_MODE_RWLOCKS=1
在 MySQL 不支持无锁原子操作(例如 ARM)的平台上 编译失败 。(漏洞#16736461)一般查询日志中的密码重写现在也适用于准备好的语句。(漏洞 #16732621)
修改了代码库以说明gcc 4.8 引入的新警告检查。(漏洞 #16729109)
fill_locks_row()
负责为表提供数据 的函数INFORMATION_SCHEMA.INNODB_LOCKS
将尝试在缓冲池中查找 B 树页面以查找INFIMUM
和SUPREMUM
记录,这两者都有一个预定义的heap_no
. 这会产生不必要的缓冲池争用,并导致当页面在缓冲池中不可用时信息被忽略。此修复PAGE_HEAP_NO_INFIMUM
程序 从.heap_no=0
_ (漏洞 #16684523)PAGE_HEAP_NO_SUPREMUM
heap_no=1
fill_locks_row()
运行时系统变量没有显示mysqld
open_files_limit
进程可能拥有 的文件描述符的实际数量,而是在调整启动时指定的值后请求的数量。(漏洞#16657588)线程池插件中的终止处理会遇到超时问题和 Valgrind 警告。(漏洞 #16633880)
在 Performance Schema 表中设置
PROCESSLIST_STATE
值的开销THREADS
已减少。(漏洞 #16633515)在存储过程中,对带有分区的表重复执行准备好的
CREATE TABLE
语句可能会导致服务器退出。(漏洞 #16614004)服务器可能会做出有关帐户密码是否已过期的错误决定。(漏洞 #16604641)
Windows 身份验证插件无法为每个连接释放上下文缓冲区。(漏洞#16591288)
session_connect_attrs
在会话执行工作负载时 ,性能模式表中可能偶尔会丢失会话的某些行 。(漏洞 #16576980)DBUG_PRINT()
未启用调试时,宏会不必要地评估参数 。(漏洞#16556597)在 64 位模式下使用 gcc和g++在 Solaris 上编译的一些问题已得到纠正。(漏洞 #16555106)
SHOW WARNINGS
并且SHOW ERRORS
没有正确重置警告计数。(漏洞 #16522662)客户端可以根据连接错误信息的内容判断一个账号是否存在。(错误#16513435、错误#17357528、错误#19273967)
使用 WKB 数据的几何方法执行的输入数据验证不充分,这可能导致 Valgrind 错误或服务器退出。(错误#16510712,错误#12772601)
服务器可能会尝试
filesort
对零大小排序长度进行操作,从而导致它退出。(漏洞 #16503160)-
SELECT
在存储过程中 打开游标可能会导致分段错误。(漏洞 #16499751)参考:这个问题是 Bug #14740889 的回归。
CREATE TABLE
或者ALTER TABLE
如果语句指定了不受支持的选项或缺少某些内容,则可能会失败。以前,此类错误返回为ER_ILLEGAL_HA
。现在它们作为新ER_MISSING_HA_CREATE_OPTION
错误返回。(漏洞 #16498740)启用查询缓存可能会导致可重复读取的事务返回不正确的结果。(漏洞#16497925)
my_load_defaults()
进行了修改以适应 gcc 4.7.2 编译下的一些问题,这些问题可能会导致客户端在选项处理期间崩溃。(漏洞 #16497125)缺少变量初始化导致不正确地返回错误
st_select_lex_unit::explain
并导致断言失败。(漏洞 #16484966)当索引条件下推用于递减范围扫描并且第一个范围区间不包含任何符合条件的记录时,即使其他范围区间包含符合条件的记录,范围扫描的结果也可能为空。(漏洞 #16483273)
用于空间操作的 WKB 读取器可能会失败并导致服务器退出。(漏洞 #16451878)
该
ER_OUTOFMEMORY
错误在某些地方使用时没有传递正确的参数,导致错误的诊断输出。(漏洞 #16449659)未能正确处理全文搜索通配符可能会导致服务器退出。(漏洞 #16446108)
在访问引用连接序列中较早的表的列的
ref
情况下, 优化器试探法不恰当地首选范围访问而不是 访问。ref
(漏洞 #16437940)对于使用
ref
访问CHAR
和VARCHAR
数据类型的查询,ref
访问条件可以作为查询条件的一部分再次评估,或者作为索引条件下推到存储引擎。(漏洞 #16437630)如果优化器正在使用松散索引扫描,则服务器可能会在尝试创建临时表时退出。(漏洞 #16436567)
对嵌套子查询内的聚合表达式的引用可能会导致不正确的结果或服务器退出,其中聚合表达式是在引用外部两层以上的查询块中计算的。(漏洞#16436383)
如果一个表被标记为只包含
NULL
所有列的值,如果它是NULL
一个外连接的补充行,那么在不能为空的列上进行汇总会导致服务器退出。(漏洞 #16436014)与 不同
MyISAM
,InnoDB
不支持对非索引列进行布尔全文搜索,但并未强制执行此限制,从而导致查询返回不正确的结果。(漏洞#16434374)性能模式参数在启动时自动调整大小没有考虑稍后自动调整对性能模式参数所依赖的其他启动参数的更改。(漏洞 #16430532)
全文搜索语法错误无法打印到标准输出。(错误#16429688,错误#16765397)
使用的一些
INFORMATION_SCHEMA
查询 没有像在 MySQL 5.5 中那样ORDER BY
使用 优化。filesort
(漏洞 #16423536)如果用于设置
debug
系统变量的调试标志是调试列表中已有的关键字前缀,则它们将被忽略。(漏洞 #16415978)密码格式错误的手动创建的帐户(使用
INSERT
)实际上没有密码。(漏洞 #16414396)对于调试版本,当 系统变量值超过 255 个字符时会
DBUG_EXPLAIN
导致缓冲区溢出。debug
(漏洞 #16402143)目录中的几个
sql-bench
本应可执行的脚本没有设置可执行访问位。(漏洞 #16395606)对于调试版本,XA 事务处于 IDLE 或 PREPARED 状态,在启用查询缓存的情况下执行查询可能会导致服务器退出。(漏洞 #16388996)
如果删除了系统表的主键
mysql.proc
(不受支持且不推荐的操作),则服务器将退出以进行后续存储过程调用。其他系统表可能会出现类似的问题。现在出现错误。(漏洞 #16373054)当尝试评估子查询谓词
SELECT (SELECT 1 FROM t1) IN (SELECT a FROM t1)
的常量左侧参数时 ,表单查询可能会发生服务器退出 。IN
(漏洞 #16369522)TINYBLOB
在列中的 a或GEOMETRY
列 的前缀上创建索引时可能会引发断言InnoDB
。(错误#16368875、错误#18776592、错误#17665767)如果锁定超时是由于
UPDATE
嵌套SELECT
无法访问另一个线程正在访问的行而导致的,则错误可能会未经检查并导致稍后引发断言。(漏洞 #16367039)在调试版本中,范围优化器中因
ER_LOCK_DEADLOCK
orER_LOCK_WAIT_TIMEOUT
错误而失败可能不会被检测到,并导致在向客户端发送响应时引发断言。在发布版本中,此问题表现为客户端收到一个OK
失败的语句。(错误#16366994,错误#16247110)在调试版本中,范围优化器中因
ER_LOCK_DEADLOCK
orER_LOCK_WAIT_TIMEOUT
错误而失败可能无法检测到并导致filesort
代码引发断言。在发布版本中,此问题表现为客户端收到ER_FILSORT_ABORT
错误代码而不是正确的错误代码。(漏洞 #16366881)对于调试版本,可以针对插入 列
set_field_to_null()
的尝试提出断言 。(漏洞#16362246)NULL
NOT NULL
如果在贪婪搜索模式下,优化器识别出连接顺序但无法选择一个,则可以提出断言。(漏洞 #16361170)
竞争条件
vio_shutdown()
可能导致服务器退出。(漏洞 #16354789)对于调试版本,子句
GROUP_CONCAT(... ORDER BY)
内可能会导致服务器退出。ORDER BY
(漏洞 #16347426)GROUP_CONCAT()
包含具有外部引用的子查询 的调用导致服务器退出。(漏洞#16347343)该
validate_password
插件并不总是对分配空密码实施适当的约束。(漏洞#16346443)将某些选择时间或
BIGINT
类型的子查询或转换为半连接会导致服务器在第二次执行准备好的语句或存储的程序时退出。(漏洞 #16319671)重新执行存储过程可能会导致服务器退出
Item_field::fix_outer_field
. (漏洞 #16317443)对于调试版本,服务器可以退出涉及嵌套子查询的查询,子查询转换为半连接并使用视图。(漏洞 #16317076)
do_copy_not_null()
服务器可能由于不正确的 -NULL
值检查而 退出。(漏洞#16316564)如果在删除与多列索引关联的列后存在重复索引,则不会生成警告。(漏洞 #16315351)
SELECT DISTINCT
withWITH ROLLUP
可能会导致Duplicate entry 'NULL' for key '<auto_key>'
错误。(漏洞 #16314835)Oracle RPM 包由于文件中的行
yum
问题而无法使用,导致yum 将包解释为过时了。(漏洞 #16298542)obsoletes
.spec
XOR
范围优化器可能会为使用操作 的查询设置不正确的范围。(漏洞 #16272562)如果使用的帐户密码过期,则mysql_secure_installation无法连接到服务器。它以非交互方式调用mysql,导致该程序无法连接。现在mysql 支持一个
--connect-expired-password
选项,该选项向服务器指示它可以处理过期密码帐户的沙箱模式,即使是非交互调用,并且 mysql_secure_installation使用此选项调用 mysql 。(漏洞 #16248315)通常的失败登录尝试计费不适用于失败的
COM_CHANGE_USER
命令。(错误#16241992,错误#17357535)LOAD DATA
对于调试版本,如果失败的语句后跟INSERT
同一会话中的同一表, 则可以引发断言 。(漏洞 #16240526)如果在使用 的查询上使用了松散索引扫描,则
MIN()
可能会发生分段错误。(漏洞 #16222245)eq_ref
对于调试版本,对于使用access 和 执行的查询错误地提出了断言filesort
。(漏洞 #16164885)在执行准备好的语句期间引用的用户变量被设置为在执行结束时释放的内存。第二次执行该语句可能会导致在访问此内存时出现 Valgrind 警告。(漏洞 #16119355)
准备好的语句中左表达式的错误优化可能导致服务器退出。(漏洞 #16095534)
如果
my_write()
遇到磁盘已满的情况,它可能会返回不正确的错误值。(错误#16078792,错误#19984788)服务器可能会在第二次调用存储例程时退出,该例程在连接子句中执行
UPDATE
或DELETE
使用无效列。(漏洞 #16078466)某些包含
ORDER BY
或SQL_CALC_FOUND_ROWS
可能导致服务器退出 JSON 格式EXPLAIN
语句的查询。(错误#16077396,错误#16078113)使用的准备好的语句
GROUP_CONCAT()
和ORDER BY
命名多列的子句可能导致服务器退出。(漏洞 #16075310)ORDER BY MATCH ... AGAINST
可能导致服务器退出。(漏洞 #16073689)FEDERATED
在不指定连接字符串的情况下 创建表导致服务器退出。(漏洞 #16048546)当一个分区丢失时,代码 in
ha_innodb.cc
将重试 10 次,每次按住 时休眠一微秒LOCK_open
。分区表的重试逻辑是作为 Bug#33349 的修复程序引入的,但不包括用于验证它的测试用例。此修复删除了分区表的重试逻辑。如果 Bug#33349 中报告的问题再次出现,将探索不同的解决方案。(漏洞 #15973904)来自 MySQL 5.6.4 及更高版本的客户端程序可能会在连接过程中使用旧服务器无法理解的较新协议功能来混淆旧服务器。(漏洞 #15965409)
如果命令是在多个服务器运行的情况下执行 的,则mysql.server脚本会退出并出错。
status
(漏洞 #15852074)在某些情况下,
REVOKE
可能无法撤销GRANT OPTION
特权。(漏洞 #14799187)在语句的子句中 使用
VALUES()
函数可能导致 Valgrind 警告或服务器不稳定,可能导致服务器退出。(漏洞 #14789787)VALUES()
INSERT
调试同步工具可能会丢失信号,从而导致虚假
ER_DEBUG_SYNC_TIMEOUT
错误。(错误#14765080,错误#18221750)mysql客户端 在交互模式下读取每一行后分配但没有释放字符串,导致内存泄漏。(漏洞 #14685362)
优化器跟踪可以打印不可用于范围访问的关键部分的范围。(漏洞 #14615536)
在断开连接的过程中终止连接可能会导致提出断言、Valgrind 警告和一般不稳定。(漏洞 #14560522)
语句中的密码在写入审计日志之前没有被混淆。(漏洞 #14536456)
INFORMATION_SCHEMA.INNODB_BUFFER_PAGE
对请求的table_name
和 值 运行查询时 ,查询结果将包括没有或 值index_name
的索引页。(漏洞 #14529666)table_name
index_name
客户端-服务器协议中的一些 命令没有对传入的网络数据包进行长度检查,这可能会导致格式错误的输入出现各种问题。(漏洞 #14525642)
COM_
xxx
如果用于处理 带有或 参数
CALL
的存储过程的准备语句,则没有正确设置检索所有结果集所需的标志。(错误#14492429,错误#17849978)OUT
INOUT
mysql_stmt_store_result()
INSERT ... ON DUPLICATE KEY UPDATE
在视图上可能会导致服务器退出。(漏洞 #14261010)使用线程池插件时,正常的连接终止
Aborted_clients
会导致状态变量增加。(漏洞 #14081240)如果
HAVE_CRYPT
为 0,则会发生构建失败。(缺陷 #14036425)按子查询中的外部
BLOB
列分组导致服务器退出。(错误#13966809,错误#14700180)-
在 Windows 上,表单的命令行选项 有效但 无效。
--
opt_name
="opt_value
"--
opt_name
='opt_value
'在所有平台上,对于形式的 Performance Schema 选项, 现在拒绝无效的仪器名称。(漏洞 #13955232)
--performance_schema_instrument="
instrument
=value
" 服务器可能在未能处理 . 中的内存不足情况后退出
open_normal_and_derived_tables()
。(漏洞 #13553905)由于对无效比较的错误处理不当,服务器可能会退出。(漏洞 #13009341)
如果以自定义安装或更改模式运行,MySQL 安装程序会提供无效的安装选项。(漏洞 #12928601)
为具有外连接的准备好的
SELECT
语句返回的元数据可能表明包含NULL
值的列是NOT NULL
. (漏洞 #12818811)线程池插件生成了一条错误消息,其中包含不正确的最大值
thread_pool_prio_kickup_timer
。(漏洞 #12817590)对于调试版本,服务器可能会因一系列使用用户变量的语句而退出,这样它的字符集/排序规则从语句更改为语句。(漏洞 #12368577)
当这些函数引用同一复合键的不同列时,使用多个
函数(其中aggr_func
(DISTINCT)
是聚合函数,例如)的 查询可能会返回不正确的结果 。aggr_func
()COUNT()
(漏洞 #12328597)表单的查询
SELECT ... UNION SELECT ... ORDER BY
被错误地解析,ORDER BY
应用到最终SELECT
而不是整个语句。(漏洞 #11886060)包含特殊字符的标识符在将此类字符转换为编码格式后可能会变得太长,从而导致 SQL 错误或无法找到文件。(漏洞 #11766880)
CMake检查 在
unsigned time_t
所有平台上都失败了。(漏洞 #11766815)mysql_convert_table_format忽略
--engine
或-e
作为该--type
选项的同义词。(漏洞 #11756950)-
mysqladmin debug使服务器将调试信息写入错误日志。在支持的系统上, 当mysqld消耗超过 4GB 内存
mallinfo()
时,此输出的内存状态部分在 64 位环境中不正确现在服务器用于
malloc_info()
获取内存状态信息。malloc_info()
不报告glibc
malloc()
实现内部使用分配的内存mmap()
。但是,它确实提供了所有内存区域中的内存使用信息。此错误修复还涉及输出格式的更改。服务器现在以 XML 格式而不是纯文本格式写入内存信息。例子:
Memory status: <malloc version="1"> <heap nr="0"> <sizes> <size from="33" to="33" total="1056" count="32"/> <size from="65" to="65" total="65" count="1"/> <size from="113" to="113" total="226" count="2"/> <size from="129" to="129" total="2451" count="19"/> <size from="145" to="145" total="290" count="2"/> <size from="161" to="161" total="1288" count="8"/> <size from="209" to="209" total="418" count="2"/> </sizes> <total type="fast" count="0" size="0"/> <total type="rest" count="66" size="5794"/> <system type="current" size="10833920"/> <system type="max" size="10833920"/> <aspace type="total" size="10833920"/> <aspace type="mprotect" size="10833920"/> </heap> <total type="fast" count="0" size="0"/> <total type="rest" count="66" size="5794"/> <system type="current" size="10833920"/> <system type="max" size="10833920"/> <aspace type="total" size="10833920"/> <aspace type="mprotect" size="10833920"/> </malloc>
(漏洞 #11746658)
函数的
DBUG_ENTER
字符串THD::increment_questions_counter()
错误地命名了THD::increment_updates_counter()
函数。(缺陷 #69989,缺陷 #17297266)RPM 包没有为其内容提供小写标签。例如,服务器 RPM 表示它提供了
MySQL-server
,但没有 提供mysql-server
。(漏洞 #69830,漏洞 #17211588)如果使用不正确的 SSL 安装路径或不受支持(太旧)的 SSL 安装路径指定 CMake选项,则该选项将隐式更改为该值,并改用 yaSSL。现在 CMake以错误退出,因此用户知道必须更改选项值。(缺陷 #69744,缺陷 #17162055)
WITH_SSL
bundled
-
选择空结果集(使用
WHERE 1=0
或创建WHERE FALSE
)与派生表的并集时,对派生表应用了不正确的筛选。(缺陷 #69471,缺陷 #16961803)参考资料:此问题是 Bug #15848521 的回归。
对于带有
ORDER BY ... LIMIT
的查询,优化器可以为表访问选择一个无序索引。(漏洞 #69410,漏洞 #16916596)如果
query_cache_type
在启动时被禁用以防止在运行时启用查询缓存,query_cache_type
即使它已经被禁用,在运行时禁用也会生成警告。(缺陷 #69396,缺陷 #16906827)当内部缓冲区对于工作负载来说太小时,性能模式可能会在内部自旋循环中花费大量时间来尝试分配内存缓冲区,然后失败。(漏洞 #69382,漏洞 #16945618)
如果
SQL_CALC_FOUND_ROWS
在前面的查询中没有,FOUND_ROWS()
应该返回结果集中的行数,但如果查询包含 ,这并不总是发生ORDER BY
。(缺陷 #69271,缺陷 #16827872)InnoDB
在搜索包含撇号的单词时, 对表格进行全文搜索失败。(漏洞 #69216,漏洞 #16801781)库
libmysql.dll
中缺少几个符号:my_init
、mysql_client_find_plugin
、mysql_client_register_plugin
、mysql_load_plugin
、mysql_load_plugin_v
、mysql_options4
和mysql_plugin_options
。(漏洞 #69204、漏洞 #16797982、漏洞 #62394)如果一个
UPDATE
包含子查询的查询在内部引起死锁InnoDB
,则死锁没有被 SQL 层正确处理。SQL 层然后尝试在InnoDB
回滚事务后解锁该行,在内部引发断言InnoDB
。(缺陷 #69127,缺陷 #16757869)-
FOUND_ROWS()
如果前面的查询使用 ,则可能会返回不正确的值filesort
。(漏洞 #69119,漏洞 #16760474)参考:这个问题是 Bug #68458 的回归。
优化器可能会为带有
ORDER BY ... LIMIT
. (缺陷 #69013,缺陷 #16697792)释放后一些可能的内存使用情况已得到修复。感谢 Jan Staněk 提供的补丁。(缺陷 #68918,缺陷 #16725945)
-
某些
LEFT JOIN
查询GROUP BY
可能会返回不正确的结果。(漏洞 #68897,漏洞 #16620047)参考资料:此问题是 Bug #11760517 的回归。
某些错误只有在它们由特定语句引发时才能由条件处理程序处理,例如
INSERT
,但如果它们由其他语句引发则不能,例如UPDATE
. 一个例子是外键错误ER_NO_REFERENCED_ROW_2
,它可以被不同地处理,这取决于引发它的语句。(漏洞 #68831,漏洞 #16587369)当在选项文件中指定时,
plugin-dir
客户端选项被忽略。(漏洞 #68800,漏洞 #16680313)对于排序规则 ,值和字符串的比较
DATETIME
无法正常工作 。utf8_unicode_ci
(漏洞 #68795,漏洞 #16567381)当只计算事件而不是计时时,Performance Schema 会将
MIN_TIMER_WAIT
值报告为一个大数字而不是 0。(Bug #68768,Bug #16552425)使用带有索引前缀的范围访问可能会产生不正确的结果。(缺陷 #68750,缺陷 #16540042)
对表的全文搜索在
InnoDB
搜索与+
或-
运算符组合的文字短语时失败。(漏洞 #68720,漏洞 #16516193)对于调试版本,元数据锁定
CREATE TABLE ... SELECT
可能会引发断言。(缺陷 #68695,缺陷 #16503173)在 Solaris 上使用gcc 编译产生了不正确的 32 位系统构建。(漏洞 #68675)
mysqld
--help
和mysqld 执行了不必要的日志记录。(缺陷 #68578,缺陷 #16442113)--verbose
--help
-
提供了一个新的CMake选项,
WITH_EDITLINE
用于指示是使用捆绑的还是系统libedit
/editline
库。允许的值为bundled
(默认值)和system
.WITH_EDITLINE
替换WITH_LIBEDIT
,已被删除。(漏洞 #68558,漏洞 #16430208) 该功能的开销
skip_trailing_space()
减少了。(错误#68477,错误#16395778)如果使用松散索引扫描来评估将整数列与指定为带引号的字符串(例如,
)的整数进行比较的查询,则该查询可能会返回不正确的结果。(错误#68473,错误#16394084)col_name
= '1'使用扩展辅助键的优化(请参阅 索引扩展的使用)仅适用于
InnoDB
,即使对于具有必要的底层功能的存储引擎也是如此。(漏洞 #68469,漏洞 #16391678)如果不可用, mysql_install_db会错误地尝试创建
mysql.innodb_table_stats
和mysql.innodb_index_stats
表InnoDB
(缺陷 #68438,缺陷 #16369955)BIT(0)
不是有效的数据类型规范,但已自动转换为BIT(1)
. 现在发生ER_INVALID_FIELD_SIZE
错误,规范被拒绝。(漏洞 #68419,漏洞 #16358989)mysql.user
在使用未升级表( 尚未运行mysql_upgrade ) 的 MySQL 5.5 更新的 MySQL 服务器 中,设置密码的语句由于对password_expired
列的错误检查导致服务器退出。(缺陷 #68385,缺陷 #16339767)在存储过程的第一次调用期间使用的派生表上的索引不会在后续调用中使用。(缺陷 #68350,缺陷 #16346367)
如果诸如
AES_DECRYPT()
需要 SSL 支持的函数失败,该错误可能会影响以后对需要 SSL 支持的函数的调用。(漏洞 #68340,漏洞 #16315767)对于
DELETE
andUPDATE
语句,EXPLAIN
显示NULL
在ref
列中对于某些情况const
来说是比较合适的。(漏洞 #68299,漏洞 #16296268)即使以多字节默认字符集启动,mysql 客户端也会错误地用于某些比较,从而导致客户 端崩溃。
latin1
(漏洞 #68107,漏洞 #16182919)在选项文件中,如果值是在选项名称之后给出且
=
两者之间没有符号,则服务器可能会误解选项设置。(缺陷 #67740,缺陷 #15930031)在基于行的日志记录格式下,包含参数替换标记的准备好的 DML 语句的性能
?
得到了改进:由于这种情况下的二进制日志不需要包含语句文本,并且由于语句不会像某些 DDL 语句可能那样被强制为基于语句的日志记录是的,不需要替换?
标记来生成适合日志记录的语句。(错误#67676,错误#16038776)ELT(LEAST(...),..)
NULL
即使LEAST()
返回 ,也可能返回非值NULL
。(漏洞 #67578,漏洞 #16171537)如果服务器在启动时找不到该
errmsg.sys
文件,则生成的错误消息不会指示要检查哪个配置参数。(漏洞 #67576,漏洞 #15880018)mysqldump
SET
将 语句写SET OPTION
,重新加载时失败,因为不推荐使用的OPTION
关键字已从SET
语法中删除。(漏洞 #67507,漏洞 #15844882)对于为事件调度程序、事件执行或新连接创建新线程失败,没有消息写入错误日志。这可能会给人留下事件调度程序正常运行的印象,而实际上却没有。(错误#67191、错误#14749800、错误#16865959)
使用cmake -DWITHOUT_SERVER 配置以在没有服务器的情况下构建客户端对于源代码树之外的构建失败。(缺陷 #66000,缺陷 #14367046)
mysqldump假定数据库中存在
general_log
和slow_log
表mysql
。如果调用它从不存在这些表的旧服务器转储表,则会失败。(漏洞 #65670,漏洞 #14236170)如果帐户具有非零
MAX_USER_CONNECTIONS
值,则该值并不总是被尊重。(漏洞 #65104,漏洞 #14003080)尝试从源 RPM 包构建可能会失败,因为构建过程试图引用
pb2user
可能不存在的。(错误#64641、错误#13865797、错误#69339、错误#16874980)当
ALTER TABLE
使用无效的外键约束执行操作时,报告的错误ER_CANT_CREATE_TABLE
不是ER_CANNOT_ADD_FOREIGN
。(缺陷 #64617,缺陷 #13840553)-
如果一个会话在一个表上有任何元数据锁,另一个试图
CREATE TABLE [IF NOT EXISTS]
访问同一个表的会话就会挂起。发生这种情况是因为在检查表是否已存在之前,在第二个会话中尝试获取表上的独占元数据锁。独占元数据锁与任何其他元数据锁都不兼容,因此如果另一个会话锁定了表,则该会话会在锁定超时期限内挂起。现在服务器首先尝试获取表上的共享元数据锁以检查它是否存在,如果不存在则升级为独占锁。如果该表确实存在,则会发生错误
CREATE TABLE
并发出警告CREATE TABLE IF NOT EXISTS
。(错误#63144,错误#13418638) sql-common/client_plugin.c
包含不可移植的va_list
参数使用。(缺陷 #62769,缺陷 #13252623)InnoDB
不支持全文解析插件,但指定了也报错。现在ER_INNODB_NO_FT_USES_PARSER
返回一个错误。(缺陷 #62004,缺陷 #12843070)数据库帮助表中的
url
列mysql
太短,无法容纳帮助内容中的某些 URL。这些列现在创建为类型TEXT
以适应更长的 URL。(缺陷 #61520,缺陷 #12671635)中的错字
cmake/dtrace.cmake
阻止了 DTrace 支持被启用-DENABLE_DTRACE-on
。(缺陷 #60743,缺陷 #12325449)用于
LIKE
模式匹配的 Turbo Boyer-Moore 算法无法处理某些模式。服务器现在使用原始的 Boyer-Moore 算法。(错误#59973,错误#11766777)布尔插件系统变量在未签名的机器上表现不佳
char
;一些代码试图为这些分配一个负值。(缺陷 #59905,缺陷 #11864205)某些子查询转换在
EXPLAIN
输出中不可见。(缺陷 #59852,缺陷 #11766685)配置 MySQL
-DWITH_EXTRA_CHARSETS=none
导致构建失败。(错误#58672,错误#11765682)-
从当前
debug
系统变量设置中添加或减去关键字的两个问题已得到纠正:-
值
debug
表示 “'d'
启用所有调试宏”。以下序列使值处于不正确的状态:mysql> SET debug = 'd';SELECT @@debug; +---------+ | @@debug | +---------+ | d | +---------+ mysql> SET debug = '+d,M1';SELECT @@debug; +---------+ | @@debug | +---------+ | d,M1 | +---------+
第一条
SET
语句启用所有调试宏。第二个SET
应该将M1
宏添加到当前集,这应该不会导致任何变化,因为当前集已经是“所有宏”。相反,第二个SET
将当前设置重置为仅M1
宏,有效地禁用所有其他宏。服务器现在正确地将debug
设置保留为'd'
。 -
值
debug
表示 “''
未启用调试宏”。以下序列使值处于不正确的状态:mysql> SET debug = 'd,M1';SELECT @@debug; +---------+ | @@debug | +---------+ | d,M1 | +---------+ mysql> SET debug = '-d,M1';SELECT @@debug; +---------+ | @@debug | +---------+ | d | +---------+
第一条
SET
语句设置debug
为M1*
宏。第二个SET
应该从当前集合中减去M1
宏,不启用任何调试宏。相反,第二个SET
将当前设置重置为'd'
(启用所有宏)。服务器现在正确设置debug
为''
.
(错误#58630,错误#11765644)
-
-
现在可以
mysql-test
通过调用CMake并将INSTALL_MYSQLTESTDIR
选项显式设置为空来在从源代码编译 MySQL 后抑制目录的安装:cmake . -DINSTALL_MYSQLTESTDIR=
以前,尝试这样做会导致错误。(错误#58615,错误#11765629)
在 64 位 OS X 系统上,CMake 在确定机器类型时使用
x86
而不是。x86_64
(错误#58462,错误#11765489)长表名或列名可能导致 mysqlshow退出。(错误#53956,错误#11761458)
-
big_tables
启用后,在非重复键上使用具有常量相等条件的简单连接的查询 返回COUNT(DISTINCT)
不正确的结果。(错误#52582,错误#11760197)参考资料:另请参阅:Bug #18853696。
选项文件中的
!includedir
指令未读取.cnf
或.ini
文件名中包含扩展名前的点的文件。(缺陷 #51609,缺陷 #11759306)从查询缓存提供的成功查询没有清除警告。(缺陷 #49634,缺陷 #11757567)
如果
ALTER TABLE
用于设置在创建时作为默认值的TIMESTAMP
或DATETIME
列 的默认值CURRENT_TIMESTAMP
,则新默认值不会由 显示SHOW CREATE TABLE
,并且可能会在列中插入不正确的值。(错误#45669、错误#11754116、错误#76610、错误#20848203)IF()
在准备好的语句和非准备的语句中执行时,函数求值可能会产生不同的结果。(漏洞 #45370,漏洞 #11753852)范围优化器使用了错误的先决条件来得出一个表是外部连接的内部表的结论。这导致了不正确的成本估计和为查询处理选择了错误的索引。(错误#37333,错误#11748775)
为了更好地防止堆栈溢出,服务器现在在发出线程堆栈大小请求时考虑保护区的大小。(漏洞 #35019,漏洞 #11748074)
如果mysqld在由/etc/init.d/mysql stop启动的关闭期间崩溃, mysqld_safe会在不应该重启 mysqld时重启。(错误#34084,错误#13864548)
mysql.h
不再__WIN__
在 Windows 上定义,并且 MySQL 源已更改为测试_WIN32
。(缺陷 #20338,缺陷 #11745828)