CMake选项
system
现在允许 使用值。如果此选项未设置或设置为,则假定在标准位置的编译主机上安装了正确版本的 Boost。在这种情况下,使用已安装的 Boost 版本,而不是 MySQL 源代码分发中包含的任何版本。(缺陷号 22224313)WITH_BOOST
system
除了
mysql-5.7.11.tar.gz
源压缩包之外,mysql-boost-5.7.11.tar.gz
还提供了另一个名为的压缩包。新的 tarball 包含第一个 tarball 中的所有内容,但还在名为boost
. 这是为了那些没有安装正确的 Boost 版本并且不想或不能下载它的人的利益。要从此源代码分发构建,请添加-DWITH_BOOST=boost
到 CMake命令行。
-
位函数和运算符包括
BIT_COUNT()
,BIT_AND()
,BIT_OR()
,BIT_XOR()
,&
,|
,^
,~
,<<
和>>
。目前,位函数和运算符需要BIGINT
(64 位整数)参数和返回BIGINT
值,因此它们的最大范围为 64 位。其他类型的参数被转换为BIGINT
并且可能会发生截断。MySQL 8.0 的扩展改变了这种强制转换
BIGINT
行为:位函数和运算符允许二进制字符串类型参数(BINARY
、VARBINARY
和BLOB
类型),使它们能够接受参数并产生大于 64 位的返回值。因此,MySQL 5.7 中二进制字符串参数的位操作可能会在 MySQL 8.0 中产生不同的结果。为了提前通知这种潜在的行为变化,服务器现在为二进制字符串参数在 MySQL 8.0 中未转换为整数的位操作生成警告。这些警告提供了重写受影响语句的机会。要以升级到 8.0 后不会更改的方式显式生成 MySQL 5.7 行为,请转换位操作二进制字符串参数以将它们转换为整数。有关详细信息和示例,请参阅位函数和运算符。
mysql_plugin实用程序已弃用,将在未来的 MySQL 版本中删除。备选方案包括在服务器启动时使用
--plugin-load
or--plugin-load-add
选项加载插件,或在运行时使用INSTALL PLUGIN
语句加载插件。、
mysql_kill()
、 和 C API 函数已弃用mysql_list_fields()
, 并将在未来的 MySQL 版本中删除。相应的 、 、 和 客户端/服务器协议命令也是如此。相反,分别用于执行、 、 或 语句。mysql_list_processes()
mysql_refresh()
COM_PROCESS_KILL
COM_FIELD_LIST
COM_PROCESS_INFO
COM_REFRESH
mysql_query()
KILL
SHOW COLUMNS
SHOW PROCESSLIST
FLUSH
以前,mysqld --initialize要求数据目录不存在,或者如果存在,则为空。
.
现在,如果每个条目的名称以句点 ( ) 开头或使用--ignore-db-dir
选项命名,则允许现有数据目录为非空。(错误#79250,错误#22213873)
yaSSL 已升级到版本 2.3.9。此升级解决了一个问题,即 yaSSL 仅处理密钥协议的零个或一个前导零的情况,而不是潜在的任何数字,这在极少数情况下可能导致使用 DHE 密码套件时连接失败。(缺陷号 22361038)
-
MySQL Commercial Server 的链接 OpenSSL 库已从版本 1.0.1p 更新到版本 1.0.1q。有关此版本中修复的问题的说明,请参阅 http://www.openssl.org/news/vulnerabilities.html。
此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(漏洞#22348181)
-
控制全局密码过期策略的系统变量的默认值
default_password_lifetime
已从 360(360 天)更改为 0(无密码过期)。当帐户密码在升级到 MySQL 5.7 一年后过期时,360 的默认值有时会让人感到意外。要继续使用 0 以外的值作为密码到期时间,请使用 的显式设置启动服务器default_password_lifetime
。例如,在选项文件中使用这些行:[mysqld] default_password_lifetime=360
(错误#77277,错误#21284761)
-
MySQL 客户端程序现在支持一个
--ssl-mode
选项,使您能够指定与服务器的连接的安全状态。允许的选项值是PREFERRED
(如果服务器支持该功能,则建立加密连接,否则回退到未加密连接),DISABLED
(建立未加密连接),REQUIRED
(建立加密连接,否则失败),VERFIFY_CA
(如REQUIRED
,但另外验证服务器证书),VERIFY_IDENTITY
(类似于VERIFY_CA
,但另外验证服务器证书是否与尝试连接的主机名相匹配)。为了向后兼容,默认是PREFERRED
if--ssl-mode
未指定。这些客户端支持
--ssl-mode
: mysql、mysqladmin、 mysqlbinlog、mysqlcheck、 mysqldump、mysqlimport、 mysqlshow、mysqlpump、 mysqlslap、mysqltest、 mysql_upgrade。该
--ssl-mode
选项包括客户端的能力--ssl
和--ssl-verify-server-cert
选项。因此,这两个选项现在都已弃用,并将在未来的 MySQL 版本中删除。使用--ssl-mode=REQUIRED
代替--ssl=1
或--enable-ssl
。使用--ssl-mode=DISABLED
代替--ssl=0
,--skip-ssl
, 或--disable-ssl
。使用--ssl-mode=VERIFY_IDENTITY
而不是--ssl-verify-server-cert
选项。(不推荐使用服务器端--ssl
选项。)对于 C API,新
MYSQL_OPT_SSL_MODE
选项mysql_options()
对应于--ssl-mode
选项。和 选项 对应于客户端MYSQL_OPT_SSL_ENFORCE
和 选项 。它们现在已被弃用,并将在未来的 MySQL 版本中删除。与选项值or 一起使用。MYSQL_OPT_SSL_VERIFY_SERVER_CERT
mysql_options()
--ssl
--ssl-verify-server-cert
MYSQL_OPT_SSL_MODE
SSL_MODE_REQUIRED
SSL_MODE_VERIFY_IDENTITY
有关详细信息,请参阅 加密连接的命令选项和 mysql_options()。
由于此更改,次要 C API 版本号增加了。
-
InnoDB: 一个新的
InnoDB
配置选项, 重建表的innodb_tmpdir
在线操作期间创建的临时文件配置一个单独的目录引入此选项是为了帮助避免由于在线操作ALTER TABLE
期间创建的大型临时文件而可能发生的 MySQL 临时目录溢出 可以使用 语句动态配置。ALTER TABLE
innodb_tmpdir
SET
重建表的联机
ALTER TABLE
操作还会 在与原始表相同的目录中创建一个中间表文件。该innodb_tmpdir
选项不适用于中间表文件。(漏洞 #19183565) InnoDB: 现在支持对存储在 file-per-table 表空间中的表
InnoDB
数据加密通过在创建或更改表InnoDB
指定选项来启用加密 有关更多信息,请参阅 InnoDB 静态数据加密。ENCRYPTION
InnoDB
复制:添加 该
log_statements_unsafe_for_binlog
变量是为了控制错误 1592 生成的警告是否添加到二进制日志中。Valgrind 函数签名
mysql-test/valgrind.supp
已针对 Valgrind 3.11 进行了升级。(缺陷号 22214867)该
audit_log
插件现在在MYSQL_AUDIT_TABLE_ACCESS_CLASS
类中生成事件。这些事件是可以中止的。(漏洞 #21458192)mysqld_safe 生成的日志输出格式 现在可以使用该
--mysqld-safe-log-timestamps
选项进行配置。此选项可用于以与服务器兼容的格式或 旧版本 MySQL 中mysqld_safe使用的格式生成日志时间戳。有关详细信息,请参阅mysqld_safe — MySQL 服务器启动脚本。(错误#78475,错误#21862951)服务器现在支持一个
--early-plugin-load
选项,该选项指示在加载强制内置插件之前和存储引擎初始化之前加载哪些插件。此选项的一种用途是加载keyring_file
插件:InnoDB
存储引擎使用密钥环进行静态数据加密,因此keyring_file
必须尽早加载插件以确保它在InnoDB
初始化之前可用。存储引擎现在可以请求有关获取和释放独占元数据锁的通知。结果, Performance Schema 表的
LOCK_STATUS
列 有两个新的状态值。metadata_locks
和 状态值很简短PRE_ACQUIRE_NOTIFY
,POST_RELEASE_NOTIFY
表示元数据锁定子系统在进入锁定获取或离开锁定释放操作时通知感兴趣的存储引擎。
创新数据库;分区:
OPTIMIZE TABLE
重建分区 时InnoDB
,将生成的分区表空间文件(*.ibd
文件)放置在默认数据目录中,而不是使用该DATA DIRECTORY
选项指定的目录。(错误#75112,错误#20160327)InnoDB:
InnoDB
添加或删除虚拟列时无法更新索引统计信息。(缺陷 #22469660,缺陷 #79775)InnoDB: 信息架构接口代码中的服务器方法调用已修复,以避免不必要的类型转换。(漏洞 #22391925)
InnoDB:
InnoDB
具有较大 的较小innodb_stats_persistent_sample_pages
导致难以在缓冲池警告中找到空闲块。(缺陷号 22385442)InnoDB: 内存缓存连接被阻止访问包含索引虚拟列的表。访问索引虚拟列需要回调到服务器,但memcached连接无权访问服务器代码。(错误#22384503,错误#79691)
InnoDB: 拒绝尝试添加索引和虚拟列
InnoDB
的在线操作时未返回信息性消息ALTER TABLE
(缺陷号 22374827)InnoDB: 无效
innodb_saved_page_number_debug
设置导致服务器退出。(缺陷 #22311319,缺陷 #79516)InnoDB:
InnoDB
在同一共享表空间中创建压缩表和临时压缩表时,无法释放表对象。(漏洞 #22306581)InnoDB: 在 NUMA 相关代码中,传递给
mbind()
调用buf_chunk_init()
不正确。(缺陷 #22293530,缺陷 #79434)InnoDB: NUMA 对在线缓冲池大小调整操作的支持不完整。(缺陷 #22293511,缺陷 #79354)
InnoDB:
SELECT COUNT(*)
计算全文子查询结果的查询引发断言 。(缺陷号 22270139)InnoDB:
InnoDB
为虚拟列传递了一个TINYBLOB
数据长度不正确的缓冲区,导致清除线程失败。(缺陷号 22256752)InnoDB: 从包含空间索引的表中删除数据时发生清除失败。(错误#22230442,错误#22366370)
InnoDB: 当尝试从聚集索引重建虚拟列数据时清除访问释放的页面时引发断言。(缺陷号 22204260)
InnoDB: 仅为索引虚拟列记录前缀字节,导致sec rec 未找到错误的聚集记录。(漏洞 #22202788)
InnoDB:
innodb_page_size
设置为 的小型缓冲池64K
可能会导致启动、引导和恢复失败。(缺陷 #22179133,缺陷 #79201)InnoDB: 删除了检查 32 位文件偏移量的无法访问的代码。(缺陷 #22163880,缺陷 #79150)
InnoDB: 缓慢关闭失败是由后台线程在清除线程退出期间或之后将撤消记录添加到清除历史列表引起的。(缺陷号 22154730)
InnoDB: 清除
InnoDB
线程在尝试清除未标记为删除的虚拟列索引记录时死亡。(缺陷号 22141031)InnoDB: 在调试版本中,
ALTER TABLE
增加虚拟列的列长度的操作引发了断言。(缺陷号 22139917)InnoDB:
ut_allocator
在 32 位系统上使用 12 字节标头为分配有效载荷添加前缀,导致未对齐的内存访问。在 32 位 SPARC 系统上,未对齐的内存访问导致引导期间崩溃。(缺陷号 22131684)InnoDB: 在调试版本中,
ALTER TABLE
在现有虚拟列引发断言之前添加新虚拟列的操作。(错误#22123674,错误#22111464)InnoDB:
InnoDB
改进了与缓冲池转储和加载相关的启动消息。(缺陷 #22096661,缺陷 #78960)InnoDB: 支持
ALGORITHM=INPLACE
在现有虚拟列上添加索引同时删除另一个虚拟列的操作。还支持ALGORITHM=INPLACE
添加虚拟列和索引的操作。在新添加的虚拟列上添加索引时,清除现在会跳过未提交的虚拟索引。(漏洞 #22082762)InnoDB: 错误的表对象用于计算访问同一表的多个实例的查询的虚拟列值。(缺陷号 22070021)
InnoDB: 插入和删除空间数据时发生清除线程故障。在 R 树搜索阶段未存储子页码字段。(漏洞 #22027053)
InnoDB:以配置文件中 的空
innodb_data_home_dir
条目启动服务器导致InnoDB
在根目录中查找缓冲池文件,从而导致启动错误。(缺陷 #22016556,缺陷 #78831)InnoDB: 计算虚拟列值失败导致错误消息过多。(缺陷号 21968375)
InnoDB: 一个
INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX
查询提出了一个断言。InnoDB
在填充内存堆表时采用了字典互斥体InnoDB
在尝试将内存中的堆表转换为优化的内部临时表之前,互斥体未被释放(缺陷 #21950756,缺陷 #78714)InnoDB: 为避免潜在的挂起和重做日志覆盖,
innodb_log_file_size
最小值已从 1MB 增加到 4MB,并且log_margin_checkpoint_age()
修改了长度计算。(错误#21924224,错误#78647)InnoDB: 在高并发下运行的全文查询由于无效的内存访问导致服务器退出。(漏洞 #21922532)
InnoDB:对跨多个表空间分区的表 的
ALTER TABLE
操作将现有分区移动到表的默认表空间,导致对SHOW CREATE TABLE
. 同样, 将现有分区移动到指定的表空间。Only 应该将现有分区移动到表的默认表空间或命名表空间。在跨多个表空间分区的表上运行(错误#21914047、错误#22124042、错误#79030)ALTER TABLE
tbl_name
TABLESPACEtablespace_name
ALTER TABLE ... REORGANIZE PARTITION
ALTER TABLE
tbl_name
TABLESPACEtablespace_name
InnoDB:设置 较大
innodb_sort_buffer_size
时,在空表上添加索引的速度比预期慢。(缺陷 #21762319,缺陷 #78262)InnoDB:
fil_names_write()
和 之间发生竞争条件file_rename_tablespace_in_mem()
。(缺陷号 21549928)InnoDB: 清除尝试访问由先前的撤消日志截断操作释放的撤消页面,从而导致断言。(缺陷号 21508627)
InnoDB: 拒绝对具有空间索引的表进行
InnoDB
在线操作时未返回信息性消息ALTER TABLE
(漏洞 #20111575)InnoDB: 编译器屏障被添加到
ut_relax_cpu()
. 虚拟全局ut_always_false
变量已从.ut_delay()
(缺陷 #20045167,缺陷 #74832)-
InnoDB: 删除虚拟列时返回了不正确的索引值。更改的表对象用于评估虚拟列值。(错误#79773,错误#22469459)
参考资料:此问题是 Bug #22082762 的回归。
分区: 对具有虚拟列的分区表进行子查询扫描可能会泄漏内存。(错误#79145,错误#22162200)
复制: 5.6 和 5.7 版本之间 的行为
SET GTID_PURGED
不一致。此修复可确保 5.7 版不会启动SET GTID_PURGED
语句事务。(漏洞 #21472492)复制: 当 DML 调用插入
AUTO_INCREMENT
列的触发器或存储函数时,该 DML 必须标记为不安全语句。如果表在 DML 语句之前的事务中被锁定(例如通过使用LOCK TABLES
),则 DML 语句未被标记为不安全语句。此修复可确保将此类 DML 语句正确标记为不安全。(漏洞 #17047208)复制: 如果
pseudo_slave_mode
在 XA 事务处于准备阶段时设置为 1,则会生成断言。此修复可确保在 XA 事务期间可以进行从 0 到 1 的更改。请注意,此变量仅供服务器内部使用。(错误#79416、错误#22273964、错误#78695、错误#21942487)-
复制: 使用 GTID 时,违反 GTID 的语句在以下情况下会产生错误:
gtid_mode
要么是ON
要么ON_PERMISSIVE
和gtid_next=AUTOMATIC
该错误阻止了导致竞争条件的隐式预提交。这已通过使错误不阻止隐式预提交的发生来解决。这与违反 GTID 的 DDL 语句的预期行为相匹配,以在执行之前隐式提交先前的事务。(错误#78543,错误#21895421)
复制: 当从服务器配置为 时
log_bin=OFF
,应用程序 (SQL) 线程无法正确回滚留在中继日志中的部分事务。该修复确保在重新连接时,应用程序线程正确地回滚部分事务并从下一个中继日志文件开始再次应用它。(错误#78211,错误#21691396)复制: 如果服务器在提交已准备好的 XA 事务之前意外停止,并且该事务修改了
mysql.gtid_executed
表,则后续恢复innodb_lock_wait_timeout
会因读取mysql.gtid_executed
表时出错而中止。为了解决这个问题,不再允许 XA 事务修改mysql.gtid_executed
表。(错误#77740,错误#21452916)复制: 作为 Bug #16290902 修复的一部分,将
DROP TEMPORARY TABLE IF EXISTS
查询写入二进制日志时,查询前面不再有USE `db`
语句。相反,查询使用完全限定的表名,例如DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;
。这改变了replicate-rewrite-db
过滤规则的应用,因为它们仅适用于USE
语句中指定的默认数据库。这会导致从站在CREATE TEMPORARY TABLE
应用结果时失败。该修复确保在将DROP TEMPORARY TABLE IF EXISTS
查询写入二进制日志时,对默认数据库进行检查。如果存在,则查询写为USE default_db
在二进制日志中。如果不存在默认数据库,则使用限定的表名记录查询。(错误#77417,错误#21317739)复制: 如果为事务生成 GTID 失败,事务不会写入二进制日志,但仍会提交。虽然 GTID 耗尽的情况很少见,但如果确实发生,则会将错误作为同步阶段错误写入二进制日志。使用
binlog_error_action=ABORT_SERVER
,服务器会在出现此类错误时中止,从而避免数据不一致。当 时binlog_error_action=IGNORE_ERROR
,服务器在发生此类错误后继续进行二进制日志记录,可能会导致主从之间的数据不一致。该修复将错误更改为正确记录为刷新阶段错误。(错误#77393,错误#21276561)复制: 当使用
--gtid-mode=ON
,--enforce-gtid-consistency
, 和--binlog-format=row
时,如果在主服务器上执行具有多个DROP TEMPORARY TABLE
语句的用户定义函数,生成的二进制日志会导致从服务器出错。该修复程序确保存储的函数和触发器也被视为多语句事务,并且在--enforce-gtid-consistency
启用时,带有CREATE TEMPORARY TABLE
或DROP TEMPORARY TABLE
语句的函数会产生ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION
错误。(错误#77354,错误#21253415)复制:语句 中使用的存储过程局部变量
ALTER EVENT
未正确复制。CALL
这与语句未写入二进制日志这一事实有关 相反,在存储过程中执行的每个语句都是单独的二进制日志,除了修改语句字符串以便将存储过程局部变量的使用替换为NAME_CONST('spvar_name', 'spvar-value')
电话。DDL 语句(无论当前的二进制日志格式如何,始终以语句二进制日志模式进行二进制记录)也可以使用存储过程局部变量,并且冲突可能导致它们无法正确复制。该修复程序确保语句中使用的任何存储过程局部变量都替换NAME_CONST(...)
为 ,但当它是 DML 语句且二进制日志格式为ROW
. (错误#77288,错误#21229951)-
复制:
DROP TABLE
语句在写入二进制日志之前由服务器重新生成。如果表或数据库名称包含非常规字符,例如非拉丁字符,则重新生成的语句使用了错误的名称,从而破坏了复制。该修复确保在这种情况下重新生成的名称被正确地转换回原始字符集。同样在处理此错误期间,我们发现在极少数情况下,表或数据库名称包含 64 个字符时,服务器会抛出assert(M_TBLLEN < 128)
断言。断言已更正为小于或等于 128。(错误 #77249,错误 #21205695)参考资料:另请参阅:Bug #78036、Bug #22261585、Bug #21619371。
复制: 无论当前 格式
binlog_format
写入二进制日志STATEMENT
此类 DDL 可能来自基于事件的 SQL 语句,例如CREATE EVENT
orDROP EVENT
,或具有不安全函数的事务,例如sysdate()
. 当binlog_format=MIXED
并试图复制这样的 DDL 时,它没有被正确识别,因此没有被正确复制。(错误#71859,错误#19286708)Microsoft Windows: 在 Windows 上创建用于处理连接的线程时可能会发生线程句柄资源泄漏,这可能导致 Windows 服务器最终耗尽句柄。(错误#79714,错误#22455198)
JSON:
ALTER TABLE
当语句将列的类型从 更改为TEXT
时 ,并不总是执行语法检查JSON
。这可能会导致JSON
包含无效 JSON 数据的列。TEXT
原始列使用utf8mb4_bin
排序规则时会出现此问题 (错误#79432,错误#22278524)默认情况下,RHEL6 或更早版本的 System-V 初始化脚本无法启用该
mysqld
服务。(漏洞 #22600974)引用查询中的值的触发器的某些激活
NEW
可能会导致服务器退出。(缺陷号 22377554)将 的输出解析
ST_GeometryType()
为DATETIME
具有默认字符集的值utf32
导致服务器退出。(缺陷号 22340858)对于从 XML 文件加载的字符集,服务器可能无法正确初始化其状态映射,从而导致服务器退出。(缺陷号 22338946)
将 84 个 4 字节字符的标记插入全文索引会引发断言。最大令牌长度为 84 个字符,最多 252 个字节,这不包括 4 个字节的字符。最大字节长度现在是 336 字节。(缺陷 #22291765,缺陷 #79475)
对于某些消费者组合,Performance Schema 准备好的语句检测可能会导致服务器退出。(漏洞 #22291560)
如果客户端尝试使用不受支持的客户端字符集 (
ucs2
,utf16
,utf32
),则报告给客户端的错误消息对于 SSL 和非 SSL 连接是不同的。(漏洞 #22216715)如果存储过程具有声明为
TEXT
or 的变量,并且使用or 列BLOB
中的 SELECT ... INTO 语法将数据复制到该变量, 则可能会发生数据损坏或服务器退出。(错误#22203532、错误#22232332、错误#21941152)TEXT
BLOB
对于调试版本,在
ONLY_FULL_GROUP_BY
禁用 SQL 模式的情况下,优化器可能会尝试对外部引用进行排序,从而引发断言。(漏洞 #22200984)当在生成的列表达式中使用这些值时,对和 的
YEAR
值的 不同处理可能会引发断言。(缺陷号 22195458)INSERT
SELECT
对于调试版本,对于涉及
MIN()
或MAX()
在索引列上的查询以及对未索引日期时间列的引用,优化器可能会尝试访问未读值,从而导致引发断言。(缺陷号 22186926)由于舍入算法过于激进 ,Geohash 解码(例如,对于
ST_LongFromGeoHash()
、ST_LatFromGeoHash()
和 )可能会产生不正确的结果。ST_PointFromGeoHash()
(缺陷号 22165582)在调试版本中,使用
READ UNCOMMITTED
事务隔离级别,SELECT
使用索引读取生成的列可能会引发断言。(缺陷号 22133710)对于生成的列,优化器可能无法建立正确的表引用,从而导致服务器退出。(漏洞 #22132822)
NULL
对于某些消费者组合,由于在检测临时文件 I/O 时 尝试使用指针,性能模式文件检测可能会失败 。(缺陷号 22130453)性能模式可以基于(不正确的)假设提出断言,即检测临时文件打开操作总是会导致检测文件。(缺陷号 22118669)
ALTER TABLE
使用该算法在虚拟生成列上添加索引 的语句INPLACE
未正确报告有关虚拟列值问题的警告(或严格 SQL 模式下的错误)。由于评估有问题的值,ALTER TABLE
在同一表上使用该 算法的任何后续操作都会产生此类警告(或在严格的 SQL 模式下失败),但由于相同的原因使连接处于导致对表进行进一步更改失败的状态。(缺陷号 22095783)COPY
INPLACE
如果表达式的左侧表达式
IN
是不访问任何表的行子查询,则可能会引发断言(在调试版本中),或者可能返回不正确的结果(在发布版本中)。(缺陷号 22089623)与索引生成列匹配的表达式可能会被优化器替换为生成列,以启用关联索引的使用。但是,对于单表的update和delete语句并没有进行这种优化。优化器现在将此替换优化扩展到此类语句。(缺陷号 22077611)
ANSI
SQL 模式可能导致处理生成的列表达式时出现不一致。(缺陷号 22018979)删除服务器会话插件是错误的,可能导致服务器退出。(漏洞 #21983102)
对于某些查询,如果优化器对生成的列使用 Disk-Sweep Multi-Range Read 优化,则服务器可能会退出。(缺陷号 21980430)
-
mysqlpump尝试尽可能多地并行工作,但转储线程在备份数据之前缺少同步点,导致备份不一致。mysqlpump现在锁定服务器并刷新所有表,
FLUSH TABLES WITH READ LOCK
以确保任何进一步的连接查看所有数据库的相同状态。此更改解除了
--single-transaction
选项与并行性相互排斥的限制。使用时--single-transaction
,不再需要通过设置--default-parallelism
为 0 且不使用任何实例来禁用并行性--parallel-schemas
。(缺陷号 21980284) 即使对于已经解锁的对象,它也会减少锁定计数器的错误
pthread_rwlock_unlock()
可能会导致死锁。(缺陷号 21966621)Performance Schema 可以获得会话系统变量的双重锁定,导致服务器挂起或(在调试版本中)引发断言。(漏洞 #21935106)
包含以下形式的某些查询
WHERE 0
可能会由于未初始化的读取而导致服务器退出:。(漏洞 #21922202)SELECT (SELECT
col
ANDconstant
FROM t WHERE 0) IN (SELECTconstant
FROM t1)CREATE TEMPORARY TABLE .. SELECT
BIT
涉及导致列类型重新定义的列的语句可能会导致服务器退出或创建不正确的表。(漏洞 #21902059)对于表
UPDATE
操作InnoDB
,索引中虚拟生成列的值与“之前”缓冲区中的值可能不匹配,导致服务器退出。(缺陷号 21875520)对于
character_set_server=utf16le
,某些值ft_boolean_syntax
可能会导致服务器退出以进行全文搜索。(漏洞 #21631855)对于
gtid_mode=ON
,并发执行SHOW TABLE STATUS
和REVOKE ALL PRIVILEGES
可能会导致死锁,因为数据库中有一个视图并且REVOKE ALL PRIVILEGES
对某些但不是所有指定用户失败。(漏洞#21463167)由于转储处理期间视图处理线程的不正确同步, mysqlpump可能会退出。(错误#21399236,错误#21447753)
在
LOCK TABLES
生效时,尝试打开MERGE
由其表列表中的视图组成的临时表(不是列表中的最后一个表)导致服务器退出。(缺陷号 20691429)对于某些准备好的语句,优化器可以转换连接条件,以便它使用指向临时表字段的指针,该字段在初始执行后不再可用。随后的执行导致服务器退出。(漏洞#19941403)
-
重复执行
ALTER TABLE v1 CHECK PARTITION
准备好的语句,其中v1
是一个视图,导致服务器退出。此外,一些管理操作的输出,当它们在视图上尝试时,从 “损坏”变为“操作失败”。其中包括执行
ANALYZE TABLE
、 、和 操作的、OPTIMIZE TABLE
、 和REPAIR TABLE
和 语句。(漏洞 #19817021)ALTER TABLE
ANALYZE PARTITION
CHECK PARTITION
OPTIMIZE PARTITION
REPAIR PARTITION
Valgrind 在用于非对称加密的代码中检测到一些可能不安全的字符串函数使用。(漏洞 #19688135)
连接缓冲区分配中的内存不足故障可能会导致多表查询的结果不正确。(漏洞 #19031409)
MYSQL_OPT_READ_TIMEOUT
SSL 连接忽略通过将选项传递给mysql_options()
C API 函数 所做的任何更改 。(漏洞 #17618162)对于
ALTER TABLE
语句,解析器不支持ALGORITHM
某些涉及表空间或分区的操作的子句。(漏洞 #17400320)Debian 软件包
root
使用身份验证插件创建用户帐户,以在使用空白密码auth_socket
完成安装时实现默认安全安装。root
但是,auth_socket
即使密码不为空,也会被使用。(错误#80137、错误#22594846、错误#23321113、错误#81518)Solaris 软件包未能注意到 MySQL 客户端库对该
libstlport
库的依赖性。(错误#79778,错误#22504264)如果配置文件包含多行,则 使用 systemd 启动mysqld会失败 。
datadir
现在使用最后datadir
一行。(错误#79613,错误#22361702)SET
应具体化语句子句中 包含的派生表,UPDATE
以避免更新也在同一语句中读取的表时出错。某些语句没有发生具体化,从而导致该错误。(错误#79590,错误#22343301)-
MySQL 5.7.8 禁止引用从内部查询的相关子查询的子句中选择外部查询的列表列,
HAVING
因为标准 SQL 不允许这样做。但是,由于这是一个经常使用的扩展,因此再次被允许。(错误#79549,错误#22328395)参考资料:此问题是 Bug #19823076 的回归。
仅安装共享库、客户端和开发支持文件无法安装构建客户端应用程序所需的一切,因为
binary_log_types.h
未安装头文件。(错误#79531,错误#22321338)-
SHOW CREATE TRIGGER
可能无法显示所有适用的 SQL 模式。(缺陷 #79526,缺陷 #22313133)参考:这个问题是 Bug #18311187 的回归。
在 SELinux 上,使用 系统变量的mysqld --initialize
init_file
可能无法初始化数据目录。(错误#79442、错误#22314098、错误#79458、错误#22286481)写入保存的视图定义的十六进制和位文字可能会被截断。这也可能影响扩展
EXPLAIN
输出。(错误#79398,错误#22268110)ST_Buffer()
对于 SRID 不为 0 的几何返回错误。现在允许但忽略非零 SRID 值(仍然使用笛卡尔坐标进行计算)。(错误#79394,错误#22306745)回归导致 子查询限制的解决方法失败,以避免 在子查询中
ER_UPDATE_TABLE_USED
引用同一个表作为UPDATE
orDELETE
语句的目标时出现错误。(错误#79333,错误#22239474)导致多个解析错误的语句可能会引发断言。(缺陷 #79303,缺陷 #22222013)
与合并到外部查询中相比,具有派生表的某些查询在具体化时执行得更好。优化器不再默认对选择列表中包含依赖子查询的派生表使用合并。(错误#79294,错误#22223202)
ALTER USER
并且 在使用系统变量SET PASSWORD
命名的文件中调用时在服务器启动时不起作用 。init_file
(错误#79277,错误#22205360)当不在严格 SQL 模式下时,尝试隐式插入
NULL
列会NOT NULL
导致不同的行为,具体取决于表是否有触发器。(错误#79266,错误#22202665)某些仅复制代码不受保护,
#ifdef
并且无法在 启用CMake选项的情况下进行编译。(错误#79236,错误#22190632)WITH_UBSAN
使用CMake选项 配置 MySQL 会 导致来自comp_err的虚假运行时警告。这些现在都被压制了。此外,还添加了一条CMake警告,指出未定义行为地址消毒剂支持目前处于试验阶段。(缺陷 #79230,缺陷 #22190656)
-DWITH_UBSAN=ON
INSERT INTO ... SELECT
DEFAULT
语句可以将值插入生成的列以外的值。(错误#79204,错误#22179637)-
启用系统变量的
derived_merge
标志后,在optimizer_switch
外部联接的内侧使用派生表的查询可能会返回不正确的结果。(错误#79194,错误#22176604)参考资料:另请参阅:Bug #80526、Bug #22833364。
内存泄漏
libmysqld
已得到纠正。(错误#79187,错误#22174219)FOUND_ROWS()
UNION
如果前面的查询涉及SQL_CALC_FOUND_ROWS
and ,则可能返回负值LIMIT ... OFFSET
。(错误#79131,错误#22155786)-
IN
到EXISTS
子查询的转换可能导致返回 0 而不是.SELECT NULL IN (
subquery
)NULL
IN
对于非空表的查询,子EXISTS
查询转换可能会产生不正确的结果,谓词左侧的子查询IN
产生空结果,并且半连接优化被禁用。(错误#78946、错误#22090717、错误#74403、错误#19822406) 在视图中使用时,结果
WEIGHT_STRING()
可能不正确。(错误#78783,错误#21974321)对于使用 Unix 套接字文件建立
--ssl-ca
的连接,指定选项会导致连接失败。(错误#78509,错误#21878661)如果服务器以 启动
--thread-handling=no-threads
,则不会为客户端连接创建前台线程。Performance Schema 没有考虑到没有前台线程查询session_connect_attrs
表的可能性,导致引发断言。(错误#78292,错误#21765843)mysqlpump为已生成列的表生成了不正确
INSERT
的语句。(错误#78082,错误#21650559)ALTER TABLE ... CONVERT TO CHARACTER SET
如果表仅包含数字数据类型,则使用该INPLACE
算法的操作将无效。此外,此类操作无法清理其临时.frm
文件。(错误#77554,错误#21345391)繁重
SHOW PROCESSLIST
或SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST
活动可能导致服务器接受多个max_connections
连接。(错误#75155,错误#20201006)当与
libmysqld
嵌入式服务器一起使用时,mysql_stmt_execute()
C API 函数malformed communication packet
会因错误而失败,即使对于简单的准备语句也是如此。(错误#70664,错误#17883203)SUM(DISTINCT)
当存在许多不同的值时, 使用 的查询可能会产生不正确的结果。(错误#56927、错误#11764126、错误#79648、错误#22370382)