有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/。
这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
在数据目录初始化或升级期间,MySQL 现在会创建一个
'mysql.session'@'localhost'
保留帐户。该帐户由插件在内部使用以访问服务器。它被锁定,因此不能用于客户端连接。(漏洞#25642343)-
这些系统变量现在可用于定义强制角色并使授予的角色能够在客户端连接时自动激活:
mandatory_roles
接受一个值列表角色,服务器应该将其视为自动授予所有用户。activate_all_roles_on_login
当用户登录到服务器时,可以控制所有授予角色的自动激活。
有关详细信息,请参阅使用角色。
-
对于使用
NO PAD
排序规则的 Unicode 数据,改进了多字节和可变长度值的排序:NO PAD
排序规则是基于 UCA 9.0.0 及更高版本的排序规则,例如utf8mb4_0900_ai_ci
orutf8mb4_ja_0900_as_cs
。对于权重字符串较短的键值,性能提升最大;也就是说,权重字符串未填满其整个允许长度的字符串。对于
VARCHAR(10)
使用utf8mb4_0900_ai_ci
排序规则的列,值最多可能占用 160 个字节。该字符串'a'
仅使用可能的 160 个字节中的 2 个字节,并且比'abcdefghij'
. 但'abcdefghij'
Even 只使用了 160 个可能的 20 个字节,并且比一个字符串更稀疏,例如,U+337F SQUARE CORPORATION (㍿) 的十个副本,其权重字符串需要全部可用的 160 个字节。
(漏洞 #25750527,漏洞 #85546)
-
MySQL 现在支持 Unicode 字符集的新排序
utf8mb4_0900_as_ci
规则utf8mb4
。此排序规则区分重音且不区分大小写。它类似于默认utf8mb4
排序规则 (utf8mb4_0900_ai_ci
),只是默认排序规则不区分重音。utf8mb4_ja_0900_as_cs_ks
MySQL 现在还支持用于utf8mb4
Unicode 字符集 的新日语排序规则 。这种排序规则的相似之处utf8mb4_ja_0900_as_cs
在于它区分重音和区分大小写,但utf8mb4_ja_0900_as_cs_ks
也区分假名并将片假名字符与平假名字符区分开来。utf8mb4_ja_0900_as_cs
将片假名和平假名字符视为相同的排序。需要日语排序规则但不区分假名的应用程序可用于utf8mb4_ja_0900_as_cs
获得更好的排序性能。utf8mb4_ja_0900_as_cs
使用三个权重级别进行排序;utf8mb4_ja_0900_as_cs_ks
使用四个。utf8mb4_ja_0900_as_cs_ks
是第一个使用_ks
归类后缀的归类。没有此后缀的日语排序规则不区分假名。有关详细信息,请参阅 Unicode 字符集。
-
对 MySQL 客户端支持进行了这些字符集更改:
这些客户端使用默认字符集
utf8mb4
而不是latin1
:mysql、 mysql_upgrade、 mysqladmin、 mysqlcheck、mysqldump、 mysqlimport、 mysqlpump、mysqlslap、 mysqlshow和 mysqltest。(此更改不影响 mysql、mysqladmin、 mysqlcheck、 mysqlimport执行的字符集自动检测, 和mysqlshow
, 如 连接字符集和排序规则中所述)。使用库创建的客户端连接
libmysqlclient
使用默认字符集utf8mb4
而不是latin1
.mysqltest程序支持显式指定字符集的 选项
--default-character-set
。
性能: 不再禁用 GCC 的严格别名优化,这导致 MySQL 单线程性能略有改进。
Linux: MySQL 现在可以在 Alpine Linux 上编译。(漏洞 #25945568,漏洞 #80322)
Solaris: 在 Solaris 上,服务器构建现在使用
std::atomic
,因此它们必须链接到libstatomic
. (漏洞#25957991)MySQL 现在使用 Visual Studio 2017 进行编译。(缺陷号 25788406)
用于服务器构建的 Boost 库的最低版本现在是 1.64.0。(漏洞 #25772329,漏洞 #85593)
-
这些更改是针对客户端程序开发进行的:
客户端程序应该只需要
#include
头<mysql.h>
文件。特别是<my_config.h>
应该不需要了,就不再安装了。该
my_init()
函数不再包含在从 导出的符号列表中libmysqlclient
。它不需要由客户端程序显式调用,因为它会被其他 C API 初始化函数隐式调用。
(漏洞#25732787)
对于 Xcode IDE,头文件被添加到 MySQL 项目源中,以便可以搜索它们。(缺陷号 25636986)
已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。
新服务可用于使组件能够注册和注销系统变量 (
component_sys_variable_register
,component_sys_variable_unregister
) 以及注册状态变量 (status_variable_registration
)。-
两个新服务可用于使组件和插件能够注册和注销可加载函数: 分别为标量
mysql_service_udf_registration
和mysql_service_udf_registration_aggregate
聚合可加载函数提供注册服务。这些服务使组件和插件能够自行管理可加载函数,而无需使用CREATE FUNCTION
andDROP FUNCTION
语句。使用这些服务注册的可加载函数或
CREATE FUNCTION
列在新的性能模式user_defined_functions
表中。请参阅 user_defined_functions 表。此类可加载函数未在mysql.func
系统表中列出,因此该user_defined_functions
表更适合检查安装了哪些可加载函数。 mysql_string
字符串操作服务已从插件服务转换为组件服务:一组供组件使用的字符串服务 API 。密码验证组件已更新为使用修改后的服务实现。
以前,在某些情况下默认启用操作
LOCAL
功能LOAD DATA
:MySQL 二进制分发版中的客户端库是在启用客户端LOCAL
功能的情况下编译的,并且local_infile
在服务器端启用了系统变量。LOCAL
现在在所有上下文中默认禁用该功能。客户端程序必须显式配置为启用LOCAL
,并且服务器必须在local_infile
启用的情况下运行。请参阅 LOAD DATA LOCAL 的安全注意事项。(漏洞 #24511108)-
mysqld启动行为已修改如下。通常,在不使用mysqld_safe时,这些更改可以使服务器启动更一致或更容易 。
服务器可执行文件在启动时确定自己的完整路径名,并使用其所在目录的父目录作为默认
basedir
值。这反过来又使服务器能够basedir
在搜索与服务器相关的信息(例如share
包含错误消息的目录)时使用它。如果无法将错误日志输出重定向到
--log-error
选项值,则错误输出可能会丢失。现在这种可能性较小。如果服务器使用该
--daemonize
选项启动并且未连接到 tty 设备,--log-error=""
则在没有显式日志记录选项的情况下使用默认错误日志记录选项,将错误输出定向到默认日志文件。以前,在这些情况下可能会发生错误。-D
和-I
选项现在分别是--daemonize
和 的同义词--initialize
。
(缺陷 #20398088,缺陷 #75343)
-
MySQL 现在支持语句语法的
SET PERSIST_ONLY
变体SET
,用于在运行时进行配置更改,这些更改在服务器重新启动时也会持续存在。与 一样SET PERSIST
,SET PERSIST_ONLY
将变量设置写入mysqld-auto.cnf
数据目录中命名的选项文件。但是,与 不同的是PERSIST
,PERSIST_ONLY
不会修改运行时全局系统变量值。这PERSIST_ONLY
适用于配置只能在服务器启动时设置的只读系统变量。有关详细信息,请参阅 使用选项文件和 用于变量分配的 SET 语法。除了 持久化系统变量所需的特权 之外, 使用还
SET PERSIST_ONLY
需要新 的特权。PERSIST_RO_VARIABLES_ADMIN
SYSTEM_VARIABLES_ADMIN
系统
column_stats
表已被删除并被column_statistics
数据字典表取代。-
version
数据字典表已重命名 为dd_properties
.由动态插件创建的表的元数据
INFORMATION_SCHEMA
现在记录在数据字典中并通过INFORMATION_SCHEMA
TABLES
表可见。INFORMATION_SCHEMA
这些表格在:SHOW_STATISTICS
,SHOW_STATISTICS_DYNAMIC
,STATISTICS_BASE
,STATISTICS_DYNAMIC
, 中不再可见TABLES_DYNAMIC
。对用户的影响很小,因为这些表供服务器内部使用。 -
存储引擎现在
InnoDB
使用 MySQL 数据字典,而不是它自己的特定于存储引擎的数据字典。有关数据字典的信息,请参阅 MySQL 数据字典。以下列表简要描述了此更改的主要影响:
-
升级和降级影响:
要从 MySQL 5.7 升级到 MySQL 8.0,您必须执行 升级 MySQL中描述的升级过程。
仅支持使用逻辑降级方法( mysqldump降级)从 MySQL 8.0 降级到 MySQL 5.7。不支持就地降级。
与使用可传输表空间功能导出和导入表空间关联的元数据更新现在在全局数据字典表而不是
InnoDB
数据字典表上执行。InnoDB
内存中的元数据现在从全局数据字典对象实例化。此元数据以前是从InnoDB
系统表中读取的。表示表空间加密和透明页面压缩的表选项现在从全局数据字典中检索。
为
InnoDB
FULLTEXT
索引添加了数据字典支持。辅助索引表名称更改为小写。InnoDB
在 DDL 操作期间创建或修改的元数据现在写入全局数据字典。
-
-
mysql
系统表和数据字典表现在在 MySQL 数据目录中InnoDB
命名的单个表空间文件中创建。mysql.ibd
以前,这些表是在数据库目录中的各个InnoDB
表空间文件中 创建的。mysql
相关的变化包括:InnoDB
存储快速变化的InnoDB
元数据 的数据字典缓冲表已重命名innodb_dynamic_metadata
并从InnoDB
系统表空间移动到数据字典表空间。撤消表空间元数据现在驻留在数据字典表空间中。
临时表空间元数据现在驻留在数据字典表空间中。
-
mysql
在表空间、InnoDB
系统表空间 (innodb_system
) 或通用表空间 中创建的表的表定义 现在包含一个TABLESPACE
属性。此更改具有以下含义:您不能
CREATE TEMPORY TABLE ... LIKE
根据驻留在上述任何表空间中的表的定义来创建空表,因为这些表空间不支持临时表。CREATE TABLE ... LIKE
保留TABLESPACE
原始表的属性并在定义的表空间中创建一个新表,而不管innodb_file_per_table
设置如何。这是暂时的倒退。
有关详细信息和解决方法,请参阅 CREATE TABLE ... LIKE 语句和 CREATE TEMPORARY TABLE 语句。
-
默认情况下,mysql客户端会去除发送到服务器的语句中的注释,并且使用
--skip-comments
(strip comments) 和--comments
(preserve comments) 来控制此行为。评论剥离现已弃用。此功能和控制它的选项将在未来的 MySQL 版本中删除。
系统
explicit_defaults_for_timestamp
变量现在默认启用(以前默认禁用),如果禁用它会出现警告。这意味着现在默认禁用列中 默认值和NULL
-value 处理 的非标准(和弃用)行为。TIMESTAMP
-
已删除对这些已弃用的表和列引用语法结构的支持,现在使用它们会导致错误。应更改这些构造的实例以删除前导句点。
.
col_name
.
tbl_name
.
tbl_name
.col_name
在Using Symbolic Links for MyISAM Tables on Unix 中描述的符号链接支持 以及控制它的
--symbolic-links
选项现已弃用,并将在未来的 MySQL 版本中删除。此外,该选项现在默认处于禁用状态。相关的have_symlink
系统变量也已弃用,将在未来的 MySQL 版本中删除。
-
不兼容的更改: 已进行这些错误记录更改:
如果服务器找不到配置的错误消息文件(使用
lc_messages_dir
和lc_messages
系统变量指定),则服务器会更加宽容。以前,服务器向错误日志写入一条消息以指示问题,然后中止启动过程并退出。现在服务器写了一条消息,但继续启动并默认为内置的英文消息。这适用于服务器写入错误日志并发送给客户端的消息。请参阅 设置错误消息语言。错误日志被重写以使用 MySQL 组件架构。传统的错误日志记录是使用内置组件实现的,而使用系统日志的日志记录是作为可加载组件实现的。此外,还提供可加载的 JSON 格式日志接收器。要控制启用哪些日志组件,请使用
log_error_services
系统变量。有关详细信息,请参阅 错误日志。-
不兼容:要启用记录到系统日志,您必须加载
log_sink_syseventlog
日志组件并将其列在log_error_services
值中(请参阅错误记录到系统日志)。这与 MySQL 5.7 及更早版本不同,后者在 Windows 上默认启用记录到系统日志的功能,并且在所有平台上都不需要加载组件。此配置更改的结果是
log_syslog
以前用于控制记录到系统日志的系统变量已过时,对其值的更改无效。log_syslog
现在已弃用,将在未来的 MySQL 版本中删除。
-
MySQL 现在可以管理表列值的直方图统计信息:
该
ANALYZE TABLE
语句支持用于生成和删除列直方图统计信息的子句UPDATE HISTOGRAM
。DROP HISTOGRAM
服务器将直方图信息存储在
column_statistics
数据字典表中。使用INFORMATION_SCHEMA.COLUMN_STATISTICS
表格可以查看直方图。系统变量控制可用于直方图生成的
histogram_generation_max_mem_size
内存量。Performance Schema 有一个
memory/sql/histograms
用于监视为直方图生成执行的内存分配的工具。mysqldump并且
mysqlpump
可以--column-statistics
选择向输出添加ANALYZE TABLE
语句以在重新加载转储文件时为转储表生成直方图统计信息。
有关详细信息,请参阅ANALYZE TABLE 语句、 优化器统计信息和 INFORMATION_SCHEMA COLUMN_STATISTICS 表。
mysqladmin被添加到 Docker/Minimal 包中,因为 InnoDB Cluster 需要它。(缺陷号 25998285)
对于 Windows,MSI 安装程序包现在包括对所需 Visual Studio 可再发行包的检查,并在缺少时生成一条消息,要求用户安装它。(缺陷号 25658832)
Debian/Ubuntu 软件包现在支持带有 systemd 的多个 MySQL 实例。请参阅使用 systemd 管理 MySQL 服务器。(漏洞 #24559588,漏洞 #82785)
的解析器规则
ALTER TABLE
被重构为与上下文无关,并提高了可维护性和可扩展性。由此产生的影响是不再接受一些以前接受的未记录的语法变体。例如,CREATE TABLE
允许使用由表名或当前数据库和表名限定的列名的ALTER TABLE
语句,某些只允许列名的语句也是如此。这样的语句现在会产生错误。
Performance Schema 表现在
threads
包含一个RESOURCE_GROUP
指示资源组标签的列。-
性能模式现在支持版本控制,并在内部维护其表的当前定义。在启动时,服务器将其支持的性能模式版本与存储在数据字典中的性能模式版本进行比较。如果版本不同,服务器会删除所有旧的性能模式表并使用当前定义重新创建它们。由于此更改:
对于 MySQL 升级,不再需要运行 mysql_upgrade来将更改合并到 Performance Schema 表中,因为它们会在服务器启动时根据需要自动重新创建。
mysql_system_tables.sql
支持脚本不再包含用于创建 Performance Schema 表的 SQL 语句,因为这些表定义是在内部维护的 。
pfs_table_service
为了支持动态 Performance Schema 表操作,现在可以使用 名为的新组件服务。 -
Performance Schema 默认检测设置已更改:
仪器
transaction
和 消费者events_transactions_current
现在events_transactions_history
默认启用。请参阅 性能模式事务表。memory/%
现在默认启用 所有内存工具。请参阅 内存汇总表。元
wait/lock/metadata/sql/mdl
数据锁定工具现在默认启用。请参阅 metadata_locks 表。
-
MySQL Commercial Server 的链接 OpenSSL 库已更新到版本 1.0.2l。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。
此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(缺陷号 26160962)
-
以前,任何用户都可以执行该
XA RECOVER
语句来发现未完成的准备好的 XA 事务的 XID 值,这可能导致启动 XA 事务的用户以外的用户提交或回滚 XA 事务。现在XA RECOVER
只允许拥有新版本的用户使用XA_RECOVER_ADMIN
特权,预计仅授予需要它的管理用户。这可能是这种情况,例如,对于 XA 应用程序的管理员来说,如果它崩溃并且有必要找到应用程序启动的未完成的事务以便它们可以回滚。此特权要求不会影响 XA 事务的正常提交或回滚,因为启动它的用户知道它的 XID。对于 MySQL 升级,mysql_upgrade授予
XA_RECOVER_ADMIN
具有SUPER
权限的用户,除非发现某些帐户已经拥有XA_RECOVER_ADMIN
. (漏洞 #17188129)
-
这些测试几何关系的空间函数的参数适用性检查得到改进:
ST_Contains()
,ST_Crosses()
,ST_Disjoint()
,ST_Equals()
,ST_Intersects()
,ST_Overlaps()
,ST_Touches()
,ST_Within()
,MBRContains()
,MBRCoveredBy()
,MBRCovers()
,MBRDisjoint()
,MBREquals()
,MBRIntersects()
,MBROverlaps()
,MBRTouches()
,MBRWithin()
。有关详细信息,请参阅 使用对象形状的空间关系函数和 使用最小边界矩形的空间关系函数。由于这项工作,空间关系函数的性能在两个参数都包含一维几何的情况下得到了改进;也就是说,传递给空间关系函数的
GeometryCollection
参数(或一种GeometryCollection
和另一种几何类型)可以简化为MultiPoint
、MultiLineString
或MultiPolygon
。GeometryCollection
在那些情况下,可以避免更复杂的将军。(缺陷 #22285402,缺陷 #79406)
-
mysql-test-run.pl 的
--do-test-list
选项 接受一个包含每行一个测试的文件的参数。文件中的行现在接受以下任何格式:test_name test_name.test suite_name.test_name suite_name.test_name.test path/to/test/file
(漏洞 #25700362)
mysql-test-run.pl和 mysqltest现在对允许的测试用例和结果文件名有更多限制。名称必须仅包含字母数字字符 (
A-Z
,a-z
,0-9
)、破折号 (-
) 或下划线 (_
),并且不能以破折号或下划线开头。不一致的文件名会出错。(漏洞#25487471)-
对mysql-test-run.pl
--xml-report
的 选项进行 了这些更改:<failure>
标签标识在重试尝试时失败的任何测试 。跳过和禁用的测试包含单独的统计信息和字段。
如果没有为源外构建提供绝对路径,则在构建目录中创建 XML 报告。
对于组合运行,名为的字段
variation
包含在<testcase>
标记中。属于一个套件的所有测试的结果都聚集在一个
<testsuite>
标签中。有关失败的信息在名为 的属性中报告,并附有简要原因
message
,以及标记中的其他详细信息。
(缺陷号 25349924)
-
mysql-test-run.pl现在支持
--report-unstable-tests
具有以下效果的选项:在摘要 中称为“不稳定测试” 的单独类别中使用至少一次重试尝试报告已通过的任何测试。
如果所有失败都是由于不稳定的测试造成的, mysql-test-run.pl会产生警告但会成功退出。
--xml-report
如果还指定 了该选项,则添加一个新的 XML 标记来报告不稳定的测试 。
(错误#24473420,错误#25984429)
mysqltest现在支持一个
replace_numeric_round
命令,该命令采用从 0 到 16 的参数值,指示将数值四舍五入到的小数位数。这可用于帮助防止测试的结果内容不匹配错误,在这些测试中,由于精度差异而跨平台获得的结果略有不同。感谢 Daniel Black 提供的补丁。(缺陷 #23280117,缺陷 #81399)mysql-test-run.pl现在寻找一个
文件,该文件类似于该testname
-client.opt
文件,但用于指定特定于测试的客户端选项。(漏洞 #17084918)testname
-master.opt
X 插件现在可以正确处理过期的 SSL 证书。(缺陷号 25835833)
GROUP BY
和 等子句的输出HAVING
已通过将grouping_criteria
表达式移动到派生查询得到改进。(错误#25549637,错误#24497007)在安装 X 插件期间,防火墙白名单中生成了一条空白规则。(缺陷号 24488234)
-
不相容的变化;InnoDB:
ADD PARTITION
、DROP PARTITION
、COALESCE PARTITION
、REORGANIZE PARTITION
和REBUILD PARTITION
ALTER TABLE
选项现在由本机分区就地 API 支持,并且可以与ALGORITHM={COPY|INPLACE}
和LOCK
子句一起使用。EXCHANGE PARTITION
,以前支持ALGORITHM
和LOCK
子句,由新的服务器层 API 执行,以与 MySQL 数据字典兼容。分区和表交换由本机分区处理程序在内部执行。DROP PARTITION
withALGORITHM=INPLACE
删除存储在分区中的数据并删除分区。但是,DROP PARTITION
使用ALGORITHM=COPY
或old_alter_table=ON
重建分区表并尝试将数据从删除的分区移动到具有兼容PARTITION ... VALUES
定义的另一个分区。无法移动到另一个分区的数据将被删除。 -
InnoDB:
InnoDB
现在在恢复期间使用表空间映射文件来识别需要重做日志应用程序的表空间。这是对以前使用的重做日志表空间发现的更改。如果表空间映射文件丢失或损坏,
innodb_scan_directories
启动选项可用于在服务器中断后启动 MySQL 时指定表空间目录。有关详细信息,请参阅 崩溃恢复期间的表空间发现。(漏洞#24793413)
InnoDB: 在以前的版本中,or
InnoDB
存储ROW_FORMAT
和KEY_BLOCK_SIZE
属性, 即使在创建或更改表时这些属性被静默忽略。在这种情况下,所报告的列 显示指定的属性 而不是表的实际属性。现在存储和报告表的实际和 属性。CREATE TABLE
ALTER TABLE
SHOW CREATE TABLE
Create_options
SHOW TABLE STATUS
ROW_FORMAT
KEY_BLOCK_SIZE
InnoDB
ROW_FORMAT
KEY_BLOCK_SIZE
复制: 在以前的版本中,发布
STOP GROUP_REPLICATION
停止了插件,但服务器仍然接受事务。这意味着交易没有传输到集团。为了STOP GROUP_REPLICATION
更安全,nowsuper_read_only
设置为ON
immediately upon issuedSTOP GROUP_REPLICATION
,确保不接受任何交易。(缺陷 #25495067,缺陷 #84795)复制: 当存在网络分区并且某个成员占少数时,对该成员的所有查询都会被阻止。为了改善这种情况,
group_replication_unreachable_majority_timeout
添加了变量,使您可以配置少数成员在离开组之前等待与多数成员重新联系的时间。(漏洞#25473794)复制:添加 该
group_replication_transaction_size_limit
变量是为了使您能够保护组免受导致故障的大型事务的影响。(缺陷 #84785,缺陷 #25510757)Replication:删除了对 MySQL 5.0 之前版本创建的二进制日志文件的支持,slaves 或mysqlbinlog 不再支持二进制日志版本 1 和版本 3 格式 。
Replication: 和
replication_group_members
Performancereplication_group_member_stats
Schema 表已扩展,可为 Group Replication 提供更多监控信息。该replication_group_members
表现在包含有关成员角色的信息,以及在成员上运行的 MySQL 版本。该replication_group_member_stats
表现在包含有关组中所有成员、应用程序和本地队列以及回滚事务的信息。复制: 接收线程已得到改进,在等待磁盘空间时不再阻塞其他线程的活动。这改进了对复制的监视,确保它在接收线程等待磁盘空间时正确报告。如果您无法释放磁盘空间以允许接收线程继续其活动,则在大多数情况下可以强制停止它而不会产生副作用。
复制: 添加了一个新的事务长度字段,
Gtid_log_event
以字节为单位存储事务长度。-
复制: 以下变量的默认值已更改,以确保复制在默认情况下尽可能稳健和高效:
master_info_repository=TABLE
并relay_log_info_repository=TABLE
确保复制存储库信息存储在 InnoDB 表中,使复制对意外停止具有弹性。transaction_write_set_extraction=XXHASH64
启用生成写入集哈希的最佳方法。slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN'
当表不存在主键或主键等效项(非空唯一二级索引)时,启用哈希表以避免重复表扫描expire_logs_days=30
导致超过 30 天的未使用二进制日志被清除,确保存储空间得到有效利用。
复制: Group Replication 插件现在通知服务器中的其他组件一些相关事件已经发生。在视图更改、恢复状态更新、网络分区和主要选举时,插件会通知在服务注册表中注册的侦听器并通知他们事件已经发生。这些侦听器,甚至可以是其他插件,然后可以对这些事件做出反应。
复制:
group_replication_member_weight
添加了变量,使您能够在单主模式下控制新主节点的选举 。 在以前的版本中,主要选举是基于成员的 UUID,在发生故障转移时,最低的 UUID 被选为新的主要成员。使用此变量为成员分配数字权重以确保选出特定成员,例如在主节点的计划维护期间或确保优先考虑某些硬件。-
复制: 添加了以下新系统变量来配置组复制:
这些变量使您能够微调单个组成员的流量控制,根据成员在组中执行的任务调整配额。
-
JSON: 添加了对用于许多 MySQL JSON 函数的 XPath 表达式范围的支持,包括
JSON_EXTRACT()
和JSON_REMOVE()
。此类范围使用语法 指定 ,其中 和 分别是 JSON 数组中元素范围的第一个和最后一个索引(编号始终从 0 开始)。例如,包括第二个、第三个和第四个元素,如下所示:start
toend
start
end
$[1 to 3]
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]'); +----------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') | +----------------------------------------------+ | [2, 3, 4] | +----------------------------------------------+ 1 row in set (0.00 sec)
这项工作还为关键字的此类表达式提供了支持
last
,您可以使用它来表示当前数组中最后一个(最右边)元素的索引,如下所示:mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]'); +--------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]') | +--------------------------------------------+ | 5 | +--------------------------------------------+ 1 row in set (0.00 sec)
还支持相对于数组末尾的索引,如下所示:
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]'); +--------------------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]') | +--------------------------------------------------------+ | [1, 2, 3] | +--------------------------------------------------------+ 1 row in set (0.00 sec)
有关更多信息和示例,请参阅 搜索和修改 JSON 值。(缺陷 #79052,缺陷 #22285926)
-
JSON:
JSON_SET()
优化器现在支持在使用、JSON_REPLACE()
或 时对 JSON 文档进行部分(就地)更新JSON_REMOVE()
。(以前,所有JSON
列值的更新都是通过完全删除以前的文档并在其位置写入新文档来完成的。)一般来说,当替换值的大小小于或等于列的原始值时,可以执行此优化,并且没有新元素添加到原始值。不能对表单的 列值进行简单的替换。UPDATE
tbl
SETjson_col
=json_val
JSON 数据类型提供了有关以这种方式优化更新的要求的更多信息。
这项工作包括 在 MySQL 服务器中添加两个 JSON 实用函数,
JSON_STORAGE_SIZE()
和 。返回用于存储 JSON 文档的二进制表示的字节数,无论该文档是作为表中的列值、用户变量的值还是 JSON 文字呈现。在列的情况下,这是用于存储 JSON 文档的空间,因为它被插入到列中,在从那时起可能对其执行的任何部分更新之前。JSON_STORAGE_FREE()
JSON_STORAGE_SIZE()
JSON
JSON_STORAGE_FREE()
显示由列的最近部分更新释放的 JSON 列值的二进制表示中的字节数。对于存储 JSON 文档的用户变量,JSON_STORAGE_FREE()
始终返回 0;如果参数是 JSON 文字,它也会返回 0。这些函数中的每一个,就像许多其他作用于 JSON 值的 MySQL 函数一样,也接受一个可以成功解析为 JSON 文档的字符串。有关更多信息和示例,请参阅JSON 实用程序函数。
RPM
.spec
文件现在包括对运行单元测试的支持。(漏洞 #25814143,漏洞 #85743)mysql客户端现在支持
--binary-as-hex
使用十六进制表示法 ( ) 显示二进制数据 的选项。感谢 Daniël van Eeden 提供补丁。(漏洞 #25340722,漏洞 #84391)0x
value
该
SHOW TABLES
语句现在支持一个可选EXTENDED
关键字,该关键字使语句输出列出由失败ALTER TABLE
语句创建的隐藏表。(这些临时表的名称以 . 开头#sql
。)有关详细信息,请参阅 SHOW TABLES 语句。(漏洞 #24786075,漏洞 #83241)序列化字典信息 (SDI) 文件现在具有小写扩展名 (
.sdi
) 而不是大写。-
TempTable
存储引擎取代MEMORY
存储引擎成为内存内部临时表的默认引擎 。TempTable
存储引擎为VARCHAR
和 列 提供高效存储VARBINARY
。会话变量定义内存内部临时表的internal_tmp_mem_storage_engine
存储引擎。允许的值为TempTable
(默认值)和MEMORY
. 配置选项定义存储引擎在开始将数据存储到磁盘之前temptable_max_ram
可以占用的最大内存量。TempTable
默认值为 1073741824 字节 (1GiB)。和Performance Schema 工具可用于监视 内存分配
memory/temptable/physical_ram
和 磁盘存储。memory/temptable/physical_disk
TempTable
-
MySQL 8.0.2 版本引入了一些与撤消相关的更改:
现在可以使用
innodb_undo_tablespaces
配置选项在运行时或重新启动服务器时修改撤消表空间的数量。之前,undo表空间的数量只能在初始化MySQL实例时配置,之后无法更改。此更改允许在数据库增长时添加撤消表空间和回滚段。innodb_undo_log_truncate
默认情况下启用。启用后,任何超过由定义的阈值的撤消表空间都innodb_max_undo_log_size
被标记为截断。请参阅 截断撤消表空间。-
innodb_undo_tablespaces
默认值从 0 更改为 2,这意味着回滚段默认在两个单独的撤消表空间而不是 系统InnoDB
表空间中创建。至少需要两个撤消表空间才能允许截断撤消日志。设置
innodb_undo_tablespaces
为 0 已弃用,未来的 MySQL 版本将不支持。 用于撤消表空间文件的命名约定从更改 为 ,其中是撤消空间编号。
undo
NNN
undo_
NNN
NNN
配置选项定义每个撤消表空间的
innodb_rollback_segments
回滚段数。以前,innodb_rollback_segments
是一个全局设置,用于指定 MySQL 实例的回滚段总数。此更改增加了可用于并发事务的回滚段数。更多的回滚段增加了并发事务为撤消日志使用单独的回滚段的可能性,从而减少了资源争用。配置选项已
innodb_undo_logs
删除。配置选项执行相同的innodb_rollback_segments
功能,应该改为使用。Innodb_available_undo_logs
状态变量被删除 。每个表空间的可用回滚段数可以使用SHOW VARIABLES LIKE 'innodb_rollback_segments';
SHOW COLUMNS
andSHOW INDEX
语句现在支持一个可选关键字, 该EXTENDED
关键字使语句输出包含有关 MySQL 内部使用且用户无法访问的隐藏列和索引的信息。有关详细信息,请参阅SHOW COLUMNS 语句和SHOW INDEX 语句。
-
Incompatible Change: Group Replication 和 X Plugin 等插件现在使用
mysql.session
这个版本添加的帐户。如果您从不包含mysql.session
帐户的先前版本升级,则必须运行mysql_upgrade以确保创建帐户。如果mysql_upgrade未运行,插件将无法启动,并显示错误消息There was an error when try to access the server with user: mysql.session@localhost。确保用户存在于服务器中并且 mysql_upgrade 在服务器更新后运行。mysqlxsys
不再创建以前使用过的用户,例如 (缺陷号 26042764)参考资料:另请参阅:Bug #24311527、Bug #25642343、Bug #25750822、Bug #25103980、Bug #83841。
InnoDB: 查询运行在 设置
INFORMATION_SCHEMA.TABLES
执行得更慢。(缺陷号 26197113)information_schema_stats
latest
InnoDB:
ALTER TABLE ... ADD PARTITION
指定 的DATA DIRECTORY
未能忽略TABLESPACE
表的属性。(漏洞#26113652)InnoDB:禁用 时
foreign_key_checks
,可以在父表之前创建具有外键约束的子表,这可能导致外键约束失败,因为父表不知道该约束。创建表时,现在会调用加载表的外键约束并检查子表。(漏洞 #25976199)InnoDB: 优化带有全文索引的表时发生解析错误。(缺陷号 25914332)
InnoDB: 使用 Microsoft Visual C++ 2015 或 macOS 10.12.4 使用 GCC 4.2.1 或 Apple LLVM 版本 8.0.0 (clang-800.0.38) 在 Windows 上编译 MySQL 返回警告。(缺陷号 25910531)
InnoDB: 在调试版本中,当系统表空间文件 (
ibdata1
) 在创建双写页面期间空间不足时,在引导期间引发断言。(漏洞#25872368)InnoDB:
InnoDB
尝试将自动递增计数器值保存到磁盘 时,不正确的锁定顺序导致死锁 (缺陷号 25833228)-
InnoDB: 访问字典表对象数据的内部方法没有考虑虚拟列。(漏洞#25822154)
参考资料:此问题是 Bug #23748128 的回归。
InnoDB: 虚拟索引记录中虚拟列字段的长度小于预期的模板列长度。(缺陷号 25793677)
InnoDB: 在调试版本中,关闭服务器并
--innodb-fast-shutdown=0
引发断言。(缺陷号 25756224)InnoDB: ibd2sdi实用程序在不受支持的文件类型上运行时退出。(漏洞#25738491)
InnoDB:
InnoDB
打开分区表时没有设置压缩算法。(缺陷号 25685868)InnoDB: 就地
ALTER TABLE
操作未能设置加密类型,导致FLUSH TABLES ... FOR EXPORT
操作断言。(漏洞#25672779)InnoDB: 注册文件关闭时持有的闩锁导致挂起情况。(漏洞#25658467)
InnoDB:
innodb_force_recovery
在恢复期间,如果设置大于 0 ,准备好的事务将被回滚InnoDB:
CREATE TABLE
如果未定义主键,则在 NOT NULL 字段上定义具有八个字符前缀的唯一键 的TEXT
将引发断言。(漏洞#25647413)InnoDB: 对数据字典表的更新与
InnoDB
对全文搜索辅助表的系统表的更新相结合引发了与锁相关的断言。(漏洞 #25610353)InnoDB: 服务器为重建表的操作分配了不必要的内存。(漏洞 #25573565,漏洞 #85043)
-
InnoDB: 旨在模拟不存在页面上的随机读取的测试相关代码引发了无效断言。(缺陷号 25479538)
参考资料:此问题是 Bug #25053705 的回归。
InnoDB: 当对引用不存在的外键的表执行操作时,
foreign_key_checks
禁用、InnoDB
(漏洞 #25365223)InnoDB: 在
TRUNCATE TABLE
对 file-per-table 表空间进行操作期间,在从缓冲池中驱逐脏页之前释放了字典操作锁,导致闩锁顺序冲突。(漏洞#25357789)InnoDB: 或
DROP TABLE
操作TRUNCATE TABLE
可能会在在线操作失败后引发断言ALTER TABLE .. ADD INDEX
。索引根页面被过早删除。(漏洞#25357789)InnoDB: 当使用索引合并优化器开关时,
SELECT COUNT(*)
操作有时会返回 0。分区代码错误地执行了memcpy
索引读取的列的复制,而不是列复制,导致复制了错误的记录。(漏洞 #25332330,漏洞 #81031)InnoDB: 在将
RENAME TABLE
表移动到不同模式的操作InnoDB
在重新启动时返回错误,指示它无法找到表空间数据文件。InnoDB
操作期间未能更新INNODB_SYS_DATAFILES
数据字典表RENAME TABLE
。(漏洞 #25189192,漏洞 #84038)InnoDB: 在
ALTER TABLE
重建包含虚拟列的表的操作期间,InnoDB
无法应用并发插入日志记录。(漏洞#24961167)InnoDB: 由于虚拟列验证问题,无法
InnoDB
为就地操作应用并发删除日志ALTER TABLE
(缺陷号 24960450)分区: 执行
ALTER TABLE ... OPTIMIZE PARTITION
语句后,表使用的表空间名称未保留,随后对该表的访问最终导致服务器失败。(漏洞 #25512556)复制: 复制带有索引的分区表时,在
HASH_SCAN
指定为slave_rows_search_algorithms
设置一部分的复制从站上,从站 I/O 线程有时会因错误而停止HA_ERR_KEY_NOT_FOUND
。(缺陷号 26137159)复制:
USE
声明后面的 声明SET GTID_NEXT
有时没有效果。(缺陷号 26128931)复制: 当命令FLUSH LOGS或PURGE LOGS BEFORE用于设置了到期时间的二进制日志文件并且二进制日志文件正在使用中时,会发出误导性警告。该警告与正在使用的文件有关,并暗示已发生清除尝试,即使尚未达到到期时间。现在,MySQL首先检查二进制日志文件的过期时间,然后才检查该文件是否在使用中。因此,警告仅针对使用中的二进制日志文件发出,该文件已经足够旧,可以被清除。(缺陷号 25973525)
-
复制: 组现在可以包含运行不同服务器版本的成员,使您能够在线升级复制组。将不同版本的组中的成员合并的规则是:
如果您的群组有 8.0 位成员,则无法添加 5.7 位成员
如果您的群组有 5.7 位成员,您可以添加 8.0 位成员,但它仍处于只读模式。当该组包含多个服务器版本时,写入该成员是危险的,应该避免。
在single-primary group中,如果当前primary离开group,需要选举新的primary,则primary首先从低版本的成员中选出。如果没有找到较低版本的成员,则从较新版本的成员中选择主要成员。(缺陷号 25876807)
Replication: 在
binlog_checksum=NONE
MySQL服务器启动后设置,然后启动Group Replication,如果出现错误,服务器保持RECOVERING
状态,无法关闭。(漏洞 #25793366,漏洞 #85667)-
复制: 既然 XA 事务是分两部分准备和提交的,那么基于语句的复制的问题已经确定。如果在主服务器上提交的两个 XA 事务正在以相反的顺序在从服务器上准备,则可能会发生无法安全解析的锁定依赖关系。基于行的复制不存在此问题。
因此,XA 事务现在被认为对于基于语句的复制是不安全的。
当 时
binlog_format = STATEMENT
,对 XA 事务内的 DML 语句发出警告,并且复制可能会因从站死锁而失败。当 时
binlog_format = MIXED
,使用基于行的复制记录 XA 事务中的 DML 语句。当 时
binlog_format = ROW
,XA 事务内的 DML 语句会像以前一样被记录下来。
(漏洞 #25786490,漏洞 #85639)
-
复制: 当性能模式被禁用时,以下性能模式复制表现在继续被填充:
replication_connection_status
例外是复制表、replication_applier_status_by_coordinator
和 中的本地计时信息(事务的开始和结束时间戳)replication_applier_status_by_worker
。禁用性能模式时不会收集此信息。(缺陷号 25694813) -
复制: 在组复制设置中,在不同复制组的成员之间实现了循环异步复制,视图更改日志事件在组之间重复复制,每次都有新生成的 GTID。该修复确保视图更改日志事件在它们发生的命名复制组之外被忽略,并且永远不会生成新的 GTID。(漏洞#25674926)
参考资料:另请参阅:Bug #26049695、Bug #25928854、Bug #25721175。
复制: 从 RPM 安装后首次启动 MySQL 服务器时,默认情况下会激活密码验证插件(仅适用于 RPM 安装)。如果此时已经启用了二进制日志记录,则激活会被记录下来,即使插件激活不应记录在二进制日志中。(漏洞#25672750)
复制: 用于执行 XA 事务 的
XA START
、XA END
、XA COMMIT
和命名相关数据库的过滤器的计数器。这些语句的计数器不再递增。(缺陷号 25669344)XA ROLLBACK
replicate-do-db
-
复制: 在单主组复制与异步复制相结合的设置中,例如,S1 和 S2 组成一个组,S2 和 S3 充当主从,辅助节点(例如 S2)正在接受事务,然后这些可以进入团体。该修复可防止辅助节点在属于单一主组时创建异步复制通道,并且在运行异步复制时无法启动组复制。(漏洞 #25574200,漏洞 #85047)
参考资料:另请参阅:Bug #86325、Bug #26078602。
复制:
super_read_only
如果启用了系统变量, 则组复制无法启动 (漏洞 #25481287,漏洞 #84733)复制: MySQL 8.0 服务器无法加入包含 MySQL 5.7 服务器的复制组,并且复制组中的 MySQL 5.7 服务器无法升级到 MySQL 8.0。(漏洞#25477979)
复制: 如果成员未能加入组,则该成员不会停止并继续接受事务。为避免这种情况,请将您的成员设置
super_read_only=1
在my.cfg
文件中。Group Replication 现在会在成功启动并设置时检查此设置super_read_only=0
。这确保没有成功加入组的成员不能接受交易。(错误#25474736,错误#84728)复制: 当MySQL 5.7 服务器的 mysqlbinlog
original_commit_timestamp
输出应用于 MySQL 8.0 服务器时,MySQL 8.0 服务器为. 该修复确保 的值original_commit_timestamp
正确设置为 0,这意味着时间戳未知。(缺陷号 25316086)复制: 如果服务器是使用该
--log-bin
选项启动的,则发现一个具有无效结构的性能模式表会导致所有随后检查的性能模式表也被标记为无效。(漏洞 #25041396)复制: 当事务隔离级别设置为 时,交错事务有时可能会使从属应用程序死锁
REPEATABLE-READ
。(缺陷号 25040331)复制: 系统
slave_skip_errors
变量不允许大于 3000 的错误数。感谢 Tsubasa Tanaka 提供的补丁。(错误#24748639,错误#83184)Replication:
ER_TRANSACTION_ROLLBACK_DURING_COMMIT
was 的 SQL 状态,HY00
是通用的,不适合回滚。SQL 状态已修改为 40000。(错误号 24658431)复制: mysqlbinlog,如果使用该选项调用,则
--raw
在进程终止之前不会刷新输出文件。但是,如果还使用该选项调用,则--stop-never
该过程永远不会终止,因此不会将任何内容写入输出文件。现在输出在每个事件后刷新。(漏洞 #24609402)复制:修复了mysqlbinlog中 的内存泄漏泄漏发生在处理伪造的轮换事件时,或者使用时
--raw
无法创建目标日志文件。泄漏仅在处理来自远程服务器的事件时发生。感谢 Laurynas Biveinis 为修复此错误所做的贡献。(漏洞 #24323288,漏洞 #82283)-
复制: 如果没有
root
帐户,组复制插件的加载和初始化失败。(漏洞 #24311527)参考资料:另请参阅:Bug #25750822、Bug #25103980、Bug #83841。
-
复制:当 时, 从服务器可能会丢失尚未应用的事件
MASTER_AUTO_POSITION=0
,两个复制线程都已停止,并且使用更改了应用程序延迟 。(漏洞 #23203678,漏洞 #81232)CHANGE MASTER TO MASTER_DELAY=
N
参考资料:另请参阅:Bug #25340185、Bug #84375。
复制: 大型 GCS 消息的传输可能需要很长时间,发送者似乎已经死亡。(漏洞#22671846)
-
复制:
slave_pending_jobs_size_max
如果多线程从站需要处理大于该大小的事务,则 不能使用较小的队列大小进行配置 任何大于的数据包slave_pending_jobs_size_max
都被拒绝并出现错误 ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX,即使数据包小于 设置的限制slave_max_allowed_packet
。通过此修复,
slave_pending_jobs_size_max
成为软限制而不是硬限制。如果一个数据包的大小超过slave_pending_jobs_size_max
但小于slave_max_allowed_packet
,则事务会被暂停,直到所有slave worker的队列都为空,然后再处理。所有后续交易都将暂停,直到大笔交易完成。因此,可以限制从属工作者的队列大小,同时仍然允许偶尔进行较大的事务。(缺陷 #21280753,缺陷 #77406) -
复制: 中断复制的事件没有写入具有 GTID 的二进制日志,因此无法使用 跳过该事件。相反,有必要直接设置中继日志文件和中继日志位置;这意味着,当启用自动定位时,必须首先禁用它,然后设置中继日志文件和位置,最后重新启用自动定位。
SET gtid_next=
value
现在在这种情况下,MySQL 将事件事件写入语句缓存,以便在刷新之前为它生成并写入一个 GTID,并且从属应用程序可以处理更改。然后用户可以使用 SQL 语句跳过事件 ,后跟和 。(漏洞#19594845)
SET gtid_next=
value
BEGIN
COMMIT
复制:在使用组复制的服务器重启后 发出
SHOW SLAVE STATUS FOR CHANNEL 'group_replication_recovery'
导致意外关闭。(缺陷 #85739,缺陷 #25813258)复制:
CHANGE REPLICATION FILTER
使用UBSan 运行测试时 使用引起的问题设置空过滤规则(缺陷 #85405,缺陷 #25702297)复制: 当接收线程在排队事件时持有中继日志上的锁时,客户端正在执行
SHOW SLAVE STATUS
或被SHOW RELAYLOG EVENTS
阻止。(漏洞 #85084,漏洞 #25584734)复制: 性能模式表的索引
replication_applier_status_by_worker
仅适用于单线程复制。这是因为索引完全依赖于 SQL 线程 ID,而不管是否存在任何 worker。现在在这种情况下,当在从站上启用多线程时,索引还会考虑工作线程 ID。(漏洞 #84646,漏洞 #25444610)复制: 在某些情况下,master 可以向二进制日志写入一个
last_committed
比它应该的值小的值。这可能会导致从服务器在不应该的并行事务中执行,从而导致不一致或其他错误。(缺陷 #84471,缺陷 #25379659)复制: 使用时
group_replication_ip_whitelist=AUTOMATIC
,自动允许私有网络中的 IP,但未正确允许某些 C 类 IP 地址。(缺陷 #84329,缺陷 #25503458)复制: 当一个现有的 GTID_NEXT 事务被服务器分配了一个冲突的 GTID 时,Group Replication 在检测到两个具有相同 GTID 的事务时生成一个断言。这是因为组复制在冲突检测后生成 GTID,这比主/从复制晚。该修复放宽了一些条件,仅在提交完成时调用,并且添加了一条消息以在 GTID 已被使用时提醒您。(漏洞 #84153,漏洞 #25232042)
复制:
ER_INCONSISTENT_ERROR
当预期错误号与实际错误号之间存在差异时, 复制应用程序线程返回错误 3002 现在可以通过将 3002 与slave_skip_errors
. (缺陷 #83186,缺陷 #24753281)-
复制:当使用mysqldump的转储加载数据 时,MySQL 在重启后丢失了它的 GTID 位置
为了避免出现此问题,该
mysql.gtid_executed
表现在自动从 . 制作的转储中排除mysqldump
。(漏洞 #82848,漏洞 #24590891)参考资料:另请参阅:Bug #87455、Bug #26643180。
复制:
binlog_format
当有打开的临时表时, 可以设置 (漏洞 #82467,漏洞 #24411680)-
复制: 多源复制中一个通道的中继日志损坏导致服务器重启期间无法初始化良好的通道。此外,当使用 运行时
--skip-slave-start=false
,服务器也无法为那些状况良好的通道启动从属线程,尽管事实上它应该为所有良好通道启动从属线程。现在,不管其他通道上的任何错误,服务器都会尝试创建和初始化状态良好的通道,并在
--skip-slave-start
禁用时为良好通道启动从属线程。作为此修复的一部分,START SLAVE
旨在STOP SLAVE
在所有通道上运行的 和 也进行了修改,以便它们继续在所有良好通道上执行,即使它们在其中发现不良通道也是如此。(漏洞 #82209,漏洞 #24285104) 复制: SQL 线程无法通过 GTID 跳过部分事务。(漏洞 #81119,漏洞 #25800025)
-
复制: 可以
FLUSH LOGS
将 aRotate_log_event
写入未初始化的日志文件。(错误#80368,错误#22732184)参考资料:另请参阅:Bug #23531998、Bug #81734。
Microsoft Windows: 在 Windows 上,
Docs/INFO_SRC
文件缺少build-date
条目。(缺陷号 25799855)-
JSON:
NULLIF()
如果在 JSON 上下文中使用此函数的结果,则在调试构建中失败并出现断言错误。现在可以将此结果安全地用作 JSON 值。此修复包括使用
DBUG_ASSERT()
来处理此错误而不是DBUG_ABORT()
,这会在某些平台上导致调试问题。(漏洞#25818544)参考资料:另请参阅:Bug #21383497、Bug #21383530。
JSON: 内部
Json_array
现在使用 astd::vector
而不是 aPrealloced_array
来存储其元素,这减少了它们所需的堆空间量。(错误#85877,错误#25867454)当一个字符串比较操作数的字符集是另一个操作数的字符集的超集时,一些比较被禁止,而这些比较应该通过将具有“较小”字符集的操作数转换为“较大”字符集来允许。
utf8mb4
并且utf32
被认为是任何其他编码的超集。(错误#27897053、错误#25642319、错误#85224)RPM 包中的
mysqld_pre_systemd
脚本在选项文件中找到错误日志设置,如果指定为log-error
但不是 aslog_error
,尽管两者都是允许的。(错误#26148391,错误#86466)ALTER TABLE ... ADD PARTITION
语句可能导致服务器退出。(漏洞#26132947)SET PERSIST
不适用于 X 插件系统变量。(漏洞 #26115672)REFERENCES
在某些情况下,特权检查可能会使用不正确的数据库。(漏洞 #26106655)由于
gtid_mode
未在选项文件或命令行中设置系统变量.cnf
,服务器无法在使用SET PERSIST
或SET GLOBAL
设置gtid_mode
为ON_PERMISSIVE
. (缺陷号 26085712)在准备好的语句执行期间,可能会读取过多的缓冲区字节。(缺陷 #26042934,缺陷 #85937)
--initialize
使用该选项 启动服务器时未加载动态权限。(漏洞 #26005645)Linux: MySQL 8.0 的通用 Linux 构建现在支持其主机系统上的非统一内存访问 (NUMA)。使用构建的系统需要
libnuma
安装在它们上面。有关详细信息,请参阅 使用通用二进制文件在 Unix/Linux 上安装 MySQL。(漏洞 #26005558)Debian 客户端包缺少有关与 akonadi-backend-mysql 包冲突的信息。(漏洞 #26002288)
mysqldump
USE
可能会在语句中错误地写入数据库名称 (缺陷号 25998635)如果
mysql_stmt_close()
调用 C API 函数,它会释放内存,以后可以在调用mysql_stmt_error()
、mysql_stmt_errno()
或mysql_stmt_sqlstate()
时访问这些内存。要在调用 之后获取错误信息mysql_stmt_close()
,请调用mysql_error()
、mysql_errno()
或mysql_sqlstate()
。(缺陷号 25988681)由于表名超过 64 个字符的长度限制,因此在创建数据字典期间从 MySQL 5.7 升级到 MySQL 8.0 失败。(缺陷 #25973237,缺陷 #86120)
InnoDB
在这些情况 下,查询可能会被错误地缓存,从而导致不正确的查询结果:正在插入但尚未提交的行;查询使用该表作为派生表中的基表;优化器选择具体化派生表。(漏洞 #25943038,漏洞 #86047)如果在启用 AddressSanitizer 的情况下编译并使用
--basedir=
(即,使用空选项值)调用,则mysqld行为不正常。(错误#25914296,错误#85994)、
ST_LatFromGeohash()
和 函数不允许来自 列ST_LongFromGeohash()
的 数据。(缺陷 #25912557,缺陷 #85981)ST_PointFromGeohash()
CHAR
尝试从具有多个数据文件的表空间中删除数据文件返回了重复文件名错误。(缺陷号 25858461)
在数据字典客户端方法声明中添加了一个属性,以便在忽略返回值时生成编译警告。(缺陷号 25840927)
简化了数据字典类层次结构。(漏洞 #25835968,漏洞 #85811)
Dictionary_client::update
删除了阻止对同一对象调用两次 数据字典对象更新函数 ( ) 的限制。(缺陷 #25833932,缺陷 #85800)在 Ubuntu 平台上,如果运行脚本的用户没有访问数据目录或 PID 文件的权限,则 MySQL 服务脚本不会正确终止。(漏洞 #25825833)
该字段上的字符串比较查询
INFORMATION_SCHEMA.CHARACTER_SETS.DESCRIPTION
区分大小写,这是对早期版本的回归。(漏洞 #25824297)Debian/Ubuntu 软件包中缺少一些实用程序的手册页。(漏洞#25811814)
在模式下执行的
INFORMATION_SCHEMA
视图LOCK TABLES
,使用SERIALIZABLE
隔离级别并autocommit
禁用,无法使用非锁定读取,这可能会阻止 DDL 操作或导致死锁。(漏洞#25811413)如果表被触发器使用,而另一个数据库中存在同名触发器并且数据库名称仅在字母大小写上不同,则可能会发生表锁定失败。(缺陷号 25807393)
.TRG
如果文件缺少created
触发器定义行, 就地 MySQL 升级将失败。(从 MySQL 5.7 升级到 MySQL 8.0 不太可能出现此问题,因为该created
行存在于 MySQL 5.7.2 及更高版本。)(错误 #25805260,错误 #85704)field-t
单元测试无法在启用 AddressSanitizer 的情况下运行 。感谢 Laurynas Biveinis 提供补丁。(漏洞 #25803823,漏洞 #85678)Debian 客户端包缺少有关与本机包冲突的信息。(漏洞#25799475)
表的
CREATE_OPTIONS
列INFORMATION_SCHEMA.TABLES
被视为具有binary
排序规则,因此功能如UPPER()
和LOWER()
没有预期的结果。(漏洞#25793429)导入包含
DECIMAL
列的表后,访问该表会引发断言。(漏洞#25792649)ALTER TABLE
utf8mb4
由于不正确的列长度计算,当默认字符集更改为时可能会失败。(漏洞 #25779239,漏洞 #85614)如果组件
deinit()
方法失败,组件仍然被卸载。(缺陷号 25764325)对于密码过期的帐户,存储程序的执行可能会失败,
DEFINER
即使这些帐户被锁定并且无法用于连接到服务器。现在DEFINER
,如果帐户被锁定,则不会检查过期密码。(漏洞#25741966)DISTINCT
由于分配的比较键太小,对临时表的操作可能会产生不正确的结果。(漏洞 #25740550,漏洞 #85518)在优化器跟踪输出中,
num_tmp_files
实际上并未指示文件数。它已重命名为num_initial_chunks_spilled_to_disk
并指示发生任何合并之前的块数。(错误#25733784,错误#85487)#!
Perl 脚本开头行中 的 Perl 路径已/usr/local/bin/perl
针对 FreeBSD 11 进行了调整。(缺陷 #25719975)启用 SQL 模式后,语法错误消息始终将
IGNORE_SPACE
第 1 行报告为行号。(漏洞#25717617)mysqldump未能在写入转储输出的 SQL 语句中正确引用某些标识符。(缺陷号 25717383)
删除没有关联表空间文件的表空间失败,并出现错误,指出表空间字典对象无效。(漏洞 #25717019)
服务器的客户端预授权缺少对长度编码字符串的长度检查。(漏洞#25714674)
在调试版本中,
CREATE TABLESPACE
操作在使用 NDB 存储引擎时引发了无效断言。检查零长度数据文件的验证函数不适用于 NDB 表空间并被删除。(缺陷号 25700242)对于调试版本,
EXPORT_SET()
操作可以为某些参数提出断言。(漏洞#25688192)-
对于调试版本,为 Bug#59686 添加的断言过于严格,可能会在不应该出现的时候出现。(缺陷号 25685958)
参考资料:另请参阅:Bug #59686。
-
MySQL 8.0.1 中的代码重构导致在调试版本中出现多个断言。(错误#25669590、错误#25669606、错误#25669580、错误#25688504)
参考资料:此问题是 Bug #25221172、Bug #84103 的回归。
对于某些双精度计算,在计算指数部分时可能会发生溢出。(缺陷 #25664323,缺陷 #85290)
SHOW INDEX
FULLTEXT
对于在多个列上定义的索引,输出不一致。(缺陷号 25659276)在组提交期间,堆栈可能会错误地报告为耗尽,从而导致堆栈溢出。(缺陷号 25656875)
就地(二进制)升级可能会更改存储例程的默认值
character_set_client
和character_set_connection
变量,从而可能导致不同的例程行为。(缺陷号 25633041)对于调试版本,分区处理程序可能不恰当地评估语句中生成的列表达式
UPDATE
,从而导致引发断言。(漏洞 #25615803,漏洞 #85179)在严格的 SQL 模式下,
ER_TRUNCATED_WRONG_VALUE
错误可以从警告转换为错误但随后被忽略,从而导致引发断言。(错误#25586959,错误#25586673)包含具有几何数据类型的列
ALTER TABLE
的ARCHIVE
表 发生故障。NOT NULL
对于调试版本,提出了一个断言。对于非调试版本,发生错误。(漏洞 #25582178,漏洞 #85059)对于调试版本,可以为
DROP TRIGGER
视图使用的表的触发器引发断言。(漏洞 #25581925)对于从 MySQL 5.7 升级到 MySQL 8.0,服务器将不必要的解析警告写入错误日志。这些消息现在被抑制了。(漏洞 #25518436,漏洞 #84889)
服务器异常退出试图访问无效的内存。(漏洞 #25501659)
-
name
数据字典表中字段 的最大长度column_type_elements
已从 255 字节扩展到 1020 字节,以适应使用多字节字符集可能产生的 longENUM
和 值。SET
使用多字节字符集时,单个
ENUM
或元素在数据字典中的列类型定义中SET
最多占用M
x 字节,其中为元素字面量长度,为字符集中最大长度字符所需的字节数.w
M
w
在以前的版本中,单个
ENUM
或SET
元素的最大支持长度取决于类型中元素的数量。因此,可能有 (M
xw
) = 64K 的单个元素,或 (M
xw
) = 1 的 64K 元素。单个
ENUM
或SET
元素的最大支持长度现在M
<= 255 且 (M
xw
) <= 1020,无论类型中的元素数量如何。(漏洞 #25481355) 通过
mysqld
TCP 包装器保护以及配置为限制来自 IP 地址的访问的hosts.allow
和hosts.deny
文件,来自该地址的连接尝试导致错误日志中的消息过多。(漏洞 #25476479,漏洞 #84708)mysqlpump
不再包括 系统数据库转储中的slave_master_info
和 表。恢复包含这些表的转储文件会因不正确地更改复制状态而导致问题。(漏洞#25469190)slave_relay_log_info
mysql
通过调用
mysql_options()
set 所做的更改MYSQL_OPT_SSL_MODE
可能会受到以后mysql_options()
调用的影响。现在设置MYSQL_OPT_SSL_MODE
不受以后mysql_options()
调用的影响。(漏洞#25452210)CREATE TABLE
带有DATA DIRECTORY
orINDEX DIRECTORY
子句 的语句可能会出现竞争条件。(漏洞 #25451091)启用 AddressSanitizer 后,编译
keyring_file
插件会产生单一定义规则违规。(漏洞 #25448205)ALTER TABLE ... MODIFY
在DATETIME NOT NULL
列上使用AFTER
子句导致ER_INVALID_USE_OF_NULL
错误。(缺陷号 25385334)范围优化器可能会创建不正确的查询树,从而导致服务器退出。(错误#25369742,错误#25586531)
--datadir
如果用相对路径名指定该选项,则mysqld_failed无法启动服务器 (缺陷号 25364806)XA PREPARE
,XA ROLLBACK
, 和XA COMMIT
对于来自断开连接的会话的事务没有获取全局提交锁并且InnoDB
即使FLUSH TABLES WITH READ LOCK
在生效时也修改了二进制日志和重做日志。当备份工具假定服务器处于只读状态时,这可能会导致备份不一致。(错误#25364178,错误#84442)GROUP_CONCAT(DISTINCT)
如果数据大小大于tmp_table_size
系统变量的值,则返回非唯一值。(漏洞 #25331425,漏洞 #84320)-
Bug #78777 的修复有不同的效果,具体取决于是否启用了 Performance Schema。(漏洞 #25309017,漏洞 #84305)
参考:这个问题是 Bug #78777 的回归。
某些嵌套查询中的聚合函数可能会导致服务器退出。(漏洞 #25303711)
如果更改连接字符集,使用 、 或 函数的虚拟生成列表达式可能会
BIN_TO_UUID()
导致CONV()
问题 。HEX()
在此上下文中,表字符集现在用于这些函数,而不管连接字符集如何。(缺陷号 25287633)如果启用了系统变量 ,
Rewriter
插件不会正确执行锁定。read_only
(缺陷号 25264253)对于具有默认值为
TIMESTAMP
或 的列 的表,如果表具有触发器,则可以将该列初始化为。(漏洞 #25209512,漏洞 #84077)DATETIME
CURRENT_TIMESTAMP
0000-00-00 00:00:00'
BEFORE INSERT
在 Windows 上,输出
Time
值SHOW PROCESSLIST
随时间漂移。(漏洞 #25101724,漏洞 #83019)当服务器引导程序中的创建函数尝试评估未解析的表达式时,会引发断言。(漏洞#24961932)
减少了数据字典缓存查找的次数,
ALTER TABLE
改进了触发器的处理,有助于确保在ALTER TABLE
处理过程中服务器退出时触发器的持久性。(缺陷 #24930129,缺陷 #83473)如果启用了系统变量的标志,则针对
InnoDB
使用主键和子查询的表的 某些查询可能会返回不正确的结果。(缺陷 #24829050,缺陷 #79675)index_merge_intersection
optimizer_switch
在 x86 机器上,
uint3korr()
宏读取 4 个字节的数据而不是预期的 3 个字节。(漏洞 #24807826,漏洞 #83264)在 memcached 插件的提取操作期间引发了断言。(漏洞 #24605783)
包含
UNION
在子查询中并GROUP BY
可能返回不正确结果的查询。(漏洞 #24595639)一些语法上不正确
CREATE INDEX
的语句可能会导致服务器退出而不是语法错误。(漏洞 #24593992)如果
innodb_table_stats
或innodb_index_stats
表不在mysql
系统数据库中,就地 MySQL 升级失败。(从 MySQL 5.7 升级到 MySQL 8.0 应该不会出现这个问题,因为这些表存在于 MySQL 5.7 中。)(缺陷 #24557143)如果子句 的一部分引用列列表中的值
INSERT
,则在存储程序或准备语句上下文中执行的语句 可能会出现不正确的行为 。(错误#24538207、错误#25361251、错误#25530880、错误#25684790)VALUES
ON DUPLICATE KEY UPDATE
BLOB
INSERT
Debian 软件包中的 systemd 支持脚本包含对数据目录的硬编码引用,因此很难使用
--datadir
. (漏洞 #24398446,漏洞 #82417)MySQL 无法使用 Clang 在 macOS 10.10.5 下编译。(漏洞 #24352163,漏洞 #82340)
如果
REPLACE
语句试图更新包含 类型的虚拟生成列的表中的行BLOB
,则后续 DML 语句的行为可能不正确。(漏洞 #23573575)一些
PROXY
授权没有复制到从属,导致不正确的复制。(错误#23289541、错误#81424、错误#23623115)EXPLAIN
for single-tableUPDATE
orDELETE
statements 可能会引发断言,试图优化子查询。(漏洞 #23209903)改进了mysqlxtest 的帮助输出。(漏洞 #23107137,漏洞 #81086)
对于启用了 AddressSanitizer 的构建,该
ST_Simplify()
函数可能会尝试使用已释放的内存。(缺陷号 23023817)keyring_file
编译器标志进行了调整,以消除使用 Clang 编译插件时出现的大量警告。(缺陷 #22834591,缺陷 #80524)如果启用 Event Scheduler 导致定义为
ON COMPLETION NOT PRESERVE
被删除的事件,因为它的执行时间已经过去,则删除事件不会写入二进制日志,导致从属不复制它并且如果稍后创建同名事件则复制失败. (缺陷号 22150112)对于某些
CREATE TABLE ... SELECT
语句,添加一个ORDER BY
子句会更改列数据类型,或导致为调试版本引发断言。(漏洞#16833464)LOAD XML
当读取的 XML 文件包含大量空格时,性能会明显变慢,例如通过缩进或漂亮打印引入的空格。现在,在将每个这样的值读入内存之前,所有前导空格都会被删除。(漏洞 #16212207)