这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
-
不兼容 的变化:
CREATE USER
和ALTER USER
语句具有额外的账户管理能力。它们现在可以一起用于完全建立或修改身份验证、SSL 和资源限制属性,以及管理密码过期和帐户锁定和解锁。例如,ALTER USER
可以分配密码,可以修改用户的认证插件,不需要直接操作mysql.user
表。有关详细信息,请参阅 CREATE USER 语句和ALTER USER 语句。帐户锁定控制是一项新功能,它允许管理员完全禁止使用帐户连接到服务器。帐户锁定状态记录在表的
account_locked
列中mysql.user
。请参阅 帐户锁定。新语句
SHOW CREATE USER
显示CREATE USER
创建指定用户的语句。附带的Com_show_create_user
状态变量指示语句已执行了多少次。一个新的系统变量,
log_backward_compatible_user_definitions
如果启用,会导致服务器以向后兼容(5.7.6 之前)的方式记录CREATE USER
、ALTER USER
和 语句。GRANT
启用此变量可提高跨版本复制的兼容性。表中的
authentication_string
列mysql.user
现在存储所有帐户的凭据信息。Password
以前用于存储使用mysql_native_password
和mysql_old_password
插件 验证的帐户的密码哈希值的列已被删除。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将更改合并到
mysql
数据库中。 mysql_upgrade将Password
列值移动到该authentication_string
列并删除该Password
列。对于没有account_locked
列的未升级安装,服务器将所有帐户视为未锁定,并尝试锁定或解锁和帐户产生错误。前面的更改使以下功能过时。它们现在已被弃用,并且在未来的 MySQL 版本中将删除对它们的支持:
用于
GRANT
创建用户。相反,使用CREATE USER
. 遵循这种做法使得 SQL 模式对于 语句来说变得NO_AUTO_CREATE_USER
无关紧要,因此它也被弃用了。GRANT
用于
GRANT
修改权限分配以外的帐户属性。这包括身份验证、SSL 和资源限制属性。相反,在创建帐户时使用 建立此类属性CREATE USER
或之后使用 修改它们ALTER USER
。IDENTIFIED BY PASSWORD '
hash_string
'CREATE USER
和GRANT
的语法 相反,使用 for 和 ,其中 值的格式与命名插件兼容。IDENTIFIED WITH
auth_plugin
AS 'hash_string
'CREATE USER
ALTER USER
'
hash_string
'-
该
PASSWORD()
函数已弃用,在任何情况下都应避免使用。因此, 语法也被弃用。 不推荐使用语法;尽管如此, 现在是分配密码的首选语句。SET PASSWORD ... = PASSWORD('
auth_string
')SET PASSWORD ... = '
auth_string
'ALTER USER
警告此版本中的更改导致一种
SET PASSWORD
语法的语义不兼容:SET PASSWORD ... = 'literal string';
以前,
SET PASSWORD
将字符串解释为要直接存储的密码哈希值。现在,SET PASSWORD
将字符串解释为明文字符串,并在存储之前针对帐户身份验证插件对其进行适当的哈希处理。笔记任何
PASSWORD()
用于创建散列值的应用程序(一段时间以来一直不鼓励的做法)都应该修改为使用不同的散列生成方法。有关建议,请参阅加密和压缩功能PASSWORD()
中的描述。 系统
old_passwords
变量。帐户身份验证插件不能再在表中未指定,因此任何从明文字符串分配密码的语句都可以在将字符串存储在表mysql.user
中之前明确确定要对字符串使用的哈希方法 。mysql.user
这就old_passwords
显得多余了。
笔记此版本中的一个已知问题是以下
SET PASSWORD
语法会产生错误:SET PASSWORD ... = PASSWORD('auth_string');
该语法将被弃用,而不是删除。它将在下一个版本中恢复,但由于其已弃用状态而生成警告。这些替代方案可用,第一个是首选形式:
ALTER USER ... IDENTIFIED BY 'auth_string'; SET PASSWORD ... = 'auth_string';
表结构的变化
mysql.user
对升级和降级有兼容性影响:您可以执行二进制(就地)升级到 MySQL 5.7.6 或更高版本,并运行mysql_upgrade将
Password
列内容迁移到该authentication_string
列。-
如果您计划通过从较旧的(5.7.6 之前的)MySQL 安装加载 mysqldump转储文件来升级,则必须遵守用于生成该文件 的mysqldump命令的以下条件:
您必须包括
--add-drop-table
选项您不得包含该
--flush-privileges
选项
在运行mysql_upgrade 之前将 5.7.6 之前的转储文件加载到 5.7.6 服务器中。
因为该
Password
列在 5.7.6 及更高版本中已不存在,所以降级到 5.7.6 之前的版本需要特殊的过程。请参阅 降级说明。
参考资料:另请参阅:Bug #67449、Bug #14845612、Bug #18140348。
用于服务器构建的 Boost 库的最低版本现在是 1.57.0。(错误#74666、错误#19940297、错误#73432、错误#19320102)
已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。
-
mysqld现在支持一个
--daemonize
选项,使其作为传统的分支守护进程运行。这允许服务器与使用 systemd 进行进程控制的操作系统一起工作。优点包括故障后自动重启、处理用于运行守护程序的用户和组、资源控制和临时文件清理。新的CMake选项在启用时会导致安装 systemd 支持文件。此外,未安装mysqld_safe和 System V 初始化脚本等脚本。在 systemd 不可用的平台上,启用 会导致CMake出错。启用时,还可以使用新 选项 和选项分别指定服务器创建 PID 文件的 MySQL 服务名称和目录 。
WITH_SYSTEMD
WITH_SYSTEMD
WITH_SYSTEMD
SYSTEMD_SERVICE_NAME
SYSTEMD_PID_DIR
当您使用适用于这些 Linux 平台的 RPM 发行版安装 MySQL 时,会安装 systemd 的支持文件:
红帽企业 Linux 7;甲骨文Linux 7;中央操作系统 7
SUSE Linux 企业服务器 12
软呢帽 20、21
您还可以通过从配置有CMake选项 的源分发版进行安装来获得 systemd 支持 。
-DWITH_SYSTEMD=1
为了向管理进程提供更好的信息,服务器现在返回以下列表中描述的退出代码之一。括号中的短语表示 systemd 响应代码所采取的操作。
0 = 成功终止(没有重启)
1 = 未成功终止(未重新启动)
2 = 不成功终止(重启完成)
笔记如果只检查 1 作为失败退出值,则应修改为旧服务器编写的任何管理脚本以处理三个退出值。
有关详细信息,请参阅使用 systemd 管理 MySQL 服务器。该部分还包括有关指定先前在
[mysqld_safe]
选项组中指定的选项的信息。因为在使用 systemd 时没有安装mysqld_safe,所以必须以其他方式指定此类选项。
复制: 变量
binlogging_impossible_mode
已重命名为binlog_error_action
. (漏洞 #19507567)复制:系统变量 的全局范围
sql_log_bin
已被弃用,现在只能在会话范围内设置此变量。该语句SET GLOBAL SQL_LOG_BIN
现在产生一个错误。仍然可以读取 的全局值sql_log_bin
,但这样做会产生警告。您应该立即采取行动,从您的应用程序中删除任何对读取此值的依赖;sql_log_bin
MySQL 8.0 中删除了全局范围(缺陷 #67433,缺陷 #15868071)对于客户端程序,
--secure-auth
现在已弃用并且--skip-secure=auth
是非法的,但使用会--skip-secure-auth
导致警告后跟帮助消息而不是错误。(漏洞 #19438612)OLD_PASSWORD()
已弃用,但在调用时未产生任何警告。(错误#73376,错误#19285177)-
ALTER TABLE
TIME
如果表中包含的时间列被发现采用 5.6.4 之前的格式( 、DATETIME
和TIMESTAMP
不支持小数秒精度的列),则没有利用可能适用于要执行的操作的快速更改。相反,它通过重建来升级表。两个新的系统变量可以控制升级此类列并提供有关它们的信息:avoid_temporal_upgrade
控制是否ALTER TABLE
隐式升级发现采用 5.6.4 之前格式的时间列。默认情况下禁用此变量。启用它会导致ALTER TABLE
不重建时间列,从而能够利用可能的快速更改。show_old_temporals
控制SHOW CREATE TABLE
输出是否包括注释,以标记被发现为 pre-5.6.4 格式的时间列。COLUMN_TYPE
表列的 输出INFORMATION_SCHEMA.COLUMNS
受到类似的影响。默认情况下禁用此变量。
这两个变量都已弃用,并将在未来的 MySQL 版本中删除。(错误#72997,错误#18985760)
-
以下项目已弃用,将在未来的 MySQL 版本中删除。在显示备选方案的地方,应更新应用程序以使用它们。
、和 函数、
ENCRYPT()
选项 、 系统变量、语句选项和 CMake 选项。对于,考虑使用 instead 进行单向哈希。对于其他人,请考虑使用 and 代替。DES_ENCRYPT()
DES_DECRYPT()
--des-key-file
have_crypt
DES_KEY_FILE
FLUSH
HAVE_CRYPT
ENCRYPT()
SHA2()
AES_ENCRYPT()
AES_DECRYPT()
系统
sync_frm
变量。.frm
当文件过时 时,将删除此变量 。-
全局 变量
character_set_database
和collation_database
系统变量已弃用,将在未来的 MySQL 版本中删除。为会话
character_set_database
和collation_database
系统变量赋值已被弃用,赋值会产生警告。在未来的 MySQL 版本中,会话变量将变为只读,并且分配将产生错误。仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。 -
将包含特殊字符的 MySQL 5.1 之前的数据库名称转换为 5.1 格式并添加
#mysql50#
前缀。(有关这些转换的信息,请参阅 标识符到文件名的映射。)由于此类转换现在已弃用,因此 mysqlcheck--fix-db-names
的和--fix-table-names
选项以及语句的子句 也已弃用。UPGRADE DATA DIRECTORY NAME
ALTER DATABASE
仅支持从一个主要版本升级到另一个主要版本(例如,5.0 到 5.1,或 5.1 到 5.5),因此几乎不需要将旧的 5.0 数据库名称转换为当前版本的 MySQL。解决方法是先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到更新的版本。
-
MySQL 现在支持在
CREATE TABLE
和ALTER TABLE
语句中指定生成的列。生成列的值是根据列定义中包含的表达式计算得出的。生成的列可以是虚拟的(在读取行时“即时”计算)或存储的(在插入或更新行时计算)。该INFORMATION_SCHEMA.COLUMNS
表显示有关生成的列的信息。生成列的用途包括在应用程序使用复杂表达式从表中进行选择时简化查询、模拟功能索引或替换视图。有关详细信息,请参阅 CREATE TABLE 和生成的列。
-
mysqld服务器和 mysql_upgrade实用程序已经过修改 ,可以更轻松地从 MySQL 5.6 进行二进制(就地)升级,而无需使用特殊选项启动服务器。服务器检查系统表是否来自MySQL 5.7之前的版本(即
mysql.user
表是否有Password
列)。如果是这样,它允许在其帐户行中具有空身份验证插件的用户进行连接mysql.user
,只要他们的Password
值是空的(无密码)或有效的本机(41 个字符)密码哈希。这意味着您可以连接并升级您的系统表,即使是没有命名身份验证插件
root
的旧mysql.user
表 。root
特别是,您可以运行mysql_upgrade,连接为root
,无需使用任何特殊选项启动服务器。以前,如果root
帐户的插件值是空的, 则--skip-grant-tables
需要一个涉及启动服务器并多次重启的过程。现在的程序更简单。停止旧的 (MySQL 5.6) 服务器
就地升级 MySQL 二进制文件(用新二进制文件替换旧二进制文件)
正常启动MySQL 5.7服务器(无特殊选项)
运行mysql_upgrade升级系统表
重启 MySQL 5.7 服务器
-
以前,对于 Unix 和类 Unix 系统上的新 MySQL 安装,数据目录(包括
mysql
系统数据库中的表)的初始化是使用mysql_install_db完成的。在 Windows 上,MySQL 发行版包含一个数据目录,其中包含mysql
数据库中的预建表。mysql_install_db功能现已集成到 MySQL 服务器mysqld中。要使用此功能初始化 MySQL 安装,如果您以前手动调用mysql_install_db ,请使用 或 选项调用mysqld,具体取决于您是否希望服务器为初始 帐户生成随机密码。
--initialize
--initialize-insecure
'root'@'localhost'
作为此更改的结果,mysql_install_db 被弃用, mysql_install_db传递给 mysqld
--bootstrap
的特殊选项 也是如此。这些将在未来的 MySQL 版本中删除。此外, 不再需要mysql_install_db编写的文件。如果它存在于您的系统上,您可以将其删除。$HOME/
.mysql_secret
使用mysqld 初始化 MySQL 安装 适用于所有平台,包括 Windows。特别是,可以在没有
mysql
数据库预建表集的情况下初始化 Windows 安装。(但是,对于此版本没有必要这样做,因为 Windows 发行版仍然包含预构建的表。)有关详细信息,请参阅 初始化数据目录。
-
为了处理派生表(子句中的子查询
FROM
)或视图引用,优化器可以将派生表或视图引用具体化为内部临时表或将其合并到外部查询块中。以前,派生表总是被具体化,而等效的视图引用有时被具体化,有时被合并。这种对等效查询的不一致处理可能会导致性能问题:不必要的派生表具体化需要时间并阻止优化器将条件下推到派生表。优化器现在以一致的方式处理派生表;也就是说,与视图引用相同。这更好地避免了不必要的具体化,并允许使用下推条件来生成更有效的执行计划。有关示例,请参阅使用物化优化子查询。
优化器还可以更好地处理子句在派生表或视图中对外部查询块的传播,
ORDER BY
只有在有意义时才这样做。以前,优化器总是传播ORDER BY
,即使它不相关或导致无效查询。对于诸如
DELETE
or 之类UPDATE
的修改表的语句,对先前物化的派生表使用合并策略可能会导致ER_UPDATE_TABLE_USED
错误:mysql> DELETE FROM t1 -> WHERE id IN (SELECT id -> FROM (SELECT t1.id -> FROM t1 INNER JOIN t2 USING (id) -> WHERE t2.status = 0) AS t); ERROR 1093 (HY000): You can't specify target table 't1' for update in FROM clause
将派生表合并到外部查询块时会发生错误,导致语句同时从表中进行选择和修改。(具体化不会导致问题,因为实际上它将派生表转换为单独的表。)为避免此错误,请 在执行语句之前禁用系统变量 的
derived_merge
标志 :optimizer_switch
mysql> SET optimizer_switch = 'derived_merge=off';
该
derived_merge
标志控制优化器是否尝试将派生表和视图引用合并到外部查询块中,假设没有其他规则阻止合并。默认情况下,该标志是on
启用合并。将标志设置为off
防止合并并避免刚才描述的错误。(其他变通方法包括在子查询中使用SELECT DISTINCT
或LIMIT
,尽管它们对具体化的影响并不明确。)如果ER_UPDATE_TABLE_USED
使用与子查询等效的表达式的视图引用发生错误,添加ALGORITHM=TEMPTABLE
到视图定义会阻止合并并优先超过当前derived_merge
值。有关详细信息,请参阅 使用合并或实现优化派生表和视图引用。
参考资料:另请参阅:Bug #20073366、Bug #59203、Bug #11766159。
Microsoft Windows: 对于 Windows,noinstall Zip 存档被拆分为两个单独的 Zip 存档。MySQL 测试套件、MySQL 基准套件和调试二进制文件/信息组件(包括 PDB 文件)被移动到它们自己的 Zip 存档中,分别命名 为 64 位和 32 位。进行此更改是为了减小更常见下载的文件大小。
mysql-
VERSION
-winx64-debug-test.zipmysql-
VERSION
-win32-debug-test.zip-
打包脚本,例如 RPM 或 Debian 包中包含的脚本,已根据从 MySQL 发行版安装的文件应具有尽可能严格的权限的原则进行了修改。在下面的描述中,假设用于管理 MySQL 的帐户有 owner (user) =
mysql
, group =mysql
。创建帐户的安装程序使用/bin/false
mysql
外壳来防止直接登录帐户。数据目录及其内容仅由 owner/group
mysql
/拥有和访问mysql
,目录权限为 750,可执行文件权限为 755,其他文件权限为 640。-
root
其他文件(包括可执行文件和库)具有 / 的所有者/ 组root
,具有以下权限:可执行文件:755
手册页、字符集文件、头文件、测试套件文件:644
库文件:适用于主机系统的约定
执行上述安装操作的打包脚本也执行它们进行升级,但如果
mysql
帐户存在,则保持不变,如果数据目录存在,则其权限和所有权保持不变。
-
性能模式包含以下更改:
-
Performance Schema 现在增量分配内存,将其内存使用扩展到实际服务器负载,而不是在服务器启动期间分配它需要的所有内存。因此,性能模式的配置更容易;大多数尺寸调整参数根本不需要设置。处理非常低负载的服务器将消耗更少的内存,而无需显式配置。
这些系统变量是自动缩放的:
performance_schema_accounts_size performance_schema_hosts_size performance_schema_max_cond_instances performance_schema_max_file_instances performance_schema_max_index_stat performance_schema_max_metadata_locks performance_schema_max_mutex_instances performance_schema_max_prepared_statements_instances performance_schema_max_program_instances performance_schema_max_rwlock_instances performance_schema_max_socket_instances performance_schema_max_table_handles performance_schema_max_table_instances performance_schema_max_table_lock_stat performance_schema_max_thread_instances performance_schema_users_size
有一些以前缀命名的新工具,这些工具
memory/performance_schema/
公开了为性能模式中的内部缓冲区分配了多少内存。这些工具显示在memory_summary_global_by_event_name
表中。有关性能模式如何分配内存以及如何评估当前使用量的更多信息,请参阅 性能模式内存分配模型。
-
表索引和表锁的检测更灵活,内存占用更少。对于禁用索引和表锁检测的表(如表中指定
setup_objects
),性能模式不会为统计信息收集分配内存。对于启用了索引和表锁检测的表,用于统计信息收集的内存分配会延迟到表开始使用为止。现在显式公开了表索引和表锁检测的配置:
和 系统变量配置每个表有多少个索引以及多少个表锁受统计收集
performance_schema_max_table_lock_stat
。performance_schema_max_index_stat
默认情况下,这些变量是自动缩放的,减少了 MySQL 安装的内存分配,其中默认分配大于服务器工作负载所需的内存(例如,当数据库包含大量表时)。它们可以在启动时设置以明确限制内存分配。和
Performance_schema_table_lock_stat_lost
状态Performance_schema_index_stat_lost
变量能够评估相应的系统变量设置是否太低以致导致仪器丢失。
-
性能模式表中现在提供系统和状态变量信息:
系统变量:
global_variables
、session_variables
和variables_by_thread
包含单独的系统变量值。状态变量:
global_status
、session_status
和status_by_thread
,包含各个状态变量值。status_by_account
、status_by_host
和status_by_user
包含按帐户、主机名和用户名聚合的会话状态变量值。
这些 Performance Schema 表包含的信息类似于
SHOW VARIABLES
andSHOW STATUS
语句以及GLOBAL_VARIABLES
、SESSION_VARIABLES
、GLOBAL_STATUS
和 表中可用的信息。SESSION_STATUS
INFORMATION_SCHEMA
Performance Schema 表具有以下优点:
通过使用
variables_by_thread
和status_by_thread
表,可以获得任何会话的会话变量,而不仅仅是当前会话。也可以仅获取会话变量,而不是会话和全局变量的混合,例如 和 返回SHOW SESSION VARIABLES
的SHOW SESSION STATUS
。对全局变量的请求只产生全局变量,而对于
SHOW GLOBAL STATUS
语句和GLOBAL_STATUS
INFORMATION_SCHEMA
表,请求不仅产生全局变量,而且产生没有全局对应物的会话变量。访问 Performance Schema 表需要
SELECT
特权,而SHOW
语句和INFORMATION_SCHEMA
表则不需要。
有关详细信息,请参阅 性能模式系统变量表、 性能模式状态变量表和 状态变量汇总表。
新
show_compatibility_56
系统变量的值会影响系统和状态变量语句和表产生的输出以及所需的特权。具体参见服务器系统变量中对该变量的描述。这些
INFORMATION_SCHEMA
表现在优先于 Performance Schema 表弃用,并将在未来的 MySQL 版本中删除。有关从INFORMATION_SCHEMA
表迁移到性能模式表的建议,请参阅 迁移到性能模式系统和状态变量表。笔记此版本中的一个已知问题是
session_variables
和session_status
表未完全反映对当前会话有效的所有变量值;它们不包含没有会话对应项的全局变量行。这在 MySQL 5.7.8 中得到了纠正。 以前,如果
setup_actors
表中有一行与线程用户和主机匹配,则性能模式会为新的前台线程启用检测。现在,该setup_actors
表有一个ENABLED
列指示是否为匹配的前台线程启用检测。这允许显式禁用匹配线程的检测。有关详细信息,请参阅 按线程预过滤、 setup_actors 表和 线程表。-
SQL 语句处理的两个以前硬编码的限制现在是可配置的:
语句事件表列中显示的 SQL 语句的最大字节数
SQL_TEXT
,例如events_statements_current
.可用于计算语句摘要的字节数。语句摘要出现在
DIGEST_TEXT
语句事件表的列中。
以前,这两个值都固定为 1024。现在可以在服务器启动时使用
performance_schema_max_sql_text_length
和max_digest_length
系统变量更改它们。(名称max_digest_length
不以开头,performance_schema_
因为语句摘要现在是在 SQL 级别完成的,即使性能模式被禁用并且可用于可以从中受益的服务器操作的其他方面。例如,查询重写插件现在使用语句摘要,即使性能模式被禁用。)默认值保持为 1024,但可以减少这些值以使用更少的内存或增加这些值以允许区分更长的语句以用于显示和摘要目的。每个变量的范围从 0 到 1024 × 1024。
超出的任何字节
performance_schema_max_sql_text_length
都将被丢弃,并且不会出现在SQL_TEXT
列中。只有在该列中无法区分许多初始字节之后才不同的语句。摘要计算期间超出的任何字节
max_digest_length
都不会计入摘要值。只有在许多字节的已解析语句标记产生相同的摘要并聚合摘要统计信息之后,语句才会不同。对于生成仅末尾不同的非常长的语句的应用程序,更改
max_digest_length
变量的能力支持计算摘要,以区分先前聚合到同一摘要的语句。相反,管理员可以通过减少此变量的值来将更少的服务器内存用于摘要存储。管理员应该记住,较大的值会导致相应增加的内存需求,特别是对于涉及大量同时会话的工作负载。(max_digest_length
每个会话分配字节。)有关详细信息,请参阅 性能架构语句摘要。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
performance_schema
数据库中。参考资料:另请参阅:Bug #71057、Bug #68514、Bug #16414081。
-
-
MySQL 服务器现在支持查询重写插件:
预解析查询重写插件可以在服务器处理 SQL 语句之前重写到达服务器的 SQL 语句。该插件接收一个语句字符串并可能返回一个不同的字符串。
后解析查询重写插件支持基于解析树的语句重写。服务器解析每个语句并将其解析树传递给插件,插件可以遍历树。该插件可以将原始树返回给服务器进行进一步处理,或者构建一个不同的树并返回它。
MySQL 发行版现在包含一个名为
Rewriter
. 这个插件是基于规则的。您可以向其规则表中添加行以引起SELECT
语句重写。查询重写插件的一种应用是允许将较新的服务器功能与可能无法修改的应用程序一起使用。例如,该插件可以向无法更改的旧应用程序生成的语句添加优化器提示。
感谢 Padraig O'Sullivan 的相关代码贡献。
-
Incompatible Change: 系统
secure_file_priv
变量用于限制数据导入导出操作的影响。对服务器处理此变量的方式进行了以下更改:secure_file_priv
可以设置为NULL
禁用所有导入和导出操作。服务器
secure_file_priv
在启动时检查 的值,如果该值不安全,则将警告写入错误日志。非NULL
值如果为空,或者值为数据目录或其子目录,或者所有用户都可以访问的目录,则被认为是不安全的。如果secure_file_priv
设置为不存在的路径,则服务器将错误消息写入错误日志并退出。-
以前,
secure_file_priv
系统变量默认为空。现在默认值是特定于平台的,取决于 CMake选项的值,如下表所示。INSTALL_LAYOUT
INSTALL_LAYOUT
价值默认 secure_file_priv
值STANDALONE
,WIN
空的 DEB
,RPM
,SLES
,SVR4
/var/lib/mysql-files
否则 mysql-files
CMAKE_INSTALL_PREFIX
值以下 secure_file_priv
如果您从源代码构建, 要明确指定默认 值,请使用新的CMake选项。INSTALL_SECURE_FILE_PRIVDIR
(错误#24679907、错误#24695274、错误#24707666)
yaSSL 已升级到版本 2.3.7。(错误#19695101,错误#20201864)
由于 LogJam 问题 ( https://weakdh.org/),OpenSSL更改了 openssl-1.0.1n 及更高版本的 Diffie-Hellman 密钥长度参数。OpenSSL 在 http://openssl.org/news/secadv_20150611.txt提供了详细的解释。为了在 MySQL 中采用此更改,
vio/viosslfactories.c
用于创建 Diffie-Hellman 密钥的密钥长度已从 512 位增加到 2,048 位。(错误#77275、错误#21221862、错误#18367167、错误#21307471、错误#21449838)-
为了更容易生成支持使用 SSL 加密连接和使用 RSA 在未加密连接上安全密码交换所需的文件,MySQL 发行版现在包括mysql_ssl_rsa_setup实用程序。该实用程序使用openssl命令,因此它的使用取决于您的计算机上是否安装了 OpenSSL。调用时,mysql_ssl_rsa_setup检查 SSL 和 RSA 文件的数据目录, 如果它们丢失则使用openssl创建它们。有关详细信息,请参阅mysql_ssl_rsa_setup — 创建 SSL/RSA 文件。
启动时数据目录中密钥和证书文件的自动发现现在适用于使用 yaSSL 编译的服务器。以前,这仅适用于使用 OpenSSL 编译的服务器。请参阅配置 MySQL 以使用加密连接。
如果服务器自动启用加密连接,它会在错误日志中写入一条消息。如果服务器发现 CA 证书是自签名的,它会向错误日志写入警告。(如果由服务器自动创建或使用 mysql_ssl_rsa_setup手动创建,证书将是自签名的。)
空间函数现在以更大的块分配内存,以减少分配调用的次数并减少开销。(缺陷 #20073459,缺陷 #74949)
-
提供了一组新的空间便利功能:
ST_Distance_Sphere()
Point
:返回球体之间或球体参数之间的最小球面距离(以米为单位MultiPoint
)。ST_IsValid()
:检查几何是否有效。ST_MakeEnvelope()
:返回围绕两点形成包络的矩形。ST_Simplify()
:返回简化的几何图形。ST_Validate()
:返回经过验证的几何图形,或者NULL
它是否无效。
有关详细信息,请参阅 空间便利函数。
-
空间函数命名空间正在变得更加一致,最终目标是每个空间函数名称
ST_
在执行精确操作时以其开头,或者在MBR
执行基于最小边界矩形的操作时以其开头。目前,一些函数有两个实现和最多三个相关名称:一个有
ST_
前缀的名称,一个有MBR
前缀的名称,一个没有前缀的名称:带有
ST_
前缀的名称执行精确操作。带有
MBR
前缀的名称执行基于最小边界矩形的操作。没有前缀的名称有时是名称的别名
ST_
(如 withArea()
和ST_Area()
),有时是名称的别名MBR
(如 withContains()
和MBRContains()
),
此版本对空间函数命名进行了以下更改:
为每个没有 名称 的非函数添加 一个带有
ST_
前缀的函数。MBR
ST_
每个不以
ST_
or开头的函数MBR
都已弃用。例外是几何对象构造函数,它们保持不变:
Point()
、LineString()
、Polygon()
、MultiPoint()
、MultiLineString()
、MultiPolygon()
和GeometryCollection()
。这些函数已弃用,取而代之的是
MBR
名称:Contains()
,Disjoint()
,Equals()
,Intersects()
,Overlaps()
,Within()
。这些 功能 已 弃用 , 取而代之 的 是
ST_
名称 :Area()
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _AsBinary()
AsText()
AsWKB()
AsWKT()
Buffer()
Centroid()
ConvexHull()
Crosses()
Dimension()
Distance()
EndPoint()
Envelope()
ExteriorRing()
GeomCollFromText()
GeomCollFromWKB()
GeomFromText()
GeomFromWKB()
GeometryCollectionFromText()
GeometryCollectionFromWKB()
GeometryFromText()
GeometryFromWKB()
GeometryN()
GeometryType()
InteriorRingN()
IsClosed()
IsEmpty()
IsSimple()
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,LineFromText()
_LineFromWKB()
_LineStringFromText()
_LineStringFromWKB()
_MLineFromText()
_MLineFromWKB()
_MPointFromText()
_MPointFromWKB()
_MPolyFromText()
_MPolyFromWKB()
_MultiLineStringFromText()
_MultiLineStringFromWKB()
_MultiPointFromText()
_MultiPointFromWKB()
_MultiPolygonFromText()
_MultiPolygonFromWKB()
_NumGeometries()
_NumInteriorRings()
_NumPoints()
_PointFromText()
_PointFromWKB()
_PointN()
_PolyFromText()
_PolyFromWKB()
_PolygonFromText()
_PolygonFromWKB()
_SRID()
_StartPoint()
_Touches()
_X()
_Y()
.添加了 这些名称,
ST_
并且优先于相应的非 名称 , 这些 名称 现在ST_
已 弃用 :ST_MLineFromText()
,,,,,,,,,,,,,,,, 。ST_MLineFromWKB()
ST_MPointFromText()
ST_MPointFromWKB()
ST_MPolyFromText()
ST_MPolyFromWKB()
ST_MultiLineStringFromText()
ST_MultiLineStringFromWKB()
ST_MultiPointFromText()
ST_MultiPointFromWKB()
ST_MultiPolygonFromText()
ST_MultiPolygonFromWKB()
ST_GeomCollFromTxt()
添加为 的同义词ST_GeomCollFromText()
。ST_Length()
被添加来实现与 now-deprecated 相同的操作GLength()
,它具有非标准名称,因为名为的函数Length()
已经存在(用于计算字符串长度)。
使用已弃用的函数会产生警告。不推荐使用的函数将在未来的 MySQL 版本中删除。
-
检查空间关系的 函数现在使用 Boost.Geometry 1.56 及更高版本 中 可用 的 功能:
ST_Contains()
,,,,,,,,,, 。 具体来说,这些功能现在:ST_Crosses()
ST_Disjoint()
ST_Equals()
ST_Intersects()
ST_Overlaps()
ST_Touches()
ST_Within()
能够测试由 Boost.Geometry 处理的所有参数类型对之间的关系。
当以前的实现可能没有时,为无效参数类型引发异常。
这项工作还纠正 了两个仅共享边界的多边形
ST_Overlaps()
返回 1 和 返回 0 的问题,以及有时错误地计算 和 的交集结果的 问题。ST_Intersects()
ST_Intersects()
LineString
Polygon
参考资料:另请参阅:Bug #68091、Bug #16174580、Bug #71076、Bug #17894858。
GIS 代码现在用于
Boost.Geometry.Rtree
改进二进制 GIS 函数中几何集合参数的处理。几何集合组件的最小边界矩形 (MBR) 用于设置 rtree 索引,该索引用于使用其他几何集合的组件的每个 MBR 搜索可能的匹配组件。rtree 索引搜索的结果提供给精确计算算法,以避免不必要的(和更昂贵的)精确计算。因此,在 GIS 算法中处理几何集合参数的时间复杂度从 O(N^2) 降低到 O(NlogN)。-
这些更改已针对对几何值的最小边界矩形 (MBR) 进行操作的空间函数进行:
两个新函数使用 MBR 测试两个几何图形的覆盖关系。
MBRCovers()
指示一个几何体的 MBR 是否覆盖另一个几何体的 MBR。MBRCoveredBy()
测试相反的情况,指示一个几何体的 MBR 是否被另一个几何体的 MBR 覆盖。空间功能
MBREquals()
已经实现。它应该优先于MBREqual()
,现在已弃用。(新名称更符合类似Equals()
功能。)MBRTouches()
现在正确使用几何 MBR,而不是几何本身。MBRTouches()
并且MBRWithin()
更好地符合开放地理空间联盟规范:当一个点位于线段或多边形的边界上,或者当一条线段完全位于多边形的边界上时,它不被认为是“在”内,而是 “接触”。”此外,两个相同的点不被视为“触摸”。”
-
不相容的变化;InnoDB:索引页 的
MERGE_THRESHOLD
值现在可以使用、 和 语句COMMENT
子句进行 如果在删除行或通过操作 缩短行时 索引页的页满百分比低于该 尝试将索引页与相邻索引页合并。默认 值为 50,这是以前的硬编码值。CREATE TABLE
ALTER TABLE
CREATE INDEX
MERGE_THRESHOLD
UPDATE
InnoDB
MERGE_THRESHOLD
此功能
MERGE_THRESHOLD
向内部SYS_INDEXES
表添加一列。SYS_INDEXES
最初在 5.7.5 或更早版本中创建的表的记录不包括此列。在升级到 MySQL 5.7.6 或更高版本后重建或导入这些表可以正确地SYS_INDEXES
使用新MERGE_THRESHOLD
列更新记录。否则,TRUNCATE TABLE
或者ALTER TABLE ... RENAME INDEX
在服务器重启或表重新加载之后的操作会导致错误。此错误已在 MySQL 5.7.8 中修复(错误号 20882432)。有关详细信息,请参阅 配置索引页的合并阈值。
-
不兼容的更改: 一个新的 C API 函数,
mysql_real_escape_string_quote()
已被实现作为替代, 启用 SQL 模式mysql_real_escape_string()
时可能无法正确编码字符NO_BACKSLASH_ESCAPES
在这种情况下,mysql_real_escape_string()
除非将引号字符加倍,否则无法转义引号字符,并且要正确执行此操作,它必须了解比可用信息更多的有关引号上下文的信息。mysql_real_escape_string_quote()
需要一个额外的参数来指定引用上下文。有关使用详情,请参阅 mysql_real_escape_string_quote()。笔记应将应用程序修改为使用
mysql_real_escape_string_quote()
, 而不是 ,如果启用mysql_real_escape_string()
,现在会失败并产生CR_INSECURE_API_ERR
错误 。NO_BACKSLASH_ESCAPES
参考资料:另请参阅:Bug #19211994。
InnoDB: 所有与系统变量相关的剩余代码
innodb_file_io_threads
,在 MySQL 5.5 中被删除,从源代码中删除。(漏洞#19843885)InnoDB:
InnoDB
系统表空间数据现在暴露在Information Schema 表中INNODB_SYS_TABLESPACES
。INNODB_SYS_DATAFILES
InnoDB: 为了将分区引擎模块化并从服务器代码库中解耦,存储引擎处理程序类中的分区操作被移动到一个新的
partition_handler
基类,它现在是特定于分区的存储引擎功能的接口。-
InnoDB:
InnoDB
现在支持使用CREATE TABLESPACE
语法创建通用表空间。CREATE TABLESPACE `tablespace_name` ADD DATAFILE 'file_name.ibd' [FILE_BLOCK_SIZE = n]
通用表空间可以在MySQL数据目录之外创建,能够容纳多个表,支持所有行格式的表。
使用或 语法 将表添加到通用表空间 。
CREATE TABLE
tbl_name
... TABLESPACE [=]tablespace_name
ALTER TABLE
tbl_name
TABLESPACE [=]tablespace_name
有关详细信息,请参阅CREATE TABLESPACE 语句。
-
InnoDB:
InnoDB
现在支持本机分区。以前,InnoDB
依赖于ha_partition
处理程序,它为每个分区创建一个处理程序对象。对于本机分区,分区InnoDB
表使用单个分区感知处理程序对象。InnoDB
此增强功能减少了分区表 所需的内存量以下更改伴随
InnoDB
本机分区支持:.par
不再为分区InnoDB
表创建 分区定义 ( ) 文件。分区定义存储在InnoDB
内部数据字典中。分区定义 (.par
) 文件继续用于分区MyISAM
表。对于分区
InnoDB
表,FLUSH TABLES
不重置“下一个”AUTO_INCREMENT
值。相反,下一个AUTO_INCREMENT
值将在FLUSH TABLES
操作后保留和使用。如果最高AUTO_INCREMENT
值在FLUSH TABLES
操作之前被删除,则之后不会重用。对统计信息的微小更改可能会导致执行计划发生变化。
分区表的最小行数估计为
InnoDB
1 而不是 2。InnoDB
分区表索引 上的范围读取估计的最小行数是每个分区 0 而不是 1。在计算索引范围内的匹配行时,不是只包括最大的分区,而是包括读取集中的所有分区(修剪完成后)。因此,匹配索引行的统计信息更加准确,但对于具有多个分区的表,在优化器阶段花费的时间可能会增加。
-
InnoDB: MySQL 5.7.6 中包含以下与缓冲池刷新相关的增强功能:
如果与最旧的 LSN 关联的页面分布较高,则自适应刷新算法会刷新刷新列表末尾的所有页面。
一旦重做空间达到 30% 已满,对缓冲池实例的预扫描将确定每个缓冲池实例中最早修改的页面。基于此信息,自适应刷新算法确定在单次刷新过程中要从每个缓冲池实例中刷新的页数。这种方法有助于确保首先刷新最旧的修改页面。
在可能且 mysqld执行用户被授权的 Linux 平台上,
setpriority()
系统调用用于为page_cleaner
线程提供高于其他 MySQL/InnoDB 线程的优先级,以帮助页面刷新与当前工作负载保持同步。mysqld执行用户授权可以在/etc/security/limits.conf
. 有关详细信息,请参阅您的 Linux 操作系统文档。当最早的修改 LSN 接近定义的最大值 (
max_modified_age_sync
) 时,将启动缓冲池页面的同步预刷新,这可能会导致用户线程出现“刷新等待”情况。为了平滑吞吐量,用户线程只需要等待达到目标 LSN,而不是等待整个刷新批处理完成。用户线程等待被表的buffer_flush_sync_waits
度量 报告为同步刷新等待INFORMATION_SCHEMA.INNODB_METRICS
。添加了一个块以防止日志写入机制覆盖最后一个检查点 LSN。
如果
innodb_io_capacity_max
设置太高,则会在服务器错误日志中打印一条消息。-
page_cleaner
表中添加了用于监视线程活动的 新指标INNODB_METRICS
:buffer_flush_adaptive_avg_pass
:最近平均期间通过的自适应刷新次数。buffer_flush_adaptive_avg_time_est
:估计最近用于自适应刷新的时间(毫秒)。buffer_flush_adaptive_avg_time_slot
:最近每个插槽自适应刷新花费的平均时间(毫秒)。buffer_flush_adaptive_avg_time_thread
:最近每个线程自适应刷新花费的平均时间(毫秒)。buffer_flush_avg_pass
:最近平均期间通过的刷新次数。buffer_flush_avg_time
:最近用于刷新的平均时间(毫秒)。buffer_flush_n_to_flush_by_age
:LSN Age 用于刷新的目标页数。buffer_LRU_batch_flush_avg_pass
:最近平均期间通过的 LRU 批量刷新次数。buffer_LRU_batch_flush_avg_time_est
: 估计最近 LRU 批量刷新花费的时间 (ms)。buffer_LRU_batch_flush_avg_time_slot
:最近每个插槽的 LRU 批量刷新花费的平均时间(毫秒)。buffer_LRU_batch_flush_avg_time_thread
:最近每个线程用于 LRU 批量刷新的平均时间(毫秒)。buffer_LRU_get_free_loops
:LRU 中的总循环得到释放。buffer_LRU_get_free_waits
:LRU 中的总睡眠等待得到释放。
-
InnoDB: 性能模式现在检测用于监视
InnoDB
ALTER TABLE
和缓冲池加载操作的阶段事件。新的舞台活动包括:stage/innodb/alter table (read PK and internal sort)
stage/innodb/alter table (merge sort)
stage/innodb/alter table (insert)
stage/innodb/alter table (flush)
stage/innodb/alter table (log apply index)
stage/innodb/alter table (log apply table)
stage/innodb/alter table (end)
stage/innodb/buffer pool load
有关详细信息,请参阅 InnoDB 与 MySQL Performance Schema 的集成和 保存和恢复缓冲池状态。
InnoDB: 添加了与复制相关的支持
InnoDB
,可以在死锁场景中优先处理从属应用程序事务而不是其他事务。此事务优先级排序机制保留供将来使用。InnoDB: 索引
CHECK TABLE
的功能得到了增强InnoDB
SPATIAL
以前, 索引CHECK TABLE
执行最少的检查InnoDB
SPATIAL
增强的功能包括 R-tree 有效性检查和检查以确保 R-tree 行计数与聚集索引匹配。InnoDB: 该
internal_tmp_disk_storage_engine
选项的默认设置现在是 ,它定义了服务器用于磁盘内部临时表的存储引擎INNODB
。通过此更改,优化器使用InnoDB
存储引擎而不是MyISAM
内部临时表。有关相关信息,请参阅 MySQL 中的内部临时表使用。InnoDB:
InnoDB
现在支持 32KB 和 64KB 页面大小。对于这两种页面大小,最大记录大小为 16KB。ROW_FORMAT=COMPRESSED
不支持 32KB 或 64KB 页面大小。对于 32KB 页面大小,扩展区大小为 2MB,对于 64MB 页面大小,扩展区大小为 4MB。innodb_log_buffer_size
默认值从 8MB 增加到 16MB 以支持新的页面大小。innodb_log_buffer_size
使用 32KB 或 64KB 的页面大小时,应将其设置为最小值 16MB。InnoDB: 为了支持未来的发展,重构了初始化、验证和处理表空间和表标志的代码。并且对
fil_create_ibd_tablespace
函数进行了重构,对一些单表空间相关的函数和变量进行了重命名。复制: 在启用二进制日志记录的情况下使用 InnoDB 时,写入 InnoDB 重做日志中的并发事务现在在同步到磁盘之前分组在一起,当
innodb_flush_log_at_trx_commit
设置为 1 时,这减少了同步操作的数量。这可以提高性能。(漏洞 #19424075)-
复制: 添加了许多与性能模式和组复制相关的功能和增强功能。此处列出了这些新增内容:
和
replication_group_members
性能replication_group_member_stats
模式表。表格的一
GROUP_NAME
列replication_connection_status
。许多错误和错误消息。
复制: 现在
Previous_gtids
每个二进制日志中都有一个事件,无论gtid_mode
. 在以前的版本中,它仅在gtid_mode=on
. 同样,现在Anonymous_gtid
每笔交易之前都有一个事件 whengtid_mode=off
。这些更改确保无论使用何种类型的二进制日志记录,都会生成类似的每个事务事件。以及启用新增加的在线更改功能 和gtid_mode
恢复也有积极影响 。gtid_purged
gtid_executed
复制: 现在使用了一种新的更通用的并行化算法
slave_parallel_type=LOGICAL_CLOCK
,取代了以前仅限于不同数据库上事务的算法。当 master 上的事务不相互依赖时,这会提高吞吐量。现在即使主服务器上的两个并发事务也可以在从服务器上并行执行,如果它们持有主服务器上的所有锁。此外,现在通过添加到二进制日志中的复制事务的额外字段在从站上跟踪事务依赖性。-
复制: 现在可以更改复制模式,而无需关闭服务器或同步拓扑。作为此功能的一部分,进行了以下更改:
该变量
gtid_mode
现在是动态的。它可以通过SUPER
顶级语句设置。状态OFF_PERMISSIVE
和ON_PERMISSIVE
已添加。该变量
enforce_gtid_consistency
现在是动态的。它可以通过SUPER
顶级语句设置。Ongoing_anonymous_transaction_count
引入了 状态变量 。这显示了已标记为匿名的正在进行的交易数量。状态变量
Ongoing_anonymous_gtid_violating_transaction_count
和Ongoing_automatic_gtid_violating_transaction_count
已在启用调试的构建中引入。它们在非调试版本中不可用。这些变量计算违反 GTID 一致性的正在进行的事务的数量,分别使用gtid_next=ANONYMOUS
和gtid_next=AUTOMATIC
。
有关详细信息,请参阅 更改联机服务器上的复制模式
-
复制: MySQL 多源复制增加了从多个主服务器复制到一个从服务器的能力。MySQL Multi-Source Replication 拓扑可用于将多台服务器备份到单台服务器、合并表分片以及将多台服务器的数据整合到单台服务器。请参阅 MySQL 多源复制。
作为 MySQL 多源复制的一部分,添加了复制通道。复制通道使从站能够打开多个连接进行复制,每个通道都是到主站的连接。为了能够选择特定通道,与复制相关的 SQL 语句现在支持可选子句。请参阅 复制通道。
FOR CHANNEL
channel
C 客户端库中未记录的函数现在已隐藏。这有助于最大限度地减少命名空间污染,并允许链接需要来自 yaSSL(在客户端库中)和 OpenSSL 的功能的应用程序。(错误#20476596,错误#18427840)
CMake支持已更新以处理 CMake版本 3.1。(缺陷号 20344207)
以前,Windows 上的调试版本是使用 构建的
/Ob0
,它禁用函数内联。构建现在用于/Ob1
启用内联。新的CMake选项可用于控制内联。默认值为(启用内联);如果设置为,则禁用内联。(缺陷号 20316320)WIN_DEBUG_NO_INLINE
OFF
ON
新的
-DWITH_UBSAN=ON
CMake 选项启用未定义的行为消毒器。GCC 4.9 及更高版本以及 Clang 3.4 及更高版本支持此功能。(漏洞 #19587393)中 SSL 证书的有效日期范围
mysql-test/std_data
已扩展到 2029 年。(漏洞 #18366947)减少了查询的开销,例如通过 sysbench “ order-by-range ”测试测试的查询。(错误#75390,错误#20296891)
mysql客户端程序 现在支持
\C
在prompt
命令中表示当前连接标识符。感谢 Tsubasa Tanaka 提供补丁。(缺陷 #75242,缺陷 #20227145)服务器现在在将初始“开始”消息 写入错误日志时包括其版本号,以便更容易判断错误日志输出适用于哪个服务器实例。
version
该值与系统变量中可用的值相同 。(缺陷 #74917,缺陷 #20052694)以前,
auth_socket
身份验证插件仅根据客户端程序向服务器指定的 MySQL 用户名检查套接字用户名。现在,如果这些名称不匹配,插件还会检查套接字用户名是否与authentication_string
表mysql.user
行列中指定的名称匹配。在任何一种情况下,插件都允许连接以进行匹配。感谢 Daniël van Eeden 提供补丁。(错误#74586,错误#20041925)版本号
libmysqlclient
已增加到 20.0.0。(错误#74206,错误#19729266)一个新的CMake选项
WITH_MSCRT_DEBUG
可用于控制 Visual Studio CRT 内存泄漏跟踪。默认值为OFF
。(错误#73064,错误#19031370)从 MySQL 5.7.2 开始,服务器在启动时禁用任何没有身份验证插件的帐户。在这种情况下,服务器现在会向错误日志写入更详细的消息,以指示如何重新启用此类帐户。(错误#73026,错误#19011337)
系统变量的最小值
stored_program_cache
已从 256 更改为 16,以便能够配置更小的内存量专用于存储的程序缓存。(错误#72451,错误#18661573)中的代码
my_strnxfrm_simple()
不是最理想的并且已得到改进。感谢 Alexey Kopytov 提供的补丁。(漏洞 #68476,漏洞 #16403708)元数据锁定子系统(请参阅 元数据锁定)已扩展为涵盖对表空间的并发访问。这包括显式影响表空间的 DDL 语句:
ALTER TABLESPACE
、CREATE TABLESPACE
和DROP TABLESPACE
。它还包括影响表空间内容 的 DDL 语句 :ALTER TABLE
、、、、、、、、和 。CREATE INDEX
CREATE TABLE
DROP INDEX
DROP TABLE
LOCK TABLES
RENAME TABLE
TRUNCATE TABLE
-
对于与 结合
ORDER BY
的 查询,LIMIT
优化器可能会切换到适用于ORDER BY
. 在某些情况下,转换的决定是基于启发式而非成本。优化器现在统一决定是否以成本为基础进行切换。当切换会导致查询读取整个索引或其中的大部分以查找符合条件的行时,这应该会带来更好的性能。参考资料:另请参阅:Bug #78993、Bug #22108385、Bug #73837、Bug #19579507、Bug #16522053。
服务器和客户端错误的编号范围分别从 1000 和 2000 开始。但是,服务器错误号接近 2000,导致与客户端错误号的潜在冲突。为了解决这个问题,MySQL 5.7 的服务器错误编号现在有一个从 3000 开始的范围。这是通过允许多行 in 来实现的,每行都将编号重置为。
start-error-number
N
sql/share/errmsg-utf8.txt
N
-
优化器内的重构导致以下
EXPLAIN
输出改进:此外,对于之前返回的错误是“未知错误”的终止查询,错误现在是 “查询执行被中断”。
参考资料:另请参阅:Bug #70553、Bug #17575172。
-
MySQL 现在提供了一个内置的支持中文、日语和韩语 (CJK) 的 ngram 全文解析器插件,以及一个可安装的日语 MeCab 全文解析器插件。解析器插件可以
InnoDB
与MyISAM
表一起使用。内置的MySQL全文解析器使用单词之间的空格作为分隔符来确定单词的开始和结束位置,这是内置MySQL全文解析器对不使用单词分隔符的表意语言的限制。ngram 和 MeCab 全文解析器插件的添加解决了这一限制。
有关详细信息,请参阅 ngram Full-Text Parser和 MeCab Full-Text Parser Plugin。
-
系统数据库 中 的
plugin
和servers
表现在是(事务)表。以前,这些是(非事务性)表。mysql
InnoDB
MyISAM
由于此更改,
INSTALL PLUGIN
现在UNINSTALL PLUGIN
包含在导致隐式提交的语句中(请参阅导致隐式提交的 语句)。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
mysql
数据库中。 新的
session_track_gtids
系统变量配置了一个会话跟踪器,它捕获 GTID 并将它们从服务器返回给客户端。从 C API 中,GTID 信息可以通过SESSION_TRACK_GTIDS
作为type
参数传递给mysql_session_track_get_first()
和mysql_session_track_get_next()
函数来获取。有关详细信息,请参阅 客户端会话状态的服务器跟踪。
-
不相容的变化;InnoDB: 如果您的系统包含在 MySQL 5.1 之前创建的表空间数据文件,请在升级到 MySQL 5.7.6 之前仔细阅读本说明。
在 MySQL 5.1 之前创建的表空间数据文件有时
FIL_PAGE_TYPE
在某些页面中包含垃圾值。为解决此问题,添加了一个新的文件页面类型常量 (FIL_PAGE_TYPE_UNKNOWN
),并且FIL_PAGE_TYPE
现在将未知值重置为FIL_PAGE_TYPE_UNKNOWN
。FIL_PAGE_INDEX
但是,当一个字段中包含无效或FIL_PAGE_RTREE
值 的非索引页FIL_PAGE_TYPE
写入磁盘时,您仍然可能会遇到失败。您可以通过修改数据文件以将无效FIL_PAGE_TYPE
值 替换为 来解决故障FIL_PAGE_UNKNOWN
。FIL_PAGE_TYPE
错误日志消息提供了具有无效值 的页面的表空间 ID 和页码。在 MySQL 5.6 之前,
InnoDB
页面大小始终为 16384 字节。FIL_PAGE_TYPE
定义为 24。因此,如果表空间数据文件的页码 P 受到影响,则字节偏移量 16384*P+24 处的数据应包含字节0x45 0xbf
(FIL_PAGE_INDEX
) 或0x45 0xbe
(FIL_PAGE_RTREE
)。0x00 0x0d
用( )替换这些字节FIL_PAGE_UNKNOWN
。如果该页包含字符串
infimum
且supremum
字节偏移量为 99 或 101(开始后 75 或 77 个字节FIL_PAGE_TYPE
),则该页可能是索引页,并且可能存在实际损坏。警告不要试图直接修改数据文件,除非您确切地知道您在做什么并且完全理解其中的含义。MySQL 5.7.7 中不再需要手动修改数据文件,修复了 Bug #20691930。
如果在您的 MySQL 5.5 之前的数据文件
FIL_PAGE_TYPE
中重置为FIL_PAGE_TYPE_UNKNOWN
,您可能会在重新启动服务器时遇到页面损坏错误。该错误是由于 页面校验和中FIL_PAGE_TYPE
的一个字段InnoDB
仍设置为以前的FIL_PAGE_TYPE
值。要解决该错误,请使用 innochecksum工具重写页面校验和。MySQL 5.7.7 中 Bug #20691930 的补丁通过在重置FIL_PAGE_TYPE
值后重新计算页面校验和解决了这个问题。(错误#17345513、错误#17332603、错误#19658698) 创新数据库;Microsoft Windows: 在 Windows 上,重命名
FULLTEXT
搜索文件名会引发断言。(漏洞 #20001827)创新数据库;Microsoft Windows: 简化了用于在 Windows 上选择本机异步 I/O (AIO) 的逻辑。MySQL 5.7 支持的所有 Windows 版本现在都支持原生 AIO。不再需要处理不支持本机 AIO 的旧 Windows 版本所需的逻辑。(漏洞 #19803939)
InnoDB: 打开和关闭优化的临时表导致
InnoDB
监视器输出中出现负表引用计数。(缺陷号 20608113)InnoDB: 从中删除了重复的数据库页面损坏错误消息
buf0buf.cc
。(缺陷号 20605167)InnoDB:表 的
NAME
列INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO
被错误地声明为 192 个字符宽。正确的长度是 64 个字符。(缺陷号 20512578)InnoDB: 全文短语搜索返回了错误的结果。标记新插入的行时错误处理了空字符串。(缺陷 #20465273,缺陷 #75755)
InnoDB: 删除了 MySQL 5.7.0 中引入的解决方法,在 Bug #14658648 的补丁中。解决方法允许 MySQL 在崩溃恢复期间禁用查询缓存。如果 MySQL 在启用查询缓存的情况下 XA 事务处于 PREPARED 状态时崩溃,则在崩溃恢复期间可能会产生不一致的数据。错误#16593427 的补丁在 MySQL 5.7.2 中修复了该错误。(缺陷号 20461632)
InnoDB: 在调试版本中,与调整缓冲池大小相关的断言代码导致 Valgrind 测试时间显着增加。(缺陷号 20461123)
InnoDB: 对空间索引使用更改缓冲引发了断言。不应为空间索引设置更改缓冲区标志。(缺陷 #20452564,缺陷 #75718)
InnoDB: 在 上
ALTER TABLE ... IMPORT TABLESPACE
,内存不足 (OOM) 上缺少字典解锁调用,这可能导致在为.ibd
文件路径字符串分配内存时失败。(缺陷号 20430105)InnoDB:
DWITH_EXTRA_CHARSETS=none
使用 .build MySQL时 发生未定义的引用错误 (缺陷号 20429800)-
InnoDB: 优化
FULLTEXT
索引引发了断言。FULLTEXT
索引 的最后一个优化词 定义为 CHAR(50)CONFIG
表value
当最后优化的单词长度超过 50 个字符时,会引发断言。从CONFIG
表value
列定义为 CHAR(200)。如果您的
innodb_ft_max_token_size
设置大于 50,建议您InnoDB
FULLTEXT
在升级到 MySQL 5.6.24 或 MySQL 5.7.6 后重新创建现有索引以避免此问题。FULLTEXT
升级到 MySQL 5.6.24 或 MySQL 5.7.6 后创建的索引不受影响。(缺陷号 20418326) InnoDB:删除 了
innodb_optimize_point_storage
选项和相关的内部数据类型(DATA_POINT
和DATA_VAR_POINT
(缺陷号 20415831)InnoDB: 在服务器开始关闭时
fts_optimize_thread()
设置一个 NULL 启动。(缺陷号 20389745)exit_event
fts_optimize_thread
InnoDB: memcached提出
process_arithmetic_command
了一个断言。decr
为不存在的密钥返回了错误的错误代码 (缺陷号 20386835)InnoDB:忽略了使用memcached
exptime
命令定义 的过期时间 (memcached将过期时间设置为一个间隔值而不是系统时间值。(缺陷 #20381342,缺陷 #70055)set
InnoDB
InnoDB: GIS 相关
mbr_join_square
函数中的 NaN 值引发断言。(缺陷号 20379160)InnoDB:删除 了
innobase_close_thd
函数和相关的包装函数和指针。这些函数和指针是随InnoDB
memcached插件引入的,但从未使用过。(缺陷号 20369370)InnoDB: 当全文搜索
fts_savepoint_release()
功能释放命名事务保存点和所有后续保存点时,引发了断言。只应释放初始保存点。(缺陷号 20341916)InnoDB:
InnoDB
表名称在存储持久统计信息的表 的诊断输出中显示不一致(缺陷号 20330831)InnoDB:为MySQL 5.7.2 中的表启用 的状态的已恢复事务进行(缺陷号 20303205)
INFORMATION_SCHEMA.TABLES
UPDATE_TIME
InnoDB
XA COMMIT
XA PREPARE
InnoDB: 在
/storage/innobase/trx/trx0trx.cc
.trx->lock.rec_pool.empty()
被用来代替trx->lock.table_pool.empty()
. (缺陷 #20294158,缺陷 #75373)InnoDB: 在MySQL 5.7.5 中添加的返回中缺少
/storage/innobase/handler/ha_innodb.cc
ava_end()
(缺陷 #20285744,缺陷 #75323)InnoDB: 全文搜索优化操作提出了断言。(缺陷号 20281800)
InnoDB: 表空间导出操作将清除状态设置为
PURGE_STATE_STOP
,但清除线程直到当前清除操作完成后才检查清除状态。在历史列表很大的情况下,表空间导出操作被延迟,等待当前清除操作完成。现在检查每个清除批次的清除状态。(错误#20266847,错误#75298)InnoDB: 当从磁盘读取页面时,会检查挂起的插入缓冲区条目,这涉及获取插入缓冲区页面上的锁存器。如果找到未决条目,则将它们合并。因为change buffer只适用于非临时表空间的B-tree secondary leaf pages,insert buffer merge并不是所有页类型都需要的。使用从磁盘读取的页面中的 page_type、page_level 和表空间类型信息,对于不适用的页面类型,现在会跳过插入缓冲区合并。(缺陷号 20220909)
InnoDB:
InnoDB
为重做日志 创建的内部伪表空间的名称ib_logfile101
为innodb_redo_log
。新名称与其他使用 “ innodb_ ”前缀的 MySQL 5.7 内部表空间名称一致。(缺陷号 20204978)InnoDB:
ALTER TABLE ... ADD INDEX
由于断言代码不允许在线索引状态,操作引发了 断言ONLINE_INDEX_ABORTED_DROPPED
。断言代码放宽了。(缺陷号 20198726)InnoDB: 尝试访问由于先前的不一致而为 NULL 的表的表名导致
innobase_update_foreign_cache()
打印错误时崩溃。(缺陷号 20146176)InnoDB:
push_warning_printf
在服务器恢复期间调用函数 时发生错误 此函数以前用于向客户端打印警告消息。此外,current_thd
在服务器重新启动时为 NULL。(缺陷号 20144839)InnoDB: 关闭时的最后一个刷新循环没有调用
buf_flush_wait_LRU_batch_end()
,导致断言失败。(缺陷号 20137435)InnoDB:删除了使用不一致和冗余 的
dict_index_t::auto_gen_clust_index
标志。(缺陷号 20136192)InnoDB: 内存访问冲突
fts_optimize_thread
导致服务器停止。表已释放但未从全文搜索优化队列中删除。(缺陷号 20125560)InnoDB: 在级联更新后更新引用表的统计信息时引发断言。(缺陷号 20125466)
InnoDB:
btr_cur_latch_leaves
执行加载操作时 发生崩溃检查页面状态而不锁定页面会导致不一致。页面状态只应在页面被锁定后检查。(缺陷 #20111105,缺陷 #74596)InnoDB: 计数器未能报告计数器数据。(缺陷 #20080942,缺陷 #74511)
INNODB_METRICS
adaptive_hash_searches_btree
-
InnoDB: 由于 MySQL 5.6.20 中引入的回归,当memcached插件处于活动状态时, mysqld 停止不会停止mysqld服务器进程(缺陷 #20078646,缺陷 #74956)
InnoDB
参考资料:此问题是 Bug #18409840 的回归。
InnoDB: 删除了在表和索引创建期间使用和 的
commit_node
成员 该成员已初始化但从未使用过。未使用 和 执行步骤也被删除。(缺陷号 20060218)tab_node_t
ind_node_t
commit_node
TABLE_COMMIT_WORK
INDEX_COMMIT_WORK
InnoDB:具有索引的表上 的
ALTER TABLE ... RENAME
故障FULLTEXT
引发了断言。(缺陷号 20043707)InnoDB:在对临时表 进行操作期间遇到重复键错误
REPLACE
引发断言。(缺陷号 20040791)InnoDB:更改外键列名称 的
ALTER TABLE
操作导致重新加载外键约束时失败。之前的列名保留在数据字典缓存中,而不是被逐出。(缺陷号 20031243)InnoDB:
ALTER TABLE
无法检查表是否已损坏。如果聚集索引已损坏或表被标记为已损坏,则应拒绝ALTER TABLE
影响 的InnoDB
如果ALTER TABLE
未重建表并且损坏的二级索引将在操作后保留,则也应拒绝ALTER TABLE
操作。(缺陷 #20015132,缺陷 #74810)InnoDB: 行更新操作在
row_upd_sec_index_entry()
. 在row_merge_read_clustered_index()
中,缓存的空间索引未在小事务提交之前插入。提交小事务后,聚集索引页将被更新或释放,导致缓存空间索引条目的主键字段指向无效地址。(漏洞#19999469)InnoDB:
btr_cur_search_to_nth_level
函数 中提出了一个断言 共享锁(s-locks)和共享独占锁(sx-locks)都应该被允许用于所有闩锁模式。(漏洞#19984494)InnoDB:
ALTER TABLE
对具有索引的表 的FULLTEXT
引发了断言。该表已存在于缓存中并且FULLTEXT
索引已初始化。重新加载表时,FULLTEXT
索引再次初始化,导致断言。(漏洞#19978288)InnoDB:对压缩临时表 的
UPDATE
操作引发了断言。扩展压缩临时表的表空间时使用了共享临时表空间属性。(漏洞#19976331)InnoDB: 服务器日志报告了向量下标超出范围错误。(漏洞#19955501)
InnoDB:
CHECK TABLE
在执行验证之前无法检查表是否处于损坏状态,导致断言。(漏洞#19954054)-
InnoDB: 为了避免很少写入的表空间上的 I/O,该
fsp_get_available_space_in_free_extents
函数现在从缓存字段而不是缓冲池中的表空间标题页访问元数据。此补丁还包括以下优化:
为了避免查找,
fsp_fill_free_list()
一些其他函数现在采用fil_space_t
指针而不是数字表空间标识符。该
fil_extend_space_to_desired_size
函数已重命名为fil_space_extend
并简化了其 API。添加了一种新方法,
undo::Truncate::was_tablespace_truncated
以避免在刷新截断的撤消表空间文件之前进行一致性检查。
(漏洞#19949683)
InnoDB: 失败的
DROP TABLE
操作可能会使表处于不一致状态,而不会将表标记为已损坏。(缺陷 #19946781,缺陷 #74676)InnoDB: 添加了一个包装类以改进带引号的 SQL 标识符的打印,例如索引、列和表空间名称。(漏洞#19933607)
-
InnoDB: 一个
ALTER TABLE
操作提出了一个断言。当从字典缓存中删除外键对象时,从 rb-tree 中删除了不正确的外键对象。(漏洞 #19908343)参考:这个问题是 Bug #18806829 的回归。
-
InnoDB: 对具有全文搜索索引的表的 DML 操作引发了无效断言。(漏洞 #19905246)
参考资料:此问题是 Bug #19314480 的回归。
InnoDB: 一个缺失
DBUG_RETURN()
了ha_innobase::update_row
一个断言。(漏洞 #19904800)InnoDB: 在调试版本中,将
innodb_limit_optimistic_insert_debug
调试配置选项设置为 1 会导致无限的 B 树页面拆分。(缺陷 #19904003,缺陷 #74605)InnoDB:
ALTER TABLE ... DROP PRIMARY KEY, ADD PRIMARY KEY
更改主键字段前缀长度的操作在批量插入代码中引发断言 。(漏洞#19896922)InnoDB: 一些
InnoDB
到 stderr 的诊断输出包括不必要的换行符和没有前置时间戳的行。由于在几个非原子步骤中写出消息,来自多个线程的输出可能会交错。(漏洞 #19895222)InnoDB:
innodb_create_intrinsic
删除了 MySQL 5.7.5 中引入 的(漏洞#19893327)InnoDB: 从 MySQL 5.7.5 开始,MySQL 构建依赖于目标平台上存在的原子内存访问原语。为了简化代码,
HAVE_ATOMIC_BUILTINS
已从InnoDB
MySQL 5.7.6 的源代码中删除。InnoDB
现在在 Windows 上依赖于 Microsoft 原子,在其他平台上依赖于 GCC 风格的原子。(漏洞#19856411)InnoDB: 在
ALTER TABLE
将具有 UTF-8 字符集的表转换为ROW_FORMAT=REDUNDANT
. (错误#19843246、错误#19895661、错误#20219871)InnoDB: 多表删除操作导致服务器停止。(漏洞 #19815702)
-
InnoDB: 缓冲池转储引用了不存在的表空间 ID。(漏洞#19814155)
参考资料:此问题是 Bug #19149177 的回归。
InnoDB: 在调试版本中,
buf_block_align()
可以在调整缓冲池大小时从调试断言代码调用,从而导致竞争条件。(漏洞 #19803497)InnoDB: 一个
FLUSH TABLES
操作提出了一个断言。(漏洞#19803418)InnoDB: 该
dict_boot()
函数没有设置用于索引字段的列的最大长度,导致dict_index_node_ptr_max_size()
返回值不正确。(漏洞 #19791849)InnoDB: 创建虚拟表时, 不必要地创建
autoinc_mutex
了对象的成员dict_table_t
同样,为虚拟索引不必要地创建zip_pad.mutex
对象的dict_index_t
为了避免不必要的互斥争用,autoinc_mutex
对象zip_pad.mutex
现在在第一次锁定尝试时分配和初始化。(缺陷 #19788198,缺陷 #73361)-
InnoDB:
log_sys->mutex
在读取字段时未持有fil_space_t::max_lsn
,导致竞争条件。(漏洞 #19729855)参考:这个问题是 Bug #18645050 的回归。
InnoDB:
btr_insert_into_right_sibling()
可以删除父页面的节点指针。为了避免闩锁顺序违规和与其他线程的死锁,现在检查叶页和上层非叶页的锁定意图。(漏洞 #19729316)InnoDB:
InnoDB
在表空间导出操作期间在更改缓冲区中执行不必要的表查找。(漏洞 #19724300)InnoDB:在 MySQL 4.1 中添加 的
fil_tablespace_deleted_or_being_deleted_in_mem()
功能不再需要,已被删除。有一个fil_io()
返回DB_TABLESPACE_DELETED
。(漏洞 #19719727)InnoDB: 为了方便以后的开发,对
ha_innobase::create
函数进行了重构。(漏洞 #19718568)InnoDB :
srv_read_only_mode
从ha_innobase::create()
. 冗余的条件分支和未使用的局部变量已从ha_innobase::delete_table()
. (漏洞 #19712822)InnoDB:
InnoDB
FULLTEXT
删除了与索引 的 UTF-8 处理相关的未使用代码 (漏洞 #19712059)InnoDB: 该
fil_index_tree_is_freed()
函数在重新分配索引根页面时返回假阴性,已被用于释放索引树的改进逻辑所取代。此补丁还删除了传递给dict_drop_index_tree()
. (漏洞#19710798)InnoDB: change
InnoDB
buffer tree,原本在InnoDB
数据字典缓存内部创建,现在直接创建,绕过缓存。此补丁还删除了DICT_UNIVERSAL
与DICT_IBUF
. 这两个标志都没有用于持久数据结构,因此DICT_UNIVERSAL
没有必要。(漏洞#19710650)InnoDB: 该
fil_space_t::tablespace_version
字段被引入以跟踪ALTER TABLE...DISCARD TABLESPACE
后续ALTER TABLE IMPORT TABLESPACE
操作,已被删除。该 在导入tablespace_version
具有相同内容的表空间时,不会对旧的缓冲条目发生更改缓冲区合并space_id
该字段是多余的,不再需要。(漏洞 #19710564)InnoDB: 删除了与索引名称查找相关的未使用代码,并替换了一个允许重复索引名称的函数。(漏洞 #19710348)
InnoDB: 列和索引名称在
InnoDB
诊断消息和接口中被不必要地转义。此补丁还添加了一个新函数 , 输出innobase_quote_identifier
中引用FOREIGN KEY
约束和列名SHOW CREATE TABLE
(漏洞 #19704286)InnoDB: 使用 MySQL 线程池时,连接在负载测试期间遇到长信号量等待。(漏洞 #19703758,漏洞 #19887285)
InnoDB: 自从MySQL 5.1引入快速创建索引后,索引对象在
SYS_INDEXES
提交之前被添加到内部数据字典表中。未提交的条目由前缀(定义为TEMP_INDEX_PREFIX
)标识。TEMP_INDEX_PREFIX
也用于InnoDB
数据字典缓存,导致显示或比较索引名称时出现复杂情况。为了解决这个问题,dict_index_t::uncommitted
引入了一个新标志以及访问器方法is_committed()
和set_committed()
. 在此更改之前,一些InnoDB
INFORMATION_SCHEMA
表显示未提交的索引名称,前面带有问号。现在省略了问号前缀。(漏洞 #19702328)InnoDB:
InnoDB
在诊断消息中显示的表名不一致。一些消息使用内部表示显示表名,而其他消息以翻译形式显示表名。(漏洞#19694618)InnoDB: 对于
FULLTEXT
索引,FTS_DOC_ID_INDEX
在 DML 操作期间执行了查找。为了避免代价高昂的查找,指向的指针FTS_DOC_ID_INDEX
现在在 DDL 时间缓存。(漏洞#19693488)InnoDB: 为了简化代码,
is_redo_skipped
了 MySQL 5.7.5 中引入的具有CREATE INDEX
批量加载功能的标志。该标志导致跳过页面分配的重做日志记录。现在为页面分配生成重做日志,即使在创建新表空间时也是如此。(漏洞#19693192)InnoDB:
MLOG_FILE_NAME
即使表空间文件没有更改,也会在日志检查点上发出重做日志记录,它提供识别自上次检查点以来更改的表空间文件所需的信息 。如果表空间文件在崩溃恢复时丢失或不可读,如果没有要应用的重做日志,则应忽略不一致。有关相关信息,请参阅 崩溃恢复期间的表空间发现。(漏洞 #19685095)-
InnoDB: 删除
archive_space_id
了函数中传递和忽略 的未使用参数log_group_init
(漏洞 #19669129)参考资料:另请参阅:Bug #16296837。
InnoDB: 在只读模式下,使用该
MBRCONTAINS()
函数的 GIS 数据搜索引发了断言。(漏洞#19664678)InnoDB: 调用之前未执行索引树的页面保留
btr_page_alloc()
。(漏洞 #19660261)-
InnoDB: 使用 GCC 在 Debian 7 32 位系统上构建 MySQL 5.7.5 导致 MySQL 服务器故障。问题是由于 GCC 错误( Debian 错误报告#764220)导致当将指针或引用作为参数的函数声明为
attribute((const))
或attribute((pure))
。已知该问题发生在使用 g++-4.6 (Debian 4.6.3-14) 4.6.3 或 g++ (Debian 4.7.2-5) 4.7.2 的 Debian Wheezy 7.6 x86 以及使用 gcc ( Debian 4.9.1-15) 4.9.1 或 g++ (Debian 4.9.1-15) 4.9.1。该错误可能存在于其他 gcc-4.x 版本以及接受attribute((const))
或attribute((pure))
代码的任何 GCC 版本中。为了避免这个错误,有问题的属性已从 MySQL 函数中删除,这些函数采用它们取消引用的指针或引用。
此补丁还删除了 的实例
attribute((nonnull))
,这些实例在传递 NULL 时并不总是生成警告,并且可能不会发出用于处理 NULL 情况的代码。(漏洞#19632776) InnoDB:
lock_rec_free_all_from_discard_page_low()
由于从索引树中删除的空页上的陈旧记录锁, 回滚操作引发了断言 (漏洞#19628598)InnoDB:
modify_clock
现在存储 该buf_page_optimistic_get()
用于对数据库页面进行乐观访问的函数在大多数情况下都能成功。已从.PAGE_HEAP_TOP
_FIL_PAGE_TYPE
_btr0bulk.cc
(漏洞#19611367)InnoDB: 该
dict_set_corrupted()
函数试图SYS_INDEXES
错误地更新数据字典表的聚簇索引。(漏洞 #19584379)InnoDB: 使用新的 Clang 3.5 版本进行编译会导致出现许多
InnoDB
编译警告。(漏洞#19579603)InnoDB:从源文件中
api0api.h
删除 了未使用的 API 定义api0api.cc
(漏洞#19579149)InnoDB: 该
DICT_TF2_USE_FILE_PER_TABLE
标志应由该dict_table_use_file_per_table
函数进行测试,以验证该表是否使用 file-per-table 表空间。(漏洞 #19578222)InnoDB:
innodb_create_intrinsic
启用后,在操作期间创建的临时表 被ALTER TABLE
标记为优化的临时表,从而产生断言。启用innodb_create_intrinsic
应该只影响CREATE TABLE
和CREATE INDEX
操作。(漏洞#19565749)InnoDB: Valgrind 测试返回条件跳转或移动取决于 buf_page_is_zeroes 处的未初始化值错误。页面的未读部分包含垃圾值。(漏洞#19536534)
InnoDB:对空间索引 的
INSERT
操作导致split_rtree_node()
. 该mbr_join_square
函数无法检查无穷大和 NaN(不是数字)值。(缺陷 #19533996,缺陷 #73776)InnoDB: 启用更改缓冲后,不应缓冲的缓冲操作序列导致 无法清除记录错误。(缺陷 #19528825,缺陷 #73767)
-
InnoDB: 校验和值为零的页面被错误地视为空页面。只有当校验和值和 LSN 字段值为零时,页面才应被认为是空的。(缺陷 #19500258,缺陷 #73689)
参考资料:此问题是 Bug #17335427 的回归。
InnoDB:
ib_logf()
已删除用于编写日志消息 的 C 风格函数,ib::info
、ib::warn
、ib::error
和ib::fatal
)。(漏洞 #19495721)InnoDB: 当操作更改列名的大小写
InnoDB
数据字典未更新ALTER TABLE ... CHANGE COLUMN
(漏洞#19465984)InnoDB:
InnoDB
为缺少的表空间文件返回一个表未找到错误。(漏洞 #19419026)InnoDB:
InnoDB
由于处于等待状态的用户线程,关闭停止。(漏洞#19386426)InnoDB: 升级到MySQL 5.7后,
ALTER TABLE
对MySQL 5.6中创建的包含GIS数据的表进行操作会导致严重错误。(漏洞#19368904)InnoDB: 在线操作后 MySQL 5.7.5 中引入的批量插入增强功能引入
ALTER TABLE ... ADD INDEX
的回归,导致崩溃恢复失败CREATE INDEX
(错误#19316315,错误#19308426)InnoDB: 在非 Windows 平台上,
os-file_pread
函数os_file_pwrite
在发生错误时返回 -1。该值作为读取或写入的字节数打印在错误消息中。现在不再打印错误消息中的 -1 值,而是打印一条单独的错误消息,指示系统调用失败。感谢 David Bennett 提供的补丁。(缺陷 #19315210,缺陷 #73365)InnoDB: 内存访问冲突导致 mysqld
fts_optimize_thread
终止 。(漏洞 #19314480)InnoDB: 从函数调用以对临时表执行操作的过程导致服务器停止。(漏洞 #19306524)
InnoDB: 尝试在启动服务器后关闭服务器
innodb_force_recovery=6
导致挂起。(缺陷 #19265668,缺陷 #73341)InnoDB: and
fil_inc_pending_ops()
函数fil_decr_pending_ops()
已被fil_space_acquire()
andfil_space_release()
。此更改删除了空间 ID 查找。新功能在 、 和 中实现buf_load()
,fsp_get_available_space_in_free_extents()
这lock_rec_block_validate()
是一个调试功能。此错误的补丁也已删除fil_tablespace_is_being_deleted()
,这是一个孤立的功能。(漏洞 #19149177)InnoDB: 如果日志序列号(LSN)没有增加,
log_write_up_to()
函数不应该启动重做日志写入。(缺陷 #19068569,缺陷 #73109)InnoDB: 在具有 ext3 文件系统的 Linux 系统上运行 MySQL 服务器时,
CREATE TABLE
操作失败并出现表已满错误。innodb_flush_method=O_DIRECT
该错误是由于posix_fallocate()
时发生的内部故障引起O_DIRECT
的。为了允许文件操作继续进行,内部posix_fallocate()
故障现在将错误消息打印到错误日志中。(漏洞 #18903979)-
InnoDB: 作为
InnoDB
INSERT
代码路径清理的一部分,断言代码被添加到ha_innobase::end_stmt()
DDL 开头的其他地方。调试代码已添加到row_log_table_apply()
. 为优化的临时表相关函数添加了断言代码,并删除了未使用的参数。(缺陷号 18894337)参考:这个问题是 Bug #11758237 的回归。
InnoDB: 全文搜索操作导致分段错误。(漏洞#18778259)
InnoDB: MySQL 5.7.5 中引入的与崩溃恢复期间的表空间发现相关的增强功能导致性能下降。(漏洞 #18645050)
InnoDB: 如果数据库在 MySQL 服务器上使用大写字母命名
lower_case_table_names=2
(在 OS X 上是默认设置), 内部系统表 (InnoDB
中指定的方式存储数据库名称,但在磁盘上以小写形式存储名称。在崩溃恢复期间,大小写不匹配导致将表空间 文件标记为丢失的冲突。此错误的补丁在崩溃恢复时将数据库名称转换为小写。(错误#18412598,错误#72043)InnoDB
SYS_TABLES
.ibd
-
InnoDB: 使用搜索短语加通配符运算符的全文查询扩展搜索导致InnoDB:未找到单词...查询扩展搜索错误。此补丁还解决了与全文索引被 DDL 回滚“不同步”相关的问题。(错误#18229097,错误#19831736)
参考:这个问题是 Bug #17373659 的回归。
InnoDB: 在调试版本中,
InnoDB
锁定监视器在DROP TABLE
操作后断言,并且InnoDB
监视器在buf_page_get_gen
. (错误#18062698、错误#71343、错误#18173184、错误#68116)InnoDB:
CREATE TABLE
启用时失败 的innodb_strict_mode
时成功而没有打印警告innodb_strict_mode
。(漏洞 #17852083)InnoDB:
buf_LRU_free_page()
会调用buf_page_set_sticky(bpage)
,在某些情况下不必要地使删除的页面变粘。(错误#17407091,错误#70228)InnoDB:
innodb_fast_shutdown=0
崩溃恢复引发断言后 缓慢关闭(缓慢关闭没有等待后台回滚操作完成才继续。(漏洞 #16862810)InnoDB: 用于定义小表空间的标准不一致。感谢 Laurynas Biveinis 提供补丁。(错误#16696906,错误#68970)
InnoDB: 为了显式缓存一致性,在头部添加了写屏障,
os_thread_create_func()
在断言代码中添加了读屏障rw_lock_free_func()
。(错误#13364876、错误#62692、错误#18870970、错误#72809)InnoDB:列上 的内存缓存
append
操作INT
导致分段错误。append
不支持对INT
列的操作,现在已被阻止。(缺陷 #75200,缺陷 #20209756)InnoDB: 对于 memcached incr和 decr命令,整数列值处理不正确。(错误#69415、错误#20083106、错误#74874、错误#20044123)
分区: 当在分区中使用多个列时
KEY
,它们的顺序可能有助于确定行所在的分区。通过ALTER TABLE
使用ALGORITHM=INPLACE
可能会导致在分区中放置行时不一致;换句话说,在这样的操作之前插入的行被放置在一个分区中,但之后插入的同一行被放置在不同的分区中。出于这个原因,当该索引也用作分区表的基础时,不再允许在线更改多列索引的顺序KEY
;相反,您必须使用复制ALTER TABLE
来执行更改。(漏洞#17896265)复制: 复制管理语句的锁定行为已更改以
SHOW SLAVE STATUS
提高并发性。这使得该NONBLOCKING
子句变得多余,SHOW SLAVE STATUS
并且它已与Com_show_slave_status_nonblocking
状态变量一起被删除。(缺陷号 20593028)复制: 当
enforce_gtid_consistency
设置WARN
为时,如果遇到事务中的第二个 GTID 一致性冲突语句,则不会发出警告。这是因为根据设计,事务上下文被标记为 GTID 违规,因此在事务提交之前不会发出其他警告。此修复可确保正确地为事务内的所有语句发出警告。(缺陷号 20414559)Replication: 重启一个slave后,第一个relay log丢失了
Previous_gtids
log event。从 MySQL 5.7.6 版本开始,Previous_gtids
每条日志都添加了一个日志事件。此修复可确保将Previous_gtids
日志事件正确添加到第一个中继日志。(缺陷号 20106390)复制: 当清除二进制日志时,第一个左边的二进制日志只包含一个
Previous_gtids
日志事件, 导致 lost_gtids->is_empty()断言。这与 Bug#16741603 的修复有关,现已更正。(缺陷号 20075721)复制: 当使用配置为使用 UTF-16、UTF-32 或 UCS-2 等特殊字符集的从站时,接收方 (I/O) 线程无法连接。该修复确保在这种情况下,如果不支持从站的字符集,则默认使用该
latin1
字符集。(漏洞 #19855907)复制: 如果从服务器上的客户端线程在
FLUSH TABLES WITH READ LOCK
主服务器执行 DML 时执行SHOW SLAVE STATUS
,则在同一个客户端中执行会被阻塞,从而导致死锁。该修复确保读取锁定仅在更新中继日志期间保持,避免了死锁。(漏洞 #19843808)Replication: 使用多通道多源复制,启用多线程slave时,重置slave再执行
RESET SLAVE ALL
,START SLAVE
或者STOP SLAVE
导致crash。这个问题现在已经修复,多线程从属可以在多源复制设置中重新启动。(漏洞#19784641)复制: 该
CHANGE REPLICATION FILTER
语句可用于创建一个空过滤器,例如在清除以前配置的复制过滤器时。REPLICATE_DO_TABLE
在为、REPLICATE_IGNORE_TABLE
、REPLICATE_WILD_DO_TABLE
或 创建空过滤器时,这导致了以前版本的崩溃REPLICATE_WILD_IGNORE_TABLE
。此修复确保可以通过将过滤器设置为空来安全地清除这些复制过滤器。(漏洞#19711674)复制: 当使用
WITH_DEBUG
启用该选项编译的 MySQL 版本时,使用expire_logs_days
清除二进制日志会导致重启导致服务器崩溃。此问题在修复错误 #17283409 后出现。该修复程序确保current_thd
在调用 之前进行检查DEBUG_SYNC()
。(漏洞 #19553099)复制: 使用多线程从属服务器时,从属接收方 (SQL) 线程
ER_MTS_CANT_PARALLEL
在发出LOAD DATA
试图将数据加载到主服务器上的非事务表但失败的语句时停止并出错,例如由于主键冲突。这是由多线程从属应用程序错误处理DELETE_FILE
事件引起的。该修复可确保多线程从站DELETE_FILE
正确处理事件。(漏洞 #19552923)复制: 有时从属 I/O 线程会在当前中继日志中留下部分组,例如当它被杀死或停止时。重新启动后,一个新的中继日志在轮换时创建,并且从主服务器复制一对
ROTATE_EVENT
并FORMAT_DESCRIPTION_EVENT
写入新的中继日志。在使用多线程slave时,在relay log中应用组的剩余部分时遇到了错误1755等问题。此修复确保如果MASTER_AUTO_POSITION
启用,则工作人员回滚部分组,完成其工作,然后应用该组的新的完整副本。如果MASTER_AUTO_POSITION
禁用,工作人员不会回滚部分组。(漏洞 #19545298)复制: 启动日志事件未被从站检查最小大小。(漏洞 #19145698)
复制: 当使用
slave_type_conversions
启用的基于行的复制时,连续有多个二进制日志Rows_log_event
导致崩溃。slave_type_conversions
这是因为过早发布了作为流程一部分生成的临时表 此修复确保临时表不会过早释放,还确保长事务不会导致内存不足错误。(错误#18770469,错误#19704825)复制: 当使用从主服务器手动复制的二进制日志文件时,例如为了避免 I/O 线程读取延迟,多线程从服务器生成错误 1755。因为
Previous_gtids
日志事件是使用主服务器server_id
而不是从服务器的server_id,
先前事件记录没有被正确跳过。此修复确保Previous_gtids
始终跳过日志事件中的事件,无论它们是来自中继日志(在从属设备上生成)还是来自二进制日志(在主设备上生成并作为中继日志手动复制到从属设备)。(漏洞#17812024)复制: 从较早版本的 MySQL 主服务器(例如 4.1 版)复制时,校验和不用于事件。复制到运行较新版本 MySQL(例如 5.6 版)的从属服务器,该版本
slave_sql_verify_checksum
默认启用意味着来自旧主服务器的事件的最后 4 个字节被错误地解释为校验和。现在会生成一个警告,为避免这种情况,请设置slave_sql_verify_checksum=0
为禁用从站上的校验和。(漏洞 #17276183)复制: 在需要恢复通道的情况下使用多源复制和多线程从属服务器时,例如在从属应用线程错误之后,或者在崩溃之后,通道没有被正确恢复。这意味着没有尝试修复已停止会话留下的事务执行间隙,这导致重复应用某些事务。该修复可确保在这种情况下,将正确的通道传递给多线程从属恢复。(错误#74906,错误#20046222)
复制: 可忽略的日志事件在 MySQL 5.6 中引入,但被发现无法正常运行。现在已经修复了。(错误#74683,错误#19949915)
复制: 当 XA 事务处于活动状态时,执行内部回滚(例如使用
BINLOG
语句)会导致断言。该修复程序确保当事务跨越多个二进制日志文件时,仅对从服务器发生回滚。BINLOG
如果 Format_description 来自MySQL 客户端中正在执行的语句,现在不会发生回滚(错误#74597,错误#19928622)复制: 组中提交的事务的 GTID 未按
gtid_executed
顺序添加,这有时会导致gtid_executed
. 当出现这些间隙时,服务器将不得不在 GTID 集中添加和删除间隔,这需要一个互斥锁,这会导致争用并可能降低性能。该修复确保 GTID 以gtid_executed
相同的提交顺序添加到没有间隙。(错误#74328,错误#19982543)复制: 当
gtid_mode=ON
和log-bin=OFF
,提交的事务 GTID 被添加到mysql.gtid_executed
表中。在这样的配置中,提交的事务 GTIDgtid_purged
直到下次服务器重新启动时才被正确添加。该修复程序确保在提交gtid_purged
时添加已提交事务的 GTID。(错误#74279,错误#19781336)-
复制: 在复制拓扑中,其中:
奴隶有
GTID_MODE=ON
和MASTER_AUTO_POSITION=1
自启动以来, master 已经执行过
GTID_MODE=ON
并且没有执行过任何事务
如果从服务器使用该
MASTER_POS_WAIT
函数等到它从主服务器接收到完整的二进制日志,而主服务器还没有执行任何事务,那么该MASTER_POS_WAIT
函数将永远不会完成,或者会超时。这是因为在服务器重启后,master 的二进制日志以一个Previous_gtids
日志事件结束,但是这个事件没有被复制,所以 slave 不知道 master 的二进制日志位置。该修复确保Previous_gtids
日志事件被正确复制,以便从服务器知道主服务器上正确的二进制日志位置,确保MASTER_POS_WAIT
函数可以完成。(错误#73727,错误#19507923) Replication: 重启MySQL并
relay_log_recovery
启用从崩溃中恢复时,如果SQL线程从未启动过,则开始恢复的位置未正确初始化,因为Relay_Master_Log_File
丢失。此修复可确保在这种情况下,从第一个中继日志文件开始,从主服务器搜索每个中继日志以查找轮换事件,该事件指定复制从何处开始。然后使用此轮换事件来设置 SQL 线程Relay_Master_Log_File
,Relay_Log_Pos
恢复将照常进行。(错误#73039,错误#19021091)复制: 当使用 GTID 进行复制并
MASTER_AUTO_POSITION
启用时,如果从服务器请求的 GTID 已被主服务器清除,则主服务器将发送所有可用的 GTID。发生这种情况是因为 master 读取所有可用的二进制日志并搜索包含 GTID 的二进制日志,而该 GTID 不包含在 和 的联合gtid_executed
中gtid_retrieved
。如果找到这样的 GTID,master 将从该位置开始发送信息。在 slave 和 set 的gtid_executed
并gtid_retreived
集不包含 master 的gtid_purged
设置,奴隶会期待已经被主人清除的GTID。此修复可确保在这种情况下,从站的 I/O 线程会因错误“主站已清除包含从站所需的 GTID 的二进制日志”而中止。(错误#73032,错误#19012085)复制: 当使用具有基于 GTID 的复制的多线程从站时,启用
--replicate-same-server-id
会导致从站线程因错误而停止并且无法启动复制。这是由于Previous_gtids
日志事件在此类设置中未被正确过滤并到达工作线程而导致的。此修复可确保Previous_gtids
协调器线程正确处理日志事件。(错误#72988,错误#18967791)复制: 由于 mysqlbinlog为每个事件读取调用 localtime(),而这又调用 stat(/etc/localtime),因此导致了内核互斥锁争用。此修复确保mysqlbinlog使用 localtime_r(),它经过优化以存储只读时区内部结构。这也意味着mysqlbinlog 现在在处理开始时建立时区,您不能在处理过程中更改它。这与 MySQL 服务器的行为相同。(错误#72701,错误#18808072)
复制: 在正常使用中,slave 不可能比 master 拥有更多的 GTID。但在某些情况下,例如硬件故障或错误清除后
gtid_purged
,master 的二进制日志可能会被截断。此修复可确保在这种情况下,主服务器现在检测到从服务器具有不在主服务器上的 GTID 事务。现在在从站上生成一个错误,并且 I/O 线程因错误而停止。master 的转储线程也停止了。这可以防止复制期间的数据不一致。(错误#72635,错误#18789758)复制:
gtid_executed
当使用启用了自动定位的基于 GTID 的复制从站时,当事务的 GTID 不在从站的集合 中时,从站 I/O 线程可能会再次请求最后一次完全接收到的事务 这种情况可能会发生,例如,如果 SQL 线程没有应用事务或RESET MASTER
在从站上发出一条语句来清理它的gtid_executed
集合。该修复程序确保使用自动定位的基于 GTID 的复制从站不会两次请求完全接收的事务,无论从站的gtid_executed
设置如何,它现在只添加一个 GTID 到Retrieved_Gtid_Set
当收到整个交易时。(错误#72392、错误#18629623、错误#17943188)Replication: 当
SHOW SLAVE STATUS
用于监控复制性能时,Seconds_Behind_Master
有时会出现意外滞后于 master。这是由于Previous_gtids
日志事件被写入从服务器的中继日志,时间戳落后于主服务器,然后用于计算Seconds_Behind_Master
. 此修复可确保在从站上生成的事件被添加到中继日志并且在计算时不被使用Seconds_Behind_Master
。(错误#72376,错误#18622657)Microsoft Windows: 在 Windows 上,替换实用程序不起作用。(漏洞 #16581605)
Solaris:
stlport
由于客户端程序依赖于 使用 Sun Studio 构建的 Solaris 二进制分发版现在随该(漏洞#19845068)Solaris: 对于 32 位 Solaris 构建,不当使用可变参数函数参数导致的对齐问题会导致核心转储和不正确的输出。(错误#74395,错误#19821617)
对于调试版本,如果空间索引使用的列也是主索引的一部分,则可以在索引选择期间引发断言。(缺陷号 20451454)
在 Linux 上,尝试安装
.dll
插件(适用于 Windows)会导致内存泄漏。(缺陷号 20439894)在 32 位平台上,
utf8
参数的 字节计数计算RPAD()
可能会溢出并导致服务器退出。(缺陷号 20316028)如果另一个进程关闭服务器, mysqltest 就会发生内存泄漏。(缺陷号 20221262)
mysql_session_track_get_first()
即使在执行有效查询以更改会话状态后,C API 函数也返回 1 而不是 0 。 (缺陷号 20126551)在 Ubuntu 14.10 上,MySQL 安装操作可能无法重新加载 AppArmor。(缺陷号 20092641)
对于调试版本,服务器可能会在处理过程中引发断言,
DELETE
因为无法处理需要成为标量子查询但返回多于 1 行的子查询。(缺陷号 20086791)mysql_list_fields()
并mysql_stmt_prepare()
可能泄漏内存。由于对 EOF 数据包处理的更改,此问题在 MySQL 5.7.5 中引入。(漏洞 #20065461,漏洞 #20065517)某些具有无参数函数的查询,
GROUP BY
,并WITH ROLLUP
导致引发断言。(缺陷号 20034943)名为 的用户可以在没有权限的
event_scheduler
情况下查看事件计划程序进程列表 。PROCESS
(错误#20007583,错误#20754369)使用该选项调用时, mysql客户端可能会过早退出。
--xml
(漏洞#19974879)InnoDB
innodb_checksum_algorithm
如果在操作期间修改了系统变量的值,则表校验和计算可能会产生不正确的结果 。(漏洞#19931177)LIKE
运算符可能会产生不可靠的子句结果,该 子句ESCAPE
包含一个在执行时不变但在此之前未知的表达式。(漏洞#19931126)BINLOG
在语句打开临时表时 执行某些语句HANDLER
可能会导致服务器退出。(错误#19894987,错误#20449914)格式错误的
mysql.proc
表行可能导致与该行DROP DATABASE
关联的数据库 的服务器退出。proc
(漏洞 #19875331)SHOW GRANTS
使用代理用户连接后可以显示代理用户的密码哈希。(漏洞#19817663)对于调试版本,优化器在为派生表创建临时表时可能会产生错误的索引扫描成本,并因此引发断言。(漏洞#19793998)
在锁定和截断临时表后解锁临时表可能会导致服务器退出。(漏洞 #19786309)
IN
谓词可能被错误地标记为半连接展平的候选者,导致在尝试展平时引发断言。(错误#19779600,错误#18932813)较大的
transaction_prealloc_size
系统变量值可能会导致服务器分配过多的内存。最大值已向下调整为 128K。对 进行了类似的更改transaction_alloc_block_size
。如有必要,事务仍然可以分配超过 128K;此更改减少了可以预分配的数量,以及增量分配块的最大大小。(漏洞 #19770858,漏洞 #20730053)RPM 和 DEB 包
sql_mode
错误地设置了默认值(他们没有设置ONLY_FULL_GROUP_BY
,现在包含在默认值中)。(漏洞 #19766800)源 RPM 包缺少对 Boost 库的正确依赖。(漏洞#19714453)
<=>
对于使用运算符比较两行并且这些行属于不同字符集 的查询,可能会发生服务器退出。(错误#19699237,错误#20730155)Enterprise Encryption 插件可能会错误处理字符串参数。(错误#19688008,错误#20730103)
优化器检测到形式的相等表达式的函数依赖性, 但没有检测到形式的 表达式的函数依赖性。现在它也处理后者。(漏洞#19687724)
col_name
=expr
,(
col_name
, ...) = (col_name
, ...)某些
InnoDB
错误导致存储函数和触发条件处理程序被忽略。(错误#19683834,错误#20094067)在某些 32 位平台上, 由于超时而不是等待锁定而立即返回。(漏洞#19674349)
GET_LOCK(
lock_name
, -1)如果包含子查询的 DML 语句在内部造成死锁
InnoDB
,InnoDB
则会回滚事务。这在 SQL 层中不会被注意到,结果继续执行,最终导致在内部引发断言InnoDB
。(漏洞 #19670163)default_authentication_plugin
设置为 后 ,sha256_password
写入二进制日志的密码哈希格式错误。(漏洞#19660998)GROUP BY
或列ORDER BY
上CHAR(0) NOT NULL
可能导致服务器退出。(漏洞 #19660891)在负载下,服务器可能会在尝试填充
OBJECT_TYPE
用于从events_waits_current
Performance Schema 表中选择的列时退出。(漏洞#19658933)ST_AsGeoJson()
给出非法max_dec_digits
或options
参数时可能会失败。(漏洞#19657747)当给定具有默认排序规则以外的排序规则的 geohash 参数时,Geohash 空间函数失败。(漏洞#19657725)
ONLY_FULL_GROUP_BY
如果分组查询是 的一部分,则无法可靠地运行 由 强制执行的检查CREATE VIEW
。MySQL 服务器尝试运行这些检查并可能退出;现在只有实际使用视图的语句才会运行检查。(漏洞#19636980)对于调试版本,当分组查询引用视图时,可能会错误地引发断言。(漏洞 #19636409)
对于调试版本:向
POINT NOT NULL
列添加唯一索引会触发警告,并且该键未提升为主键。NULL
在同一个表中的不同非列上创建唯一索引然后引发断言。(错误#19635706,错误#24469860)当会话状态没有变化时,从服务器发送到客户端的 OK 数据包在数据包末尾包含一个不需要的字节。(漏洞 #19625718)
由于使用了已弃用的 函数, mysql_install_db 的调试版本无法在 Solaris 11 U2 上编译。
vfork()
(漏洞 #19603400)可以针对以下任一情况提出断言:1) 将用于标量子查询的半连接转换应用于多行子查询。2)
IN
检查左侧是转换为半连接的标量子查询的谓词,看它是否可以使用物化。(漏洞 #19586047)对于调试版本,如果中间或最终结果产生 NaN 或负数,则会
ST_Distance()
导致服务器退出。此函数现在会产生ER_GIS_INVALID_DATA
错误。(漏洞#19584716)-Wpointer-bool-conversion
使用和-Wundefined-bool-conversion
编译器选项调整CMake配置以处理 Clang 3.5 报告的新警告 (漏洞 #19584183)如果在严格 SQL 模式下执行
CREATE TABLE
orALTER TABLE
分区语句并ER_WRONG_TYPE_COLUMN_VALUE_ERROR
发生错误,sql_mode
则 将重置为''
并且错误处理程序堆栈已损坏,从而导致服务器退出。(漏洞 #19584181)尝试在已使用的端口上启动服务器会产生 Valgrind 错误。(漏洞#19566148)
会话状态不包含在查询缓存中保存的查询结果中。(漏洞 #19550875)
非法
CREATE TABLE
语句可能无法创建表(如预期的那样),但仍会在 Performance Schema 中生成表统计信息。(漏洞 #19535945)设置
session_track_system_variables
为NULL
可能导致最终服务器退出。(漏洞 #19514067)客户端协议跟踪插件没有考虑从 MySQL 5.7.5 中的客户端/服务器协议中删除 EOF 数据包。(漏洞#19512199)
非索引列上相等条件的条件过滤效果的默认值从 0.005 调整为 0.1。原始值导致对低基数列的条件过滤效果估计过高。(漏洞 #19505175)
如果查询使用临时表或将结果存储在表
UNION
中,则第一个查询块返回一POINT
列而第二个查询块返回具有非POINT
值的几何列的语句失败 。(漏洞#19471564)InnoDB
InnoDB
如果在一个索引上使用索引扫描而在另一个索引上使用范围扫描,则可以为使用半连接 LooseScan 评估的查询提出断言。(漏洞 #19465034)
在严格的 SQL 模式下,某些
SELECT
语句在存储过程中和不在存储过程中的执行方式可能不同。(漏洞 #19418619)-
如果
audit_log
插件遇到磁盘已满错误,服务器将退出。现在,如果正在写入审计日志的文件系统已满,则会将“磁盘已满”错误写入错误日志。审计日志记录会一直持续到审计日志缓冲区已满为止。如果在缓冲区填满时可用磁盘空间尚未可用,客户端会话将挂起,并且在客户端会话挂起时停止服务器将导致审计日志损坏。要在客户端会话挂起时避免这种情况,请确保在停止服务器之前审计日志文件系统上有可用空间。(漏洞#19411485)
激活
validate_password
插件并启用字典查找后,将用户定义的变量传递给PASSWORD()
可能会导致服务器退出。(漏洞 #19388163)无法准备使用 Geohash 空间函数的语句。(漏洞 #19383904)
-
不带参数调用时,XPath
number()
函数失败。现在 MySQL 将number()
其视为已为当前上下文节点调用(换句话说,好像number(.)
已被使用),这是 XPath 规范中针对这种情况所要求的行为。(漏洞 #19323016)参考资料:此问题是 Bug #19056196 的回归。
启用查询缓存后,某些以注释序列开头的查询可能会导致无效内存读取错误。(漏洞 #19322795)
某些
GRANT PROXY
语句仅影响内存中的特权,并通过FLUSH PRIVILEGES
服务器重启或服务器重启恢复。(漏洞 #19309652)STR_TO_DATE()
可能错误处理数字输入的转换,导致服务器退出。(错误号 19047644)修复了 Valgrind 解析时越界读取的警告
'0E+'
。(漏洞 #19047527)在某些情况下,
DATE_FORMAT()
可能会为其格式参数和函数结果使用相同的缓冲区,从而导致无效的内存读取。(缺陷号 19047488)将字符串转换为 IPv6 地址可能会引发 Valgrind 警告。(漏洞 #19047425)
对于由于文件描述符不足而无法创建临时表,服务器退出而不是返回错误。(漏洞#18948649)
如果转储目标位于 NFS 安装上,则mysqldump无法报告磁盘已满错误。(漏洞 #18817867)
在某些情况下,代理用户可能会使被代理用户的密码过期。(漏洞 #18815349)
以前,
InnoDB
允许创建引用用户没有足够权限的父表的外键。现在,用户必须拥有REFERENCES
父表的权限才能创建外键。(错误#18790730,错误#11746917)由于优化器未能分配足够的内存来解析外部引用,服务器可能会退出。(错误#18782905,错误#19892803)
如果传递无效参数, 则
mysql_session_track_get_first()
和mysql_session_track_get_next()
C API 函数可能会导致客户端崩溃。(漏洞 #18769620)如果基于相同的聚合函数创建了两个内部临时表,则服务器可能会退出。(漏洞#18766378)
对于某些包含派生表(子句中的子查询
FROM
)的查询,由于行计数估计不太准确,具体化延迟导致执行计划不理想。(漏洞#18607971)对于某些多表
UPDATE
语句,表的连接顺序可能会错误地影响结果。(漏洞 #18449085)ST_Touches()
可能导致某些输入的服务器退出。(漏洞#18304448)InnoDB
在全文索引初始化期间,将包含全文列的表从 Windows 复制到 Linux 会导致 Linux 上的服务器退出。(错误#18285007、错误#19864963、错误#73155)运行的服务器
--default-authentication-plugin=sha256_password
拒绝了需要密码的 MySQL 5.1 客户端的连接尝试。(错误号 18160400)该
validate_password
插件没有正确地对由sha256_password
身份验证插件验证的帐户强制执行密码限制。(缺陷号 18140348)执行带有嵌套
IN
子查询和视图的准备好的语句可能会导致服务器退出。(漏洞 #17973601)使用start service或 mysqld_safe 启动服务器可能会导致无法使用正确的插件目录。(漏洞 #17619241)
FLUSH TABLES
FEDERATED
如果表空闲时间超过wait_timeout
时间加上 TCP keepalive 时间,则在 表上失败。(漏洞#17599258)对于
FEDERATED
表, 语句的IGNORE
处理DELETE IGNORE
被忽略。(漏洞 #17564775)ALTER TABLE
对于调试版本,如果长度为 767 并且正在增加,则在访问操作修改列长度的索引列时 引发断言 。(漏洞#16886196)如果它们在表缓存中,则从中选择所有列
INFORMATION_SCHEMA.TABLES
不会重新打开表,但在相同条件下选择这些列的子集会重新打开表。(漏洞 #16869534)使用 子句 创建
FEDERATED
包含列的表 会导致服务器退出。(漏洞 #12671631)AUTO_INCREMENT
LIKE
对于调试版本,缺少错误检查允许某些
ALTER TABLE
应该无法继续处理的语句。(错误#76515,错误#20788817)对于基于 RPM 的安装操作,没有产生任何信息表明mysql_install_db 将初始
root
密码写入$HOME
/.mysql_secret
. 这些操作现在使用mysqld --initialize,它将密码写入标准错误输出。(缺陷 #75859,缺陷 #20518217)对于某些全文查询,关于索引使用的优化器清理不完整可能会影响对同一表的后续查询。(错误#75688、错误#20442572、错误#20261601)
对于 JSON 格式
EXPLAIN
的输出,该filtered
值显示为无保证的位数精度。该值现在限制为小数点后两位。(错误#75663,错误#20429156)推送连接不适用于
NDB
表。(错误#75256,错误#20234994)对于慢速网络连接,下载 Boost 的超时时间(600 秒)可能太短。现在可以使用新的CMake 选项
DOWNLOAD_BOOST_TIMEOUT
来配置超时。(错误#75238,错误#20223893)对于某些带有 的查询
LIMIT
,EXPLAIN
可能表示执行将使用 完成filesort
,但执行实际上是使用索引读取完成的。(错误#75233,错误#20219846)更正了错误消息和源代码中的几个拼写错误。感谢 Otto Kekäläinen 提供的补丁。(错误#75084,错误#20135835)
一个 bulk
INSERT
后面跟着其他语句LOAD DATA
可能会产生不正确的AUTO_INCREMENT
值。(错误#75068,错误#20126635)当CMake没有找到需要的Boost版本时,报错信息中没有指明需要的版本。现在可以了。(缺陷 #75026,缺陷 #20108908)
启用
log_timestamps
系统变量错误地需要启用二进制日志记录。(缺陷 #75025,缺陷 #20108866)在令牌处理期间,解析器检查包含 7 位数据的令牌是否可以应用于错误的令牌。(错误#74984,错误#20086997)
对于视图下的表的特权错误,应该为访问视图的尝试提供更一般的错误,以免提供有关视图内容的信息。这在严格的 SQL 模式下不会发生。(缺陷 #74868,缺陷 #20032855)
对于在十进制上下文中使用
GET_LOCK()
or 的子查询,RELEASE_LOCK()
服务器可能会创建定义不正确的临时表,从而导致引发断言。(错误#74859,错误#20031761)default_password_lifetime
被标记为volatile
,这是不必要的,因为它受互斥体保护。感谢 Stewart Smith 提供的补丁。(错误#74849,错误#20029439)从中删除了未使用的
grant_option
全局变量mysqld.cc
。感谢 Stewart Smith 提供的补丁。(错误#74847,错误#20029398)InnoDB
布尔全文搜索+
与括号结合使用时处理不当;例如,+word1 +(>word2 <word3)
。(错误#74845,错误#20028323)NULL
作为表达式未被识别为用于计算性能模式语句摘要的文字。(错误#74813,错误#20015246)MySQL 无法在调试模式下使用 GCC 4.9.1 进行编译。(错误#74710,错误#19974500)
优化器成本模型构造函数已分配但未销毁成本常量对象,导致内存泄漏。(错误#74590,错误#19895764)
当内部字符串操作生成
NULL
指针而不是空字符串时,某些查询可能会引发断言。(错误#74500、错误#19875294、错误#13358486、错误#79988、错误#22551116)对于mysql_install_db,该
--no-defaults
选项未传递给 mysqld。(错误#74477,错误#19863782)对于调试版本,服务器可能会由于优化器未能为组引用分配足够的内存而退出。(错误#74447,错误#19855522)
对于 Performance Schema 表,和值
table_io_waits_summary_by_table
存在差一错误 。(错误#74379,错误#19814559)COUNT_FETCH
COUNT_READ
根据内容,几何集合对象未正确销毁,导致内存泄漏。(错误#74371,错误#19813931)
在左侧参数中使用with 值可能会导致断言失败。(错误#74357,错误#19805761)
(
row subquery1
) NOT IN (row subquery2
)NULL
指定的任何索引注释
ALTER TABLE ... ADD INDEX
都被忽略。(错误#74263,错误#19779365)在存储程序中读取具有值的系统变量
NULL
会导致任何后续读取返回一个NULL
值,即使变量值可能会在存储程序的调用中发生变化。(错误#74244,错误#19770958)handler.h
和handler.cc
文件中从未调用或引用的 存储引擎 API 代码和函数 已被删除。(错误#74207,错误#19729286)-DENABLED_PROFILING=0
CMake 选项导致编译错误 。(错误#74166,错误#19730970)随着 MySQL 5.7.5 对数据库
InnoDB
中帮助表的更改, mysql_install_db加载帮助表内容变得更慢。这是由于 语句加载时启用了自动提交。现在所有语句都作为单个事务执行,而不是每个语句一个事务。(错误#74132,错误#19703580)mysql
INSERT
在CentOS 6 上,为选项指定相对路径名
--socket
导致MySQL 启动脚本失败。(错误#74111,错误#19775856)系统
group_concat_max_len
变量可以在运行时设置为其最大值,但不能在选项文件中设置。(错误#74037,错误#19670915)服务器错误地将客户端错误消息写入错误日志:尝试获取锁时发现死锁;尝试重新启动事务。(错误#73988,错误#19656296)
sha256_password
无法将插件 的客户端部分指定为默认客户端插件 (--default-auth=sha256_password
),以便用户使用其他服务器插件进行身份验证。(错误#73981、错误#19651687、错误#17675203)在有大量并发服务器连接的情况下,错误计算 qsort 操作的内存需求可能会导致堆栈溢出错误。(错误#73979、错误#19678930、错误#23224078)
REPEAT()
浪费时间连接空字符串。(错误#73973,错误#19646643)在 MySQL 5.7.5中使用
InnoDB
for 临时表的功能导致某些查询失败:一些涉及多表UPDATE
的查询、涉及长PRIMARY KEY
值的查询和涉及DISTINCT SUM()
. (错误#73927、错误#19627741、错误#73932、错误#19628808、错误#73702、错误#19497209)在 Windows 上,
max_statement_time
将会话变量设置为大于 0 会导致内存泄漏。(错误#73897,错误#19605472)在 Solaris 11.2 中,dtrace -V输出从 更改
Sun D
为Oracle D
,导致在 MySQL 配置期间检测 DTrace 可用性失败。(错误#73826,错误#19586917)DROP DATABASE
.cfg
如果数据库目录包含文件(例如由创建的文件 ),则失败FLUSH TABLES FOR EXPORT
。(缺陷 #73820,缺陷 #19573998)在 32 位系统上, 为无限长度
GLength()
的值返回非 INF 值。LineString
(错误#73811,错误#19566186)mysql_config --libs_r生成包含链接标志的输出
libmysqlclient_r
,即使该库已在 MySQL 5.5 中删除并替换为指向底层libmysqlclient
库的符号链接。现在的输出直接指向libmysqlclient
. (这意味着不再需要为了能够使用mysql_config --libs_r而维护符号链接。)(错误 #73724,错误 #19506315)对于语句摘要计算,性能模式无法将带符号的文字数字识别为可表示的值,
?
并为应该具有相同签名的语句创建了多个摘要。现在,所有一元加号和一元减号后跟数字的实例都减少到?
摘要中。(缺陷 #73504,缺陷 #19389709)使用 Visual Studio 2013 在 Windows 上编译导致 “未解析的外部符号”错误。(错误#73461,错误#19351573)
服务器警告错误消息引用了过时的
table_cache
系统变量而不是table_open_cache
。感谢 Daniël van Eeden 提供修复某些实例的补丁。(错误#73373、错误#19285052、错误#75081、错误#20135780)UNION DISTINCT
子查询具体化或与临时表上的哈希索引一起使用的 某些查询 可能会产生不正确的结果或导致服务器退出。(错误#73368,错误#19297190)如果表有一个
NOT NULL
列,对于INSERT
未指定列值的表上的语句,服务器会生成,ERROR 1048 "Column cannot be null"
而不是Warning 1364 "Field doesn't have a default value"
如果存在BEFORE
操作类型不同于 的触发器ON INSERT
。(错误#73207,错误#19182009)和函数实现包含竞争条件
IS_FREE_LOCK()
,IS_USED_LOCK()
因此当同时检查和释放用户锁时,它们可以访问释放的内存。访问释放的内存可能会导致函数返回值不正确或服务器退出。(错误#73123,错误#19070633)SHOW EVENTS
在performance_schema
数据库中返回拒绝访问错误,而不是像INFORMATION_SCHEMA
. 现在返回一个空结果。(错误#73082,错误#19050141)LOCK TABLES
有时会为隐式锁定的表获取不够强的锁。(错误#72887,错误#18913551)当视图定义包含
ORDER BY
子句但视图是使用WHERE
子句选择时,视图输出的排序顺序可能不正确。(错误#72734、错误#18838002、错误#81235、错误#23207758)服务器不再记录以下警告,因为它们不提供信息:客户端未能提供其字符集。'
charset
' 将用作客户端字符集。(错误#72543,错误#18708334)默认情况下错误地启用了CMake选项。(错误#72106,错误#18448743)
ENABLED_LOCAL_INFILE
服务器可能无法为
SET
列定义恰好有 64 个元素的列解析插入的字符串。(错误#71259,错误#18020499)使用 ODBC 格式的日期文字可能会产生不正确的查询结果。(缺陷 #69233,缺陷 #16812821)
mysql_setpermission未能在它生成的 SQL 语句中正确引用用户名。(漏洞 #66317,漏洞 #14486004)
对于
FEDERATED
表, 语句作为语句发送到远程服务器 ,可能会对事务处理和处理产生副作用 。(错误#42878,错误#11751864)DELETE FROM
tbl_name
TRUNCATE TABLE
tbl_name
AUTO_INCREMENT
如果为内部临时表创建的文件由于某种原因被孤立并且文件名被重新用于以后的查询,则可能会导致问题。(错误#32917,错误#11747548)
STRICT_ALL_TABLES
如果时区表包含格式错误的信息,则mysql_tzinfo_to_sql在 SQL 模式下失败 (缺陷 #20545,缺陷 #11745851)