这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
在悼念
这个版本是为了纪念 MySQL Engineering 家族的两位年轻工程师 Astha 和 Akhila,我们在他们二十出头的时候就失去了他们。这是一个小小的纪念,也是一种认可您对 5.7 版本所做贡献的方式。你会被错过的。
MySQL 现在包含一个
gb18030
支持中国国家标准 GB18030 字符集的字符集。有关 MySQL 字符集支持的更多信息,请参阅 字符集、排序规则、Unicode。
已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。
-
不兼容的变化
笔记在 MySQL 5.7.8 中恢复了此处描述的使
ERROR_FOR_DIVISION_BY_ZERO
、NO_ZERO_DATE
和NO_ZERO_IN_DATE
do nothing when explicitly named and include them in strict mode 的更改(请参阅 MySQL 5.7.8 中的更改(2015-08-03,Release Candidate))。意图仍然是它们与严格模式结合使用,因此如果在未启用严格模式的情况下启用它们,则从 5.7.8 开始会出现警告,反之亦然。、 和 SQL 模式现在已弃用,并且在显式命名时不执行任何操作
ERROR_FOR_DIVISION_BY_ZERO
。 相反,它们的效果包含在严格 SQL 模式(或 )的效果中。换句话说,严格模式现在与以前的严格模式加上 、 和 模式的 含义 相同 。此更改减少了依赖于严格模式的 SQL 模式的数量,并使它们成为严格模式本身的一部分。NO_ZERO_DATE
NO_ZERO_IN_DATE
STRICT_ALL_TABLES
STRICT_TRANS_TABLES
ERROR_FOR_DIVISION_BY_ZERO
NO_ZERO_DATE
NO_ZERO_IN_DATE
为了应对此版本 MySQL 中的 SQL 模式更改,建议在升级之前阅读 MySQL 5.7 中的 SQL 模式更改。该讨论提供了评估您的应用程序是否会受到这些更改影响的指南。
、
ERROR_FOR_DIVISION_BY_ZERO
和 SQL 模式名称仍然可以识别(因此引用它们NO_ZERO_DATE
的NO_ZERO_IN_DATE
语句不会产生错误),但它们将在未来的 MySQL 版本中删除。要为不存在这些模式名称的 MySQL 版本做提前准备,应修改应用程序以不引用它们。 InnoDB:
UNIV_LOG_DEBUG
不再具有完整功能 的(错误号 18080537)InnoDB:在 MySQL 5.6.3 中弃用 的
innodb_use_sys_malloc
和innodb_additional_mem_pool_size
系统变量在 MySQL 5.7.4 中被删除。InnoDB: 表
InnoDB
空间监视器和InnoDB
表监视器在 MySQL 5.7.4 中被删除。可以从INFORMATION_SCHEMA
表中获取表和表空间元数据。stage/sql/Waiting to get readlock
Performance Schema 工具不再使用并已被删除 。(错误#71298,错误#18035404)已弃用的msql2mysql、 mysql_convert_table_format、 mysql_find_rows、 mysql_fix_extensions、 mysql_setpermission和 mysqlaccess实用程序已删除。(错误#27482、错误#69012、错误#69014、错误#69015、错误#69016、错误#69017、错误#11746603、错误#16699248、错误#16699279、错误#16699284、错误#16699317、错误#18179576)
mysqlbug是一个用于生成错误报告的过时脚本,已从源代码中删除。该脚本的标头包含有关如何配置和编译 MySQL 的信息,这对于包含在错误报告中很有用。类似的信息可以在
docs/INFO_BIN
您的 MySQL 安装文件中找到。已弃用的
IGNORE
子句 forALTER TABLE
已被删除,其使用会产生错误。-
元数据锁定子系统现在使用无锁算法来获取和释放典型的 DML 语句锁。这在涉及大量小型只读事务的工作负载中为多核机器提供了更好的性能/可扩展性。
元数据锁定子系统现在也使用无锁散列而不是受互斥锁保护的散列。此更改的含义是
metadata_locks_cache_size
和metadata_locks_hash_instances
系统变量不再有任何影响,因此它们已被弃用,并将在未来的 MySQL 版本中删除。
-
性能架构性能通过以下方式得到改进:
当线程连接时,所有每线程统计信息的重置现在会延迟到实际收集到统计信息为止。这种惰性初始化有利于具有非常短暂会话的工作负载,为此禁用了检测。
当一个线程断开连接时,每个线程的统计信息将聚合到父级,仅用于实际收集数据的统计信息。这种优化有利于具有非常短暂会话的工作负载,为此禁用了检测。
对于语句检测,单个
EVENT_NAME
统计信息的重置现在也被延迟,直到实际收集到统计信息。这有利于所有仅包含 MySQL 支持的非常大的集合语句中的几种语句(SELECT
、INSERT
、UPDATE
、DELETE
等)的工作负载。只有实际执行的事件名称的语句才会在断开连接时聚合。通过删除一些为将来使用而实际上未使用的属性,减少了内部内存缓冲区的内存占用。特别是,互斥锁、rwlock 和条件的统计信息现在需要更少的内存。
Performance Schema 现在检测准备好的语句(用于二进制和文本协议):
表中提供了有关准备好的语句的信息
prepared_statements_instances
。该表可以检查服务器中使用的准备好的语句,并提供有关它们的汇总统计信息。系统变量控制表的
performance_schema_max_prepared_statements_instances
大小。status 变量指示有
Performance_schema_prepared_statements_lost
多少准备好的语句无法检测。
有关详细信息,请参阅 prepared_statements_instances 表。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
performance_schema
数据库中。参考资料:另请参阅:错误 #18324285。
-
不兼容的更改: MySQL 现在允许数据库管理员建立自动密码过期策略:任何使用密码已超过其允许生命周期的帐户连接到服务器的用户都必须更改密码。该实现具有以下组件:
系统
default_password_lifetime
变量定义全局密码过期策略。N
大于零 的值意味着密码的有效期为N
几天。值为 0 将禁用自动密码过期。默认为 360;密码必须大约每年更改一次。-
该
mysql.user
表有新的列,用于存储单个帐户的过期策略信息:password_last_changed
指示上次更改密码的时间。服务器在客户端连接时使用此列来确定密码是否已超过其生命周期并且必须根据有效的过期策略进行更改。password_lifetime
表示帐号密码的生命周期。N
大于零 的值 表示密码的有效期为N
天。0 禁用自动密码过期。NULL
(默认值)表示应用全局过期策略。
该
ALTER USER
声明有新的选项来设置个人帐户的密码过期策略。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将更改合并到
mysql.user
表中。对于每个帐户, mysql_upgrade使用它执行的时间来设置password_last_changed
列并设置password_lifetime
为NULL
。这会导致默认的全局过期策略生效(密码的有效期为 360 天)。有关详细信息,请参阅密码管理和ALTER USER 语句。
-
不兼容的更改:使用mysql_install_db 安装的 MySQL 部署 现在默认是安全的。以下更改已作为默认部署特性实施:
安装过程只创建一个
root
帐户,'root'@'localhost'
自动为该帐户生成一个随机密码,并将密码标记为过期。MySQL 管理员必须root
使用随机密码连接并使用SET PASSWORD
选择新密码。(随机密码在.mysql_secret
运行脚本的有效用户的主目录中的文件中找到。)安装不会创建匿名用户帐户。
安装不创建
test
数据库。
这些更改是通过修改mysql_install_db的默认操作模式实现的,它在 RPM 安装操作期间自动调用。 因此,更改也会影响您手动 调用mysql_install_db的非 RPM 安装方法。
因为mysql_install_db部署现在默认是安全的,所以该
--random-passwords
选项是不必要的,已被删除。它已被--skip-random-passwords
选项取代。您可以使用此选项显式生成 默认情况下不安全 的部署:不会为该
'root'@'localhost'
帐户生成随机密码。创建一个
test
任何用户都可以访问的数据库。
笔记mysql_install_db不再创建匿名用户帐户,即使使用
--skip-random-passwords
.mysql_secure_installation程序现在有一个 选项
--use-default
,它会导致程序以非交互方式执行。它可用于无人值守的安装操作。
-
不兼容的更改: 和
AES_ENCRYPT()
函数AES_DECRYPT()
现在允许控制块加密模式并采用可选的初始化向量参数:新的
block_encryption_mode
系统变量控制基于块的加密算法的模式。它的默认值为aes-128-ecb
,表示使用 128 位密钥长度和 ECB 模式进行加密。-
可选
init_vector
参数为需要它的加密模式提供初始化向量:AES_ENCRYPT(str,key_str[,init_vector]) AES_DECRYPT(crypt_str,key_str[,init_vector])
可以通过调用新
RANDOM_BYTES()
函数生成用于初始化向量的随机字节串。
有关详细信息,请参阅 加密和压缩函数。
这些更改使基于语句的复制使用
AES_ENCRYPT()
或AES_DECRYPT()
不安全的语句无法存储在查询缓存中。使用的查询RANDOM_BYTES()
对于基于语句的复制是不安全的,并且不能存储在查询缓存中。 表现; InnoDB:
InnoDB
现在支持多个页面清理器线程,用于从缓冲池实例中清除脏页。一个新的系统变量,innodb_page_cleaners
用于指定页面清理器线程的数量。默认值1
维护 MySQL 5.7.4 之前的配置,其中只有一个页面清理器线程。此增强功能建立在 MySQL 5.6.2 中完成的工作的基础上,它引入了一个单页清理线程来从InnoDB
主线程卸载缓冲池刷新工作。InnoDB:
InnoDB
现在支持 表和单个 表分区的可传输表空间功能 此增强功能简化了分区表的备份过程,并支持在 MySQL 实例之间复制分区表和单个表分区。有关其他信息,请参阅 导入 InnoDB 表。(错误#18121824、错误#70196、错误#18304194、错误#71784)InnoDB
InnoDB
InnoDB: 用于标识
InnoDB
页面的参数被两个新的类取代,并且fold
值和zip_size
值的计算。这些更改通过减少传递给函数的页面标识符参数的数量来简化代码。(漏洞 #18073495)-
InnoDB: 如果系统表空间文件( “ ibdata 文件”)位于支持原子写入的 Fusion-io 设备上,双写缓冲将自动禁用,并且 Fusion-io 原子写入用于所有数据文件。由于双写缓冲区设置是全局的,因此对于驻留在非 Fusion-io 硬件上的数据文件,双写缓冲区也被禁用。
此功能仅在 Fusion-io 硬件上受支持,并且仅在 Linux 上为 Fusion-io NVMFS 启用。要充分利用此功能, 建议
innodb_flush_method
设置O_DIRECT
为 。(漏洞 #18069105) InnoDB: 优化了反向索引叶页扫描。
btr_pcur_restore_position_func()
现在可以对反向游标执行乐观恢复,这减少block->mutex
了根页面上的争用,特别是对于并发反向扫描。(漏洞#17666170)InnoDB: 一个新的系统变量,
innodb_log_write_ahead_size
允许您将重做日志的预写块大小配置为与操作系统或文件系统缓存块大小匹配的值,以避免 重做日志写入的“ read-on-write ” . 当由于重做日志的预写块大小与操作系统或文件系统缓存块大小不匹配而导致重做日志块未完全缓存到操作系统或文件系统时,会发生写时读。避免写时读提高了重做日志写入的吞吐量稳定性。(漏洞 #17571371)-
InnoDB: 在线 DDL支持扩展到常规表和分区
InnoDB
表的以下操作:-
ALTER TABLE ... ENGINE=INNODB
(在InnoDB
桌子上运行时)在线 DDL支持减少了表重建时间并允许并发 DML。请参阅 InnoDB 和在线 DDL。
(漏洞 #13975225)
InnoDB: 新的全局配置参数,
innodb_status_output
和innodb_status_output_locks
,允许您动态启用和禁用标准InnoDB
Monitor 和InnoDB
Lock Monitor 以进行定期输出。以前,为定期输出启用和禁用这些监视器需要创建和删除特别命名的表(innodb_monitor
和innodb_lock_monitor
)。有关其他信息,请参阅InnoDB 监视器。复制: 二进制日志转储线程已通过删除不必要的发送缓冲区重新分配进行了优化。以前,内存是为每个发送到从属的事件分配然后释放的,即使这不是绝对必要的。在这个优化之后,MySQL 服务器可以通过让转储线程使用自适应内存分配来更好地利用硬件资源,这也可以减少 CPU 使用率。(错误#11747349、错误#31932、错误#11752288、错误#43426、错误#13727951)
-
复制: 现在在很多情况下
CHANGE MASTER TO
无需先发布STOP SLAVE
. 通过对语句的行为进行以下更改来添加此功能CHANGE MASTER TO
,现在仅取决于从属 SQL 线程或从属 I/O 线程是否已停止,如下所述:如果 SQL 线程停止,您可以
CHANGE MASTER TO
使用RELAY_LOG_FILE
、RELAY_LOG_POS
和MASTER_DELAY
选项执行,即使从属 I/O 线程正在运行。当 I/O 线程运行时,此语句不能使用其他选项。如果 I/O 线程停止,您可以
CHANGE MASTER TO
使用此语句的任何选项执行,除了RELAY_LOG_FILE
、RELAY_LOG_POS
或MASTER_DELAY
,即使 SQL 线程正在运行。I/O 线程运行时不能使用这三个选项。SQL 线程和 I/O 线程都必须在发出之前
CHANGE MASTER TO
停止MASTER_AUTO_POSITION = 1
。
如果您正在使用基于语句的复制和临时表,则
CHANGE MASTER TO
语句后面的STOP SLAVE
语句可能会在从属服务器上留下临时表。作为这组改进的一部分,现在只要发生这种情况就会发出警告。在这种情况下,您可以通过确保Slave_open_temp_tables
在执行这些语句之前等于 0 来避免这种情况。有关详细信息,请参阅CHANGE MASTER TO 语句和在故障转移期间切换源。
Replication: 为发送和接收半同步复制确认信号实现了单独的线程,以便事件流和ACK流可以同时发送和接收。这应该会减少许多常见的延迟,从而在许多设置中提高半同步复制的性能。
Solaris: 在 Solaris 上, mysql_config --libs现在包括在内 ,以便可以在运行时找到库。(漏洞 #18235669)
-R
/path/to/library
在 Windows 上,
NOMINMAX
是使用ADD_DEFINITIONS()
CMake 宏而不是 inconfig.h.cmake
设置的,这样即使不包含my_config.h
. (漏洞 #18192896)-
改进了CMake对在 Solaris 上使用gcc编译 MySQL 的支持 Solaris 的二进制发行版现在是使用 gcc而不是 Sun Studio 构建的,以便能够编译 Sun Studio 不处理的代码。除了嵌入式库之外,客户端程序和客户端库仍然使用 Sun Studio 构建。
此更改的结果是在 Solaris 上, mysql_config不再提供用于链接嵌入式库的参数,因为它现在是使用 gcc而不是 Sun Studio 构建的。要获取嵌入式库的链接参数,请改用替代脚本 mysql_server_config。(错误#18146422,错误#17826757)
CHECK_FUNCTION_REPLACEMENT()
CMake宏已从中删除 ,Windows.cmake
替换函数已明确设置,因为检查结果已经硬编码在WindowsCache.cmake
. (漏洞 #18116661)MySQL 现在使用 Clang 3.4 进行编译。(错误号 18047020)
在 MySQL 5.7.1 中,MySQL 测试套件 mysql-test-run.sh程序被修改为启动服务器
InnoDB
而不是MyISAM
默认存储引擎。MySQL 测试套件中的所有测试都被修改为包含一个force_default_myisam.inc
文件。必须这样做,因为大多数遗留测试结果都是用MyISAM
引擎记录的,如果使用InnoDB
. 一个项目正在进行中,以迁移这些测试并删除force_default_myisam.inc
不需要的测试MyISAM
。在 5.7.4 中,迁移了主要套件的rpl
和binlog
套件和部分。(漏洞 #17902011)添加了性能模式检测以捕获事务事件的 GTID。(漏洞#17799147)
性能模式的开销
pfs_lock
在一般情况下减少了原子操作的实现和使用。(漏洞#17766582)如果使用早于 2010 的 Visual Studio 版本, CMake现在会中止 Windows 上的配置过程。(错误号 17730320)
一个新的CMake选项,
WITH_MSAN
允许为支持它的编译器启用 MemorySanitizer。(漏洞 #17632319)-
以前,
ALTER TABLE
在 MySQL 5.6 中可以更改表,以便结果具有 5.5 和 5.6 格式的时间列。现在ALTER TABLE
将旧的时间列升级到 5.6 格式,用于ADD COLUMN
、CHANGE COLUMN
、MODIFY COLUMN
、ADD INDEX
和FORCE
操作。INPLACE
由于必须重建表,因此 无法使用该算法完成此转换,因此ALGORITHM=INPLACE
在这些情况下指定会导致错误。ALGORITHM=COPY
必要时 指定。当
ALTER TABLE
确实产生时间格式转换时,它会生成一条消息,该消息可以用SHOW WARNINGS
: 显示TIME/TIMESTAMP/DATETIME columns of old format have been upgraded to the new format
。(漏洞#17246318) -
该
mysql_version.h
文件定义了两个新的宏,LIBMYSQL_VERSION
和LIBMYSQL_VERSION_ID
,它们指示客户端库版本的字符串和数字形式。在 MySQL Server 发行版中包含的客户端库中,这些宏的值与
MYSQL_SERVER_VERSION
和 相同MYSQL_VERSION_ID
。例如,在 MySQL 5.7.4 中,MYSQL_SERVER_VERSION
andLIBMYSQL_VERSION
是"5.7.4-m14"
,MYSQL_VERSION_ID
andLIBMYSQL_VERSION_ID
是50704
。在 Connector/C 发行版包含的客户端库中,具有 Connector/C 发行
MYSQL_SERVER_VERSION
版MYSQL_VERSION_ID
所基于的 MySQL 版本的值,而LIBMYSQL_VERSION
和LIBMYSQL_VERSION_ID
指示 Connector/C 版本。例如,Connector/C 6.1.3 基于 MySQL 5.7.4,因此MYSQL_SERVER_VERSION
和MYSQL_VERSION_ID
的值为"5.7.4-m14"
和50704
,而LIBMYSQL_VERSION
和LIBMYSQL_VERSION_ID
的值为"6.1.3"
和60103
。
此外,客户端库中的
mysql_get_client_info()
和mysql_get_client_version()
C API 函数现在返回反映提供客户端库的分发类型的值:在 MySQL 发行版中,
mysql_get_client_info()
返回MYSQL_SERVER_VERSION
和mysql_get_client_version()
返回MYSQL_VERSION_ID
。这和以前一样。在 Connector/C 分布中,
mysql_get_client_info()
returnsLIBMYSQL_VERSION
和mysql_get_client_version()
returnsLIBMYSQL_VERSION_ID
。以前,这些函数返回 MySQL 版本,与 MySQL 发行版中的相同。
(漏洞#17171724)
filesort
比较操作 的开销减少了。(漏洞 #14635144)根据社区反馈,
eq_range_index_dive_limit
系统变量的默认值 10 已被证明太低。默认值已提高到 200。(错误 #70586,错误 #17587952)当缺少所需的 Perl 模块时, mysql_install_db会提供更多信息诊断消息。(缺陷 #69844,缺陷 #18187451)
CMake现在支持 指定默认 值的选项。如果未指定,则该值默认为in 。感谢 Honza Horak 提供补丁。(漏洞 #68338,漏洞 #16316074)
-DTMPDIR=
dir_name
tmpdir
P_tmpdir
<stdio.h>
-
MySQL 现在支持执行
SELECT
语句的服务器端超时:-
SELECT
支持MAX_STATEMENT_TIME
为单个查询指定超时的选项。例如:SELECT MAX_STATEMENT_TIME = 5000 id, name FROM my_table WHERE ...
如果执行超过超时值,服务器将终止该语句。
系统变量指定在会话中执行的不包含选项的语句 的
max_statement_time
超时值 。如果该值为 0,则不启用超时。SELECT
MAX_STATEMENT_TIME
、
Max_statement_time_exceeded
和 status 变量提供有关 受超时影响的语句的Max_statement_time_set
信息 。Max_statement_time_set_failed
SELECT
超时值以毫秒为单位。
感谢 Davi Arnaut 提供此功能所基于的补丁。(漏洞 #68252,漏洞 #16271666)
-
减少了为 DML 语句获取元数据锁的开销。(错误#58627,错误#11765641)
NULL
如果参数小于或等于 0.0E0,则 对数函数返回。他们现在还报告警告“对数的参数无效”。(错误#50507,错误#11758319)使用 Valgrind 检测的代码没有预先分配内存
alloc_root()
,以帮助查找错误。如果使用 ASAN(地址清理器),现在也会启用此行为。(错误#44582,错误#11753184)-
服务器现在可以通知客户端客户端会话状态发生的更改。可以报告客户端会话状态的这些属性的变化:
默认架构(数据库)。
系统变量的会话特定值。
用户定义的变量。
临时表。
准备好的陈述。
更改通知发生在 MySQL 客户端/服务器协议中,它现在在 OK 数据包中包含跟踪器信息,以便可以检测到会话状态更改。跟踪器机制的一个用途是为 MySQL 连接器和客户端应用程序提供一种方法,以确定是否有任何会话上下文可用于允许会话从一个服务器迁移到另一个服务器。(要在负载平衡的环境中更改会话,在决定是否可以进行切换时,有必要检测是否存在要考虑的会话状态。)
以下组件组成了用户界面,用于控制跟踪器并从中检索状态更改信息,从而在客户端实现状态更改跟踪:
当任何可跟踪的会话状态相关值发生变化时,客户端可以请求通知。要控制通知,启用或禁用
session_track_state_change
系统变量。默认情况下禁用此变量。-
客户端可以请求通知某些特定类型的会话状态信息的更改值:
默认架构名称。要控制名称通知,请启用或禁用
session_track_schema
系统变量。默认情况下启用此变量。系统变量的会话值。系统变量命名的
session_track_system_variables
系统变量发生通知。通知由每个已更改变量的名称和新值组成。默认情况下,为time_zone
、autocommit
、character_set_client
、character_set_results
和 启用通知character_set_connection
。(后三个变量是受 影响的变量SET NAMES
。)
-
为了使客户端应用程序能够从服务器返回的 OK 数据包中提取状态更改信息,MySQL C API 提供了一对函数:
mysql_session_track_get_first()
获取从服务器接收到的状态更改信息的第一部分。mysql_session_track_get_next()
获取从服务器接收到的任何剩余状态更改信息。成功调用 后mysql_session_track_get_first()
,重复调用此函数,直到它返回成功。从 C API 中,可以通过将
SESSION_TRACK_STATE_CHANGE
、SESSION_TRACK_SCHEMA
或SESSION_TRACK_SYSTEM_VARIABLES
作为type
参数传递给mysql_session_track_get_first()
和mysql_session_track_get_next()
函数来获取状态更改信息。有关详细信息,请参阅 客户端会话状态的服务器跟踪。因为有新的API功能,客户端库ABI版本增加到18.3。共享库名称现在在适当的地方包括 18.3。
mysqltest程序具有 启用和 禁用会话状态更改信息跟踪的命令。请参阅 MySQL Server Doxygen 文档,网址为 https://mysql.net.cn/doc/index-other.html。
enable_session_track_info
disable_session_track_info
有关详细信息,请参阅 客户端会话状态的服务器跟踪。
-
不兼容的更改:
--default-authentication-plugin=sha256_password
如果服务器以该 选项 启动,则旧客户端(早于 MySQL 5.5.7)无法正确解析身份验证数据笔记由于此错误修复,MySQL 5.6.16 客户端无法使用通过
sha256_password
插件进行身份验证的帐户连接到 5.6.17 服务器,5.6.17 客户端也无法连接到 5.6.16 服务器。同样,MySQL 5.7.3 客户端无法使用通过sha256_password
插件进行身份验证的帐户连接到 5.7.4 服务器。(漏洞 #17495562)
重要变更;创新数据库;分区:分区表现 在
FLUSH TABLES
语句的FOR EXPORT
选项InnoDB
。(漏洞 #16943907)创新数据库;复制: 尝试在
innodb_force_recovery
大于0
会返回一条神秘的错误消息: ERROR(1030) HY000: Got error -1 from storage engine。错误消息已更改为: ERROR HY000: Operation not allowed when innodb_force_recovery > 0。复制选项,例如relay_log_info_repository=TABLE
和master_info_repository=TABLE
将信息存储在InnoDB
. 当innodb_force_recovery
大于 0 时,无法更新复制表,这可能会导致复制管理命令失败。(错误#17287443,错误#69907)创新数据库;复制:在具有多个唯一索引的表上运行 的
INSERT ...ON DUPLICATE KEY UPDATE
语句有时会导致事件被错误地写入二进制日志。(缺陷 #11758237,缺陷 #50413)创新数据库;复制: 使用设置为 1 的插件(请参阅 InnoDB memcached 插件) 会导致服务器泄漏内存。(错误#70757,错误#17675622)
InnoDB
memcached
innodb_api_enable_binlog
创新数据库;Microsoft Windows:
TRUNCATE TABLE
在 Windows 上会报告多个“chsize”返回的操作系统错误 71错误。(缺陷 #18176071,缺陷 #71173)创新数据库;Microsoft Windows: 在 Windows 上,5.7.3 中引入的回归将允许在同步操作期间写入日志,由于某些 Windows 环境中的问题,这不应该被允许。(漏洞 #17824101)
创新数据库;Solaris:某些 Solaris 版本中的加载程序会拒绝启动使用汇编程序指令 的 GCC 编译的二进制文件(例如
mysqld
二进制文件)PAUSE
(漏洞#18122171)InnoDB: 在期间
!sync_check_iterate(check)
发生断言。(漏洞#18253210)fts_create_doc_id()
INSERT
InnoDB:
trx_undo_truncate_start
将写入临时撤消日志段的重做日志,从而导致清除线程断言。(漏洞 #18252937)InnoDB: 未使用的参数和变量以及禁用的功能已从重做日志代码中删除。此补丁还包括重做日志代码改进,包括测试启用、添加 Valgrind 工具和次要代码重构。(漏洞 #18251675)
InnoDB:
xid_t
多次定义 用户定义类型(漏洞#18251254)InnoDB: 双写缓冲区错误消息以不一致的方式引用页码。(漏洞#18242594)
InnoDB:
InnoDB
将为临时表空间执行不必要的重做日志写入和刷新。(漏洞#18236692)InnoDB: 和
truncate_t::drop_indexes
方法truncate_t::create_indexes
将在修改系统表空间时禁用重做日志记录。(漏洞 #18236000)InnoDB: 对于全文查询,检查失败
num_token
会max_proximity_item
导致断言。(漏洞 #18233051)InnoDB: 无效
memmove
的 infts_query_fetch_document
会导致严重错误。(漏洞 #18229433)InnoDB:
InnoDB
会为临时表空间上的某些操作写入重做日志。(漏洞#18226934)InnoDB:
log_mutex_exit
应该在log_buffer_extend
持有日志缓冲区互斥量之前调用。(漏洞 #18202904)InnoDB: GCC 4.4 编译器会发出关于
InnoDB
解析函数的虚假警告,表明输出未初始化。(漏洞 #18192536)InnoDB: 为了简化代码和减少内存使用,
InnoDB
文件级操作的重做日志扫描记录,以前存储在哈希表中,现在立即处理。(漏洞 #18180875)InnoDB:
innodb_ft_result_cache_limit
现在硬编码最大值为 4294967295 字节或 (2**32 -1)。最大值先前定义为 的最大值ulong
。(漏洞 #18180057,漏洞 #71554)InnoDB :
UPDATE
导致lock_rec_other_trx_holds_expl
. 事务列表 (trx_sys->rw_trx_list
) 在未获取事务子系统互斥量 (trx_sys->mutex
) 的情况下被遍历。(漏洞 #18161853)InnoDB:
InnoDB
无法从双写缓冲区恢复损坏的系统表空间数据文件的第一页,导致启动失败。(错误#18144349,错误#18058884)InnoDB:
--innodb-temp-data-file-path
由于文件大小分配逻辑错误, 临时表空间文件大小与指定的文件大小不匹配 (漏洞 #18141070)-
InnoDB: 错误 #14329288 引入的回归会在压缩表不适合内存时导致性能下降。(错误#18124788,错误#71436)
参考:这个问题是 Bug #14329288 的回归。
InnoDB: 现在的最大值
innodb_thread_sleep_delay
是 1000000 微秒。先前的最大值(32 位上为 4294967295 微秒,64 位上为 18446744073709551615 微秒)过大。因为 的最大值innodb_thread_sleep_delay
受为 设置的值限制innodb_adaptive_max_sleep_delay
(当设置为非零值时),innodb_thread_sleep_delay
现在的最大值与 的最大值相同innodb_adaptive_max_sleep_delay
。(漏洞 #18117322)InnoDB: 该
fil_node_create
函数将执行不必要的哈希表查找。(漏洞#18116588)InnoDB:
INFORMATION_SCHEMA.INNODB_TRX
包含与其他地方打印的交易 ID 值不匹配的虚假交易 ID。用于检索交易 ID 的方法不一致。(漏洞#18111007)InnoDB: 启动服务器时,处理双写缓冲区时会打印 不必要的“检查空间”日志消息。(漏洞 #18101380)
InnoDB:在模式下构建时返回 编译器错误(无法找到字符串文字运算符)。
c++11
(漏洞 #18082139)InnoDB: 如果临时表上的聚集索引损坏,服务器将崩溃
INSERT
而不是返回错误。如果普通表上的聚集索引损坏,则不会返回错误并且INSERT
会成功。(漏洞#18064548)InnoDB:
InnoDB
为 使用的表 指定备用目录datadir
,然后将.ibd 文件移动到默认的 MySQLdata
目录将导致在尝试DROP TABLE
操作时出现严重错误。(漏洞 #18063570)InnoDB:在memcached插件仍在初始化 尝试卸载
InnoDB
memcached插件 会杀死memcached守护进程线程。卸载应该等到初始化完成。(漏洞 #18038948)InnoDB
InnoDB
InnoDB: 全文分词器线程会以不正确的错误消息终止。(漏洞 #18021306)
InnoDB: 在调试版本中,在二进制列上创建唯一索引,输入数据包含重复键,将导致断言。(漏洞 #18010711)
InnoDB: 由于 和清除协调器线程之间的竞争条件,函数
srv_monitor_thread
会崩溃 (缺陷 #17980590,缺陷 #70430)lock_print_info_summary()
srv_monitor_thread
InnoDB: 布尔模式的全文搜索查询会在解析期间导致内存访问冲突。(漏洞 #17978763)
InnoDB: 日志功能的使用不一致。错误修复将出现的and 替换。此外,由于每条消息都会发出一个时间戳,因此该错误修复消除了不必要的. (错误#17935793,错误#17534737)
fprintf(stderr,
message
)fputs()
ib_logf()
ib_logf()
ut_print_timestamp()
InnoDB: 由于解析器错误,包含子表达式的全文搜索查询可能会返回错误的结果。(错误号 17840768)
InnoDB: innochecksum工具没有使用特定于 Windows 的 API 来检索文件大小信息,这导致在超过 MySQL 5.6 innochecksum 2GB 文件大小限制时出现不正确的错误消息(错误: 找不到ibdata1) 。innochecksum现在支持 MySQL 5.6 和 MySQL 5.7 中大于 2GB 的文件。(漏洞 #17810862,漏洞 #70936)
InnoDB: 由于 Bug#17371537 的修复引入了回归,当使用默认的 memcached 引擎作为数据的后备存储而不是
InnoDB
. (漏洞 #17800829)InnoDB: 撤消日志的页面分配因“表已满”错误消息而不是“撤消日志已满”错误消息而失败。(漏洞 #17779822)
InnoDB: 如果在临时表处于活动状态时发生崩溃, 内部数据字典
InnoDB
中不存在临时表InnoDB
(漏洞 #17779729)InnoDB:
ut_free
可以连续调用多次。(漏洞#17763472)InnoDB: 索引树修改可能导致死锁。(漏洞#17754767)
InnoDB: 中的竞争条件
DebugPolicy::enter()
会导致sync_array_cell_print
. (漏洞#17713784)InnoDB: 在使用丢弃表空间后操作表
ALTER TABLE ... DISCARD TABLESPACE
可能会导致严重错误。(漏洞 #17700280)InnoDB: 持久优化器统计信息会由于闩锁争用而导致停顿。(缺陷 #17699331,缺陷 #70768)
InnoDB: 在禁用外键检查时尝试添加无效外键 (
foreign_key_checks=0
) 会导致严重错误。(漏洞#17666774)InnoDB: 对于调试版本,在线的表重建变体
ALTER TABLE
在具有 BLOB 列的表上运行时,会导致row_log_table_apply_update
函数中的断言。对于正常构建,DB_PRODUCTION
将返回错误。(漏洞 #17661919)InnoDB:由于“未结束”令牌 发生
InnoDB
全文搜索失败应传递字符串和字符串长度以进行字符串比较。(漏洞 #17659310)InnoDB: 在具有全文搜索索引的表上
MATCH() AGAINST()
,使用长字符串作为参数的查询AGAINST()
可能会导致错误InnoDB
(漏洞 #17640261)-
InnoDB: 以数字或特殊字符开头的数据库名称会导致全文搜索 (FTS) 解析器错误。(漏洞 #17607687)
参考资料:另请参阅:错误 #17607956。
-
InnoDB: 在某些情况下,错误 #11758237 的修复引入的回归会在
INSERT ... ON DUPLICATE KEY UPDATE
或REPLACE
语句遇到DB_DUPLICATE_KEY
错误。(漏洞 #17604730)参考:这个问题是 Bug #11758237 的回归。
InnoDB: 在调试版本中,页面读取期间的合并插入缓冲区会导致内存访问冲突。(漏洞#17561188)
-
InnoDB: Bug #16852278 的补丁简化和优化了 中的比较函数
InnoDB
,导致查询性能下降。(漏洞 #17543588)参考资料:另请参阅:Bug #16852278。
InnoDB: 在
sync0rw.ic
,rw_lock_x_lock_func_nowait
会不必要地调用os_thread_get_curr_id
. (缺陷 #17509710,缺陷 #70417)InnoDB:在memcached执行 DML 操作时 截断memcached
InnoDB
表 会导致严重错误。(漏洞 #17468031)InnoDB:
RENAME TABLE
如果在ALTER TABLE
,RENAME TABLE
序列 之后立即发生崩溃,服务器可能无法重新启动(漏洞 #17463290)InnoDB: 如果在文件中更新表空间数据文件路径
.isl
,然后执行崩溃恢复,则从.isl
文件中读取更新的表空间数据文件路径,但SYS_DATAFILES
表不会不更新。崩溃恢复后,该SYS_DATAFILES
表现在已更新为新的数据文件路径。(漏洞 #17448389)InnoDB: 尝试将表重命名为丢失的数据库会导致严重错误。(漏洞 #17447500)
InnoDB: 如果 file-per-table 表空间数据文件的第一页(第 0 页)已损坏,即使双写缓冲区包含该页的干净副本,恢复也会停止。(错误#17335427、错误#70087、错误#17341780)
InnoDB: memcached
InnoDB
自述 文件 (README-innodb_memcached
) 错误地指出 libevent 1.6.0 静态链接到守护进程memcached。libevent 的捆绑版本是 1.4.12,而不是 1.6.0。(错误#17324419,错误#70034)InnoDB: 创建表时,表上至少有三个单独的插入
mysql.innodb_index_stats
。为了提高CREATE TABLE
性能,现在COMMIT
每个插入只有一个操作,而不是一个操作。(错误#17323202,错误#70063)InnoDB:由于 与
lock_rec_has_to_wait_in_queue(lock)
锁定相关的问题和事务被过早地从trx_sys->rw_trx_set
. (漏洞 #17320977)InnoDB: 算法未能减少自动增量值。(错误#17250787,错误#69882)
ALTER TABLE
INPLACE
InnoDB: 评论中
btr0cur.cc
错误地指出btr_cur_pessimistic_update()
并且btr_cur_optimistic_update()
会接受 NULL 值。(错误#17231743,错误#69847)InnoDB:
dict_table_schema_check
会dtype_sql_name
不必要地调用。(漏洞 #17193801,漏洞 #69802)InnoDB:
fil_check_first_page()
未能检查是否fsp_flags_get_zip_size()
返回有效值,这导致启动 mysqld时出现分段错误。(漏洞 #17033182)InnoDB: 该函数
os_file_get_status
不适用于原始设备。(错误#17023438,错误#69424)InnoDB: 中的
lock_rec_other_has_expl_req
函数lock0lock.cc
会执行不必要的工作。(漏洞 #17016214,漏洞 #69576)InnoDB: Valgrind 在运行回滚调试测试时会报告未初始化的值。Valgrind 警告应该只出现在 Valgrind 检测构建中。(漏洞#16969876)
InnoDB: 在崩溃恢复期间,不正确的事务活动时间将导致回滚未提交的事务。(错误#16936961,错误#69438)
InnoDB:用于记录诊断的 堆块调试信息 (
file_name
,lineno
此信息应仅出现在调试版本中。(漏洞 #16924719,漏洞 #69422)InnoDB: 在线
ALTER TABLE
操作会消耗比预期更多的内存。在联机ALTER TABLE
操作期间,为创建或重建的每个索引创建一个包含头缓冲区和尾缓冲区的联机日志缓冲区。ALTER TABLE
尾缓冲区是写入器上下文,仅当操作正在进行时才需要对索引进行并发写入操作头缓冲区是读取器上下文,仅在日志应用阶段需要。为了减少内存消耗,现在在索引上运行第一个 DML 语句时分配尾缓冲区,而头缓冲区仅在日志应用阶段分配并在之后释放。(错误#16868967、错误#69325、错误#17911720)InnoDB: 在同一操作中重命名列同时添加或删除列
ALTER TABLE
会导致错误。(漏洞 #16864981)InnoDB: 类型名称 (
srv_shutdown_state
) 与变量名称相同。类型名称已srv_shutdown_state
更改为srv_shutdown_t
. (漏洞 #16735398)InnoDB: 该
buf_buddy_relocate
函数将执行不必要的散列查找。(漏洞 #16596057)-
InnoDB: 在 Windows 上,全文搜索 (FTS) 对象 ID 不是预期的十六进制格式。(漏洞 #16559254)
参考资料:另请参阅:Bug #16559119。
InnoDB: 服务器关闭将导致挂起,并将以下消息写入错误日志: “
[NOTE] InnoDB: Waiting for purge thread to be suspended
。” (漏洞 #16495065)InnoDB: 当通过附加 到大小值
InnoDB
无法启动 (漏洞 #16287752)innodb_data_file_path
K
-
InnoDB: 从缓冲池中获取和释放页面以及跟踪页面状态是昂贵且复杂的操作。在错误修复之前,这些操作是使用页面互斥执行的。使用页互斥锁来跟踪几件事情是昂贵的并且不能很好地扩展。错误修复将页面的获取和释放跟踪(使用中状态)与页面 I/O 状态跟踪分开。现在在可用的情况下使用原子来跟踪获取和发布。
为了可移植性,一个新的CMake构建选项
INNODB_PAGE_ATOMIC_REF_COUNT
(默认ON
)可用于在原子支持不可用的平台上禁用原子页面引用计数。当启用原子页面引用计数时(默认),“[Note] InnoDB: Using atomics to ref count buffer pool pages
”会在服务器启动时打印到错误日志中。如果禁用原子页面引用计数,则打印“[Note] InnoDB: Using mutexes to ref count buffer pool pages
” 。(缺陷 #16249481,缺陷 #68079) -
InnoDB: 由于对外部存储的 BLOB 的所有权信息处理不当,插入缓冲区合并会导致断言错误。
InnoDB: Assertion failure in thread thread_num in file ibuf0ibuf.cc line 4080 InnoDB: Failing assertion: rec_get_deleted_flag(rec, page_is_comp(page))
(漏洞 #14668683)
InnoDB: 减小该
auto_increment_increment
值不会影响下一个自增值。(缺陷 #14049391,缺陷 #65225)InnoDB: 表重命名错误将出现在输出
LATEST FOREIGN KEY ERROR
部分SHOW ENGINE INNODB STATUS
(缺陷 #12762390,缺陷 #61746)InnoDB: B 树的页面锁定算法会锁定兄弟叶页面,从而延长字典锁。错误修复实现了兄弟叶页的预取,以减少索引锁持有时间。(缺陷 #12734249,缺陷 #61736)
InnoDB:
BUF_READ_AHEAD_AREA
会频繁调用ut_2_power_up
具有高 I/O 率的工作负载。计算现在执行一次,结果存储在buf_pool_t
结构中。(错误#11762242,错误#54814)InnoDB:
UNIV_SYNC_DEBUG
在 Bug#16720368 的修复中被禁用univ.i
,现在已启用。(缺陷 #69617,缺陷 #17033591)-
分区: 使用
index_merge
优化的查询(请参阅索引合并优化)在针对按 分区的表运行时可能返回无效结果HASH
。(错误#17588348,错误#70588)参考资料:另请参阅:Bug #16862316、Bug #17648468、Bug #18167648。
分区:当自上次HA_ERR_KEY_NOT_FOUND错误 以来没有分区返回行时 ,在用于按排序顺序返回行的优先级队列中使用未初始化的内存可能会导致服务器崩溃。(漏洞 #17401628)
复制: 当使用 运行服务器时
--gtid-mode=ON
,STOP SLAVE
随后START SLAVE
导致由 提供的信息INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO
与Slave_open_temp_tables
状态变量不匹配:该INNODB_TEMP_TABLE_INFO
表显示不存在临时表,但Slave_open_temp_tables
具有非零值。(漏洞#18236612)复制: 尝试同时使用半同步复制和 SSH 连接导致服务器失败。(漏洞 #18219471)
复制: 当
MASTER_HEARTBEAT_PERIOD
不包含在 中CHANGE MASTER TO
时,语句重置Slave_heartbeat_period
为默认值和Slave_received_heartbeats
0。现在心跳周期不会更改,CHANGE MASTER TO
除非使用 明确设置MASTER_HEARTBEAT_PERIOD
。此外,该语句不再重置Slave_received_heartbeats
。(漏洞 #18185490)Replication:
MASTER_SSL_CRLPATH
使用CHANGE MASTER TO
语句 设置后 Performance Schema表SSL_CRL_PATH
列中replication_connection_configuration
(漏洞 #18174719)Replication: 和
MASTER_SSL_CRL
选项MASTER_SSL_CRLPATH
在使用yaSSL时不可用;MySQL 复制现在将这些设置为NULL
在启用 yaSSL 时自动设置。(漏洞 #18165937)复制: mysqlbinlog
--rewrite-db
在使用该选项时没有释放其事件缓冲区使用的内存 (漏洞#18164998)复制: 设置
slave_parallel_workers
为 1 或更大并启动从属导致从 SQL 线程使用但不释放内存,直到从STOP SLAVE
和START SLAVE
。(错误#18001777,错误#71197)复制: 当从服务器配置了复制过滤器和
--log-warnings=2
时,每个被过滤的语句都会导致在错误日志中写入一个条目。对于生成许多要过滤的语句的繁忙服务器,结果是错误日志的大小可能会迅速增长到数 GB。现在对此类错误使用节流阀,以便在给定的时间间隔内仅打印一次错误消息,说明此特定错误在该时间间隔内发生了特定次数。(漏洞 #17986385)复制: 当二进制日志 I/O 缓存恰好增长到 32768 字节并且当前事务之前有一个大小大于 32768 字节的事务时,事件在写入二进制日志时可能会损坏。(漏洞#17842137)
-
Replication: 当master和slave初始都
gtid_mode=ON
设置好了,slave的SQL线程停止了,而relay log中还有GTID事务,如果slave随后重启gtid_mode=OFF
,那么slave的SQL线程执行它遇到的任何匿名事务,而没有将其 GTID 写入二进制日志,结果 GTID 丢失。这可能会在 slave 之后被提升为 master 时引起问题,因为事务将再次在提升后的 master 的 slave 上进行,从而迅速导致这些 slave 上的不一致。(漏洞#17827018)参考资料:另请参阅:错误 #17813449。
-
Replication: 当master和slave初始都
gtid_mode=OFF
设置好了,slave的SQL线程停止了,而relay log中还残留着匿名事务,如果slave重新启动gtid_mode=ON
,那么slave会为这样的事务分配GTID。这可能会在 slave 之后被提升为 master 时引起问题,因为事务将再次在提升后的 master 的 slave 上进行,从而迅速导致这些 slave 上的不一致。(漏洞 #17813449)参考资料:另请参阅:错误 #17827018。
复制: 创建和删除大量临时表可能会导致内存消耗增加。(漏洞 #17806014)
-
复制:
SHOW SLAVE STATUS
报告MASTER_SSL_CRL
和MASTER_SSL_CRLPATH
。(错误#17772911,错误#70866)参考:这个问题是 Bug #11747191 的回归。
Replication: 当
log_warnings
大于1时,master打印二进制日志转储线程信息——包含slave服务器ID、二进制日志文件名和二进制日志位置——在mysqld.1.err
. 在这种情况下,大于 20 亿的从服务器 ID 打印为负值。(错误#17641586,错误#70685)-
复制: mysqlbinlog
--verbose
在遇到二进制日志中的损坏行事件时失败。这样的行事件也可能导致从站失败。(漏洞#17632978)参考资料:另请参阅:Bug #16960133。
-
复制: 二进制日志事件可以在它们被刷新到主服务器上的磁盘之前发送到从服务器,即使
sync_binlog
设置为 1。这可能导致在操作崩溃后重新启动主服务器时出现以下两个问题之一系统:复制无法继续,因为一个或多个从服务器正在请求主服务器上不存在的复制事件。
数据存在于一个或多个从站上,但不在主站上。
此类问题在较不持久的设置(
sync_binlog
不等于 1)上是预期的,但在为 1 时不应发生sync_binlog
。为解决此问题,LOCK_log
现在在同步期间持有锁 ( ),并且仅在实际写入二进制事件后释放到磁盘。(错误#17632285,错误#70669) -
复制: 当
slave_parallel_workers
以 1 或更大值运行从站时,设置--slave-skip-errors=all
会导致错误日志中充满警告 从站 SQL 的实例:无法执行查询事件。详细错误:;,Error_code:0。(错误#17581990,错误#68429)参考资料:另请参阅:错误 #17986385。
Replication: 在没有slave的独立服务器上配置半同步复制并
rpl_semi_sync_master_wait_no_slave
设置为OFF
时,master仍然等待ACK
来自slave的一个。当rpl_semi_sync_master_wait_no_slave
设置为OFF
时,当从站数量在指定的超时时间内达到零时,主站应恢复正常复制。现在在这种情况下,服务器检查半同步复制是否打开,如果打开,则继续检查是否有任何从属连接。如果没有连接,则禁用半同步复制,直到用户将 的值设置rpl_semi_sync_master_wait_no_slave
为ON
。(错误#17510411,错误#70360)-
复制: 用作
PROCESSLIST_STATE
列threads
比列的宽度(64 个字符)长。长状态消息现在已被重写,并相应地缩短了。此修复适用于 MySQL 5.7 及更高版本。(漏洞 #17319380)
-
复制: 在某些情况下,当它的值本应大于零时,它
Seconds_Behind_Master
的输出SHOW SLAVE STATUS
(漏洞#17233214)参考资料:另请参阅:Bug #16579028。
复制: 在使用基于行的复制时,服务器没有正确处理大于 4 GB 的行的插入。(漏洞 #17081415)
复制: 使用基于行的复制时,从属版本表上的附加自动增量列未正确更新;而是插入了一个零。(漏洞 #17066269,漏洞 #69680)
-
复制: 涉及性能模式表的语句不应写入二进制日志,因为这些表的内容仅适用于给定的 MySQL 服务器实例,并且在复制拓扑中的不同服务器之间可能会有很大差异。数据库管理员应该能够配置 (
INSERT
,UPDATE
, 或DELETE
) 或刷新 (TRUNCATE TABLE
) 单个服务器上的性能模式表而不影响其他服务器。但是,当从 MySQL 5.5 master 复制到 MySQL 5.5 或更高版本的 slave 时,有关更新 Performance Schema 表的不安全语句的警告被提升为错误。对于 MySQL 5.6 及更高版本的从站,这阻止了同时使用performance_schema
和 GTID(请参阅 使用全局事务标识符进行复制)。此修复会导致数据库中表的所有更新在
performance_schema
主服务器上被过滤而不是被复制,而不管有效的日志记录类型如何。在此修复之前,使用的语句被标记为复制不安全,这会在执行期间引起警告;不管日志记录格式如何,这些语句仍然被写入二进制日志。INFORMATION_SCHEMA
此修复不会更改数据库 中表的现有复制行为 。有关详细信息,请参阅MySQL 性能架构。(漏洞 #16814264)
参考资料:另请参阅:Bug #14741537、Bug #18259193。
复制: 二进制日志中的无效事件偏移量并不总是得到正确处理,这可能导致复制失败。(漏洞 #16736412,漏洞 #69087)
复制: 半同步复制插件被 DDL 语句调用两次,
Rpl_semi_sync_master_yes_tx
每次执行此类语句时递增 2 而不是 1。(错误#70410,错误#17509011)-
复制: 如果有许多转储线程(例如来自mysqlbinlog或从属 I/O 连接)同时工作,半同步复制会变得非常慢。还发现,即使转储连接不支持半同步复制,也会调用半同步主插件函数,这会导致锁定插件锁并在必要的代码上浪费时间。
在此修复之后,非半同步转储线程不再调用半同步主函数来观察二进制事件。(错误#70218,错误#17434690)
Microsoft Windows:
my_atomic_*
在 Microsoft Windows 上,始终使用函数 的 rw-lock 备份实现 现在,在可用的情况下使用本机 Microsoft Windows 实现。(漏洞 #18054042)Microsoft Windows: 在 Windows 上,
--local-service
服务器选项不起作用,并且未显示在--help
消息中。(缺陷 #69637,缺陷 #17049656)Solaris:Solaris 的 MySQL 发行版现在 在目录下包含gcc
share
的源代码压缩包 ,以符合因包含 C++ 运行时库而产生的 GPL 条件。(漏洞#18306484)sql_yacc.h
在编译期间,可以同时从多个目录 尝试创建 。(漏洞 #18319335)mysql_secure_installation尝试错误地释放内存并在尝试读取选项文件失败后异常退出。(漏洞 #18255657)
在打印服务器版本时,mysql 客户端没有检查字符串变量中的缓冲区溢出。(漏洞 #18186103)
如果mysql_install_db已使用该
--skip-random-passwords
选项运行,则mysql_secure_installation退出 (漏洞 #18181665)如果 MySQL 配置
CFLAGS
为包含-Werror
带有参数的选项,则编译失败。(漏洞 #18173037)当优化器尝试使用 MRR 或 DS-MRR 读取内部创建的临时表时,服务器可能会退出或引发断言。(漏洞 #18172819)
-
默认的编译器标志是从
cmake/build_configurations/compiler_options.cmake
. 这可以通过CMake-DWITH_DEFAULT_COMPILER_OPTIONS=0
选项关闭。CFLAGS
但是,如果设置了或CXXFLAGS
环境变量 ,也可以为 C 或 C++ 编译器关闭它。那些环境变量现在没有这样的效果。要指定编译器标志,请使用
-DWITH_DEFAULT_COMPILER_OPTIONS=0
选项,或者 可以使用 和 选项。(漏洞 #18158812)-DCMAKE_C_FLAGS=
flags
-DCMAKE_C_FLAGS=
flags
处理索引合并的范围优化器代码中的错误可能会导致服务器退出或结果集中丢失行。(漏洞#18136628)
共享的
libmysqld
嵌入式服务器库不是在 Linux 上构建的。一个新的 CMake选项现在使这成为可能。(错误#18123048、错误#16430656、错误#68559)WITH_EMBEDDED_SHARED_LIBRARY
LIKE
模式匹配操作 期间的类型转换可能会导致服务器退出。(漏洞#18114294)如果使用该选项
--libmysqld-libs
配置 MySQL,则在使用(或同义词) 调用时, mysql_config会不正确地生成非空输出WITHOUT_SERVER
(漏洞 #18102839)在同一个源代码树中重复重建导致
libmysqld.a
每次都增加大小。(漏洞#18082702)SHOW GRANTS
可用于查看代理用户的密码哈希。密码哈希显示现在需要SUPER
特权。(漏洞#18057514)-
由于 Bug#16249481 补丁引入的回归, 使用 Visual Studio 2008 在 Windows 上从源构建 MySQL 失败并出现标识符未找到错误。(漏洞#18057449)
参考资料:此问题是 Bug #16249481 的回归。
OWNER_THREAD_ID
当表从表缓存中重新打开并且当前线程未针对性能模式进行检测时, 服务器退出尝试填充table_handles
表。(漏洞 #18047865)修复了 Solaris SPARC 和 Linux 64 位平台上的链接故障。(漏洞 #18004599)
服务器启动期间性能模式中发生内存泄漏。(漏洞 #18003651)
构建
libevent
错误地依赖于使用该-DWITH_INNODB_MEMCACHED=1
选项配置的 MySQL。(漏洞#17964544)在关闭期间,可能会删除仍然锁定的互斥锁,从而导致服务器退出。(漏洞#17959898)
编译为 Clang 和 GCC 使用不同的警告标志,根据您使用的编译器产生不同的警告输出。两个编译器的警告输出现在是一致的。(漏洞#17959689)
在 Solaris 上,如果找不到,
STL_LIBRARY_NAME
则配置失败。(漏洞#17954277)storage/ndb/CMakeLists.txt
为一些应该保存结果的编译器标志重置 CMake缓存。(漏洞#17949504)Performance Schema 表中 的
SUM_SORT_MERGE_PASSES
列值 计算不正确。events_statements_summary_by_digest
(漏洞 #17938255)如果在
events_statements_summary_by_digest
找到具有新摘要的语句时性能模式表已满,则Performance_schema_digest_lost
状态变量不会增加。(漏洞#17935314)当多个连接发生许多操作时,审计日志插件可能会在日志文件轮换操作期间导致服务器退出。(错误号 17930339)
DECIMAL NOT NULL
项目可以NULL
在子查询中返回。(漏洞 #17921777)-
FORCE INDEX [FOR ORDER BY] (
不适用于连接。index_name
)此错误的修复还更改了为创建的警告
EXPLAIN
。如果在查询中指定了{IGNORE|USE|FORCE} INDEX
它,它现在也会打印 ,而不是只 打印。FOR {GROUP BY|ORDER BY|JOIN}
(漏洞 #17889511) 如果mysql_secure_installation使用 SSL 连接并且用户密码已过期,则退出。(漏洞 #17880395)
在服务器关闭期间,打开的连接线程的关闭可能无法干净地发生。(漏洞#17863690)
对于调试版本,插入多表视图可能会引发断言。(漏洞#17834434)
当索引不具有条件中存在的关键部分时,优化器可以下推条件。(漏洞#17814492)
启用压缩客户端/服务器协议后,Performance Schema 语句检测可以引发断言。(漏洞#17794846)
如果服务器关闭或用户密码已过期,则mysql
resetconnection
命令 不会报告正确的错误。(漏洞 #17772561)排序规则中的收缩信息可能处理不当,导致关于字符是否是收缩的一部分的错误决定,以及收缩权重的错误计算。(漏洞 #17760379)
filesort
如果在记录属性更改时未能调整其主缓冲区的大小, 则可能会引发断言。(漏洞#17757914)行比较器设置期间产生了 Valgrind 错误。(漏洞 #17755540)
-
Bug #16041903 的补丁引入了一个错误
DBUG_ASSERT
,在调试版本中引发了一个虚假的断言。(漏洞#17746721)参考:这个问题是 Bug #16041903 的回归。
修复了在 SPARC 上以 32 位模式使用gcc 4.8.1 构建的构建和执行问题 。(漏洞 #17740390)
如果使用 .config 配置 MySQL,则编译失败
-DWITH_LIBWRAP=1
。(漏洞 #17738805)对于调试版本,该
filesort
算法可能会引发虚假断言。(漏洞#17734642)符号从
mysql_get_option
中丢失libmysql.dll
。(漏洞 #17733103)在某些情况下,
UNIX_TIMESTAMP()
可以NULL
在应该返回 0 时返回。(缺陷 #17728371)-
在执行
INSERT ... SELECT
withUNION
、ROLLUP
和ON DUPLICATE KEY UPDATE
with 子查询时,服务器可能会退出。(漏洞#17727506)参考资料:此问题是 Bug #16967281 的回归。
只有在成功检索所有行后,才会释放用于索引合并访问方法的缓存。操作中断或失败导致文件描述符泄漏。(漏洞 #17708621)
优化器错误地计算了连接缓冲区扫描的成本,评估了由附加条件过滤掉的行,而不是一次,而是每个连接缓冲区一次。(漏洞#17694707)
使用没有值的mysqldump
--set-gtid-purged
选项会导致mysqldump崩溃。(漏洞 #17650245)如果
SAFE_MUTEX
已启用(仅适用于调试版本),THR_LOCK_mutex
则在初始化之前使用。(缺陷 #17641055,缺陷 #70639)Performance Schema 语句事件线程之间的竞争条件导致服务器退出。(漏洞 #17637970)
范围优化器模块中不正确的引用计数导致查询结果集中可能丢失或重复行。(漏洞 #17619119)
对于调试版本,子查询连接条件中的聚合函数可以引发断言。(漏洞 #17602807)
-
修复 Bug #16409270 后,无法
#include <mysql.h>
关注#include <windows.h>
. (漏洞#17514554)参考资料:另请参阅:错误 #16409270。
访问连接缓冲区时的寻址错误可能会产生无效结果或服务器退出。(漏洞 #17513341)
解析器允许一些带有多个
ORDER BY
子句的查询,然后在执行过程中失败并导致服务器退出。(漏洞 #17473479)对于调试版本,服务器可以退出插入到
BLOB
声明为NOT NULL
使用从BLOB
列检索并包含的子查询的列中的语句GROUP BY NULL
。(漏洞 #17458917)-
在
CASE
表达式中,使用引用该VALUES()
函数的子查询可能会导致服务器退出。(漏洞#17458914)参考资料:这个问题是 Bug #14789787 的回归。
SET PASSWORD
结合子查询结果中的变量赋值可以引发断言。(漏洞 #17458750)删除结构后清理不充分
SELECT_LEX
导致取消引用 NULL 指针和服务器退出。(漏洞 #17458169)-
解析器默默地接受重复的
ORDER BY
子句和/或子查询中LIMIT
子句之前ORDER BY
的子句。这些在查询执行期间导致失败。修复此问题会导致解析器行为发生一些变化。解析器不再接受:LIMIT
从句前 的ORDER BY
从句关键字 前无
LIMIT
括号语句中的 子句SELECT
UNION
一个
INTO
条款接一个PROCEDURE ANALYSE()
条款
(错误#17426017、错误#17703542、错误#17727401)
在 Windows 上,如果密码过期, mysql_secure_installation将退出。
root
(漏洞 #17415203)mysql_config错误地包含了一些生成编译器警告输出的标志。(漏洞 #17400967)
启用半连接优化后,由于对中间查询块中列的引用解析不正确,带有嵌套子查询的查询可能会导致服务器退出。(漏洞#17398972)
如果由于内存不足错误而导致接受连接尝试失败,则服务器可能会访问先前断开连接的陈旧线程结构,从而导致 Valgrind 错误。(漏洞#17398792)
SHA256 密码验证算法分配的缓冲区太短了一个字节。(漏洞 #17397073)
对于
CASE
涉及浮点数的表达式,可能会错误地计算max_length
和decimal
值。for 的逻辑CASE
已更正为与 for 相同COALESCE()
,后者执行类似的操作。(漏洞 #17388045)如果
mysql_set_server_option()
之前调用了 或其他几个 C API 函数, 则会发生客户端崩溃mysql_real_connect()
。(漏洞 #17338958)在某些情况下,优化器将固定长度的临时
MyISAM
表而不是可变长度的临时表写入磁盘。(漏洞 #17231940)启用该
validate_password
插件可能会导致mysql.user
表中存储不正确的密码哈希值。(漏洞 #17065383)对于调试版本,第二次执行使用半连接处理的准备好的语句可能会导致服务器退出。(漏洞 #16988465)
对于使用要求按顺序返回行的半连接 LooseScan 优化处理的查询,提出了虚假断言。(漏洞 #16977389)
解决了涉及的循环依赖问题
sql/sql_builtin.cc
。(漏洞 #16877045)对于使用插件验证的帐户
sha256_password
,在密码过期后设置密码不会清除密码过期标志。(漏洞 #16872181)在服务器关闭期间,文件信息在调用之前被释放
query_logger.cleanup()
,导致内存泄漏。(漏洞 #16859266)对于准备好的
INSERT INTO ... SELECT
语句,在语句准备期间不会报告不存在的列名,但只会在稍后的语句执行时报告。(漏洞 #16820562)多表更新在某些情况下更新失败。(漏洞 #16767011)
临时表的崩溃恢复使用了未初始化的内存。(漏洞 #16754540)
在 OS X 10.7 上,涉及的竞争条件
vio_shutdown()
和基于选择的实现vio_io_wait()
可能会导致服务器退出。(错误#16354789,错误#17733393)源代码中使用的示例 URL 中的主机名已替换为 example.com 域中的名称,该域是 IANA 用于此目的的。(漏洞 #15890092)
对于
utf8
和utf8mb4
字符串,处理函数不必要地调用了 Unicode 转换函数。(漏洞 #14057034)在 OS X 上,预加载使用
LIBMYSQL_PLUGINS
环境变量指定的客户端插件可能会失败,除非插件位于硬连接的默认插件目录中。C API 现在在插件预加载期间检查LIBMYSQL_PLUGIN_DIR
环境变量,该环境变量可以设置为在其中查找客户端插件的目录的路径名。(错误#13994567,错误#18110355)某些
(... NULL ...) IN (...)
表达式NULL
在它们应该返回 0 时返回,例如SELECT (NULL, 1) IN ((0, 0), (0, 0))
. (漏洞 #13944462)如果MySQL
-W
配置为-DWITH_INNODB_MEMCACHED=1
. (漏洞 #13898319)在某些无法使用范围访问的情况下,优化器会设置动态范围访问,从而导致回退到表扫描。(漏洞 #13814468)
对启用了线程池插件并为大量并发连接提供服务的服务器 执行mysqladmin shutdown导致服务器异常退出。(漏洞 #13788920)
在某些情况下,使用无效的 XPath 表达式调用
ExtractValue()
函数可能会导致服务器出现故障。(漏洞 #12428404,漏洞 #61065)使用非多字节算法跳过多字节字符串中的前导空格可能会导致服务器退出。(错误#12368495,错误#18315770)
ONLY_FULL_GROUP_BY
启用 SQL 模式后,如果查询在视图中,则在子句中使用 从子GROUP BY
查询派生的列的查询会FROM
失败并出现错误。column isn't in GROUP BY
(漏洞 #11923239)mysqlbinlog与
--rewrite-db
处理相关的泄漏内存。(错误#71283,错误#18027692)以前,对于
EXPLAIN
输出,Performance Schema 表的行检查估计值始终显示为 1000。现在,根据为每个表分配内存时使用的大小调整参数显示更准确的估计值。这不会导致行为发生变化,因为 Performance Schema 表没有索引。(错误#71278,错误#18024455)范围优化器的优化器跟踪输出可能包括原始二进制数据并生成不可打印的字符。现在二进制数据以十六进制格式打印。(错误#71273,错误#18023222)
在配置期间,CMake不正确地检查了 C++ 头文件
cxxabi.h
。(错误#71268,错误#18147458)在子句中聚合子查询的结果
FROM
可能会产生不正确的结果。(错误#71244,错误#18014565)以前,在语句中执行的第一个阶段是
stage/sql/init
. 这与名为的不同阶段发生冲突,并且与 的阶段init
不兼容。语句中执行的第一个阶段现在命名为。相应地,在输出中,一些以前显示 值的行现在显示。(错误#71201,错误#17993294)starting
SHOW PROFILE
stage/sql/starting
SHOW PROCESSLIST
State
init
starting
ssl.cmake
由于语法格式错误, CMake产生了警告 (错误#71094,错误#17905144)CMake产生了关于
INTERFACE_LINK_LIBRARIES
策略的无用警告。(错误#71089、错误#17905155、错误#17894997)mysqldump --single-transaction为每个转储表获取元数据锁,但直到转储操作完成才释放它们。因此,即使在转储表本身之后,转储表上的其他 DDL 操作也会被阻塞。mysqldump现在尝试更早地释放元数据锁。(错误#71017,错误#17862905)
sql_resolver.cc
指的是本应受保护的分区代码#ifdef
,即使 MySQL 配置为-DWITH_PARTITION_STORAGE_ENGINE=OFF
. (错误#71010,错误#17876794)wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_sync
互斥量未针对性能模式进行正确检测 。 (错误#70939,错误#17813333)-
CMake选项被忽略但不应该被忽略 。 如果给出,存储引擎被构建为一个插件。(错误#70859,错误#17772560,错误#30133062)
-DWITH_EXAMPLE_STORAGE_ENGINE=1
-DWITH_EXAMPLE_STORAGE_ENGINE=0
EXAMPLE
参考资料:另请参阅:错误 #18324650。
FLUSH STATUS
清除了一个变量,该变量可能导致 XA 事务的后续隐式提交,从而导致服务器退出。(错误#70854,错误#17911445)my_fopen()
在和my_register_filename()
mysys
函数 的关键部分减少了开销 。感谢 Po-Chun Chang 提供补丁。(缺陷号 70848)Coverity 静态分析工具发现的几个问题已得到修复。感谢 Honza Horak 提供补丁。(错误#70830,错误#17760511)
创建临时表以查找不同值并在投影列表中具有常量值的查询可能会产生不正确的结果。(错误#70657,错误#17634335)
配置 with 与
-DWITH_DEBUG=1
配置 with 的效果不同-DCMAKE_BUILD_TYPE=Debug
。(错误#70647,错误#17632854)Performance Schema 检测 API
mysql_cond_timedwait()
调用的原型被修复为与pthread_cond_timedwait()
. 此修复仅影响第三方插件的实施者。(错误#70628,错误#17702677)一些
BETWEEN
关于无符号值的表达式是使用有符号算术求值的。感谢 Xiaobin Lin 的补丁。(错误#70622,错误#17606942)IF()
如果子句中的谓词 与转换为半连接的子查询WHERE
相结合, 查询可能会返回不正确的结果 。OUTER JOIN
(解决方法是使用禁用半连接SET optimizer_switch='semijoin=off';
)(错误 #70608,错误 #17600176)服务器向错误日志 写入了过多的“ Sort aborted ”消息。(错误#70173,错误#17372396)
当由 运行时
root
,mysqld --help --verbose在显示帮助消息后以非零错误代码退出。(错误#70058,错误#17324415)涉及连接或子查询的 Performance Schema 表的复杂更新无法更新每一行。(错误#70025,错误#17309657)
对于调试版本,涉及半连接具体化的查询的 JSON 格式
EXPLAIN
语句可能会导致服务器退出。(错误#70014,错误#17305943)子查询执行期间发生的死锁错误可能导致引发断言。(缺陷 #69969,缺陷 #17307201)
对于现有用户,
GRANT
使用空密码 (IDENTIFIED BY [PASSWORD] ''
) 没有更改密码。(缺陷 #69899,缺陷 #17256161)配置期间下载 Google Mock 库可能会失败。这是通过要求 CMake 2.8.2 或更高版本来解决的。(缺陷 #69854,缺陷 #17231722)
Performance Schema 表中的某些文件
file_instances
未被删除,因为未检测文件删除操作。(缺陷 #69782,缺陷 #17209750)对于用
--basedir
选项指定的路径, mysql_plugin试图取消链接路径而不是释放存储路径的内存。(缺陷 #69752,缺陷 #17168602)没有定界符且超过 14 位的时间文字字符串被验证为具有
TIMESTAMP/DATETIME
两位数精度小数秒部分的值。但是小数秒应该始终用小数点与时间的其他部分分开。(缺陷 #69714,缺陷 #17080703)对于采用字符串值的系统变量,
SET
语句允许使用不带引号的值,但包含点的值会被错误地解析,并且只分配了部分值。例如,SET GLOBAL slow_query_log_file = my_slow.log
赋值my_slow
。现在必须引用这些值,否则会发生错误。(缺陷 #69703,缺陷 #17075846)-
无法使用在视图定义的
ORDER BY
子句中引用别名的SELECT
子句查询视图,除非视图中的所有列都在选择列表中命名。为了处理这个问题,服务器现在以不同的方式将视图写入
.frm
存储视图定义的文件中。如果您遇到刚刚描述的视图评估错误,请删除并重新创建视图,以便.frm
文件包含更新的视图表示。(缺陷 #69678,缺陷 #17077305) mysqladmin 、mysqlbinlog、 mysqlcheck、mysqldump、 mysqlimport、mysqlslap和 mysqlshow程序 现在支持
--secure-auth
防止以旧(4.1 之前)格式向服务器发送密码的选项。默认情况下启用此选项;用于--skip-secure-auth
禁用它。(缺陷 #69051,缺陷 #16723046)对于
utf8_bin
排序规则,可能会产生不正确的排序。(缺陷 #69005,缺陷 #16691598)ORDER BY LOWER(
col_name
)来自社区版分发版的 MySQL 客户端程序无法使用 SSL 从企业版连接到 MySQL 服务器。这是由于 yaSSL 和 OpenSSL(分别用于社区和企业)在处理证书方面存在差异。
--ssl-ca
OpenSSL 希望在未指定所有、--ssl-cert
和选项时发送空白证书--ssl-key
,而 yaSSL 没有这样做。为解决此问题,yaSSL 已修改为在缺少选项时发送空白证书。(缺陷 #68788,缺陷 #16715064)-
全文搜索与派生表(
FROM
子句中的子查询)相结合导致服务器退出。现在,如果全文操作依赖于派生表,服务器会产生一个错误,指示无法对物化表进行全文搜索。(缺陷 #68751,缺陷 #16539903)
NULL
当最后读取的行包含一个值 时,COUNT(DISTINCT) 有时会产生不正确的结果。(错误#68749、错误#16539979、错误#71028、错误#17867117)一些脚本显示有关报告错误的位置的过时信息。(漏洞 #68742,漏洞 #16530527)
当本地表包含单个行并且该行可以连接到表中的行时, 更新
FEDERATED
表 导致服务器退出。(缺陷 #68354,缺陷 #16324629)UPDATE... JOIN
FEDERATED
服务器针对 LDML 归类定义问题写入错误日志的消息缺少归类名称。(漏洞 #68144,漏洞 #16204175)
mysqlcheck没有正确处理包含点的表名。(缺陷 #68015,缺陷 #16064833)
修复了在 C++11 模式下编译时Clang和gcc 报告的错误的编译问题 。(漏洞 #66803,漏洞 #14631159)
cmake/configure.pl列出了实例
WITH_COMMENT
而不是正确的选项COMPILATION_COMMENT
。(缺陷 #65834,缺陷 #14298560)由于不正确的约束,使用gcc但没有 gcc
make_atomic_cas_body64
内置函数的 IA32 实现可能会被错误编译。该补丁还导致 MySQL 在使用Clang编译时使用内置原子。(缺陷 #63451,缺陷 #17242996)在 OS X 上,
libmysqlclient
dylib 文件链接到自身。(错误#61699、错误#13890998、错误#61243、错误#12590037)当在唯一索引的成本之前评估非唯一访问的成本时, 优化器可以选择
ref
访问而不是 访问。eq_ref
(错误#54808,错误#11762236)在 Windows 上,mysql_install_db.pl只能从
bin
安装目录下的目录中运行。(错误#42421,错误#11751526)gcov打印没有文件名的警告。(缺陷 #33269,缺陷 #11747622)
mysql_install_db
参考过时的 mysqlbug脚本来报告问题。它现在指的是http://bugs.mysql.com/。(缺陷 #29716,缺陷 #11746921)