有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/。
这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
-
CREATE USER
现在允许使用一个DEFAULT ROLE
子句来指定帐户默认角色。SHOW CREATE USER
如果默认不是,现在显示帐户默认角色NONE
。(错误#24670738,错误#82987) -
MySQL 现在维护有关密码历史的信息,这使得可以限制对以前密码的重用。DBA 可以要求在某些密码更改次数或一段时间内不从以前的密码中选择新密码。可以使用
password_history
and 系统变量全局建立密码重用策略,也可以使用and 语句password_reuse_interval
在每个帐户的基础上 建立密码重用策略。与要求定期更改密码的现有密码过期功能一起,新的重用限制功能为 DBA 提供了对密码管理的更完整控制。有关详细信息,请参阅CREATE USER
ALTER USER
密码管理。重要的密码重用限制的实施涉及对
mysql.user
系统表结构的更改和新mysql.password_history
系统表。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以合并这些系统数据库更改。在此之前,无法更改密码。
-
MySQL 现在支持原子数据定义语句 ( atomic DDL )。原子 DDL 语句将与 DDL 操作关联的数据字典更新、存储引擎操作和二进制日志写入组合到一个完全提交或回滚的单个崩溃安全事务中。
支持表和非表 DDL 语句。与表相关的 DDL 操作需要存储引擎的支持,而非表的 DDL 操作则不需要。目前,
InnoDB
存储引擎支持原子 DDL。支持的表 DDL 语句包括 数据库
CREATE
、表空间、表和索引的 、 和语句,以及ALTER
语句 。DROP
TRUNCATE TABLE
-
支持的非表 DDL 语句包括:
CREATE
和DROP
语句,以及(如果适用)ALTER
存储程序、触发器、视图和可加载函数的语句。MySQL 8.0.0 中添加了CREATE TRIGGER
Atomic DDL 支持 。DROP TRIGGER
帐户管理报表:
CREATE
、ALTER
、DROP
和(如果适用)RENAME
用户和角色的报表,以及GRANT
和REVOKE
报表。MySQL 8.0.1 中添加了对帐户管理语句的原子 DDL 支持。
对于表相关的DDL操作,
InnoDB
将DDL日志写入mysql.innodb_ddl_log
数据字典表。启用innodb_print_ddl_logs
配置选项会将 DDL 恢复日志打印到stderr
.原子 DDL 特性改变了一些语句的行为:
DROP VIEW
如果命名视图不存在且未进行任何更改,则失败并显示错误。以前,该语句返回一个错误,指示哪些视图不存在,但也会删除确实存在的视图。DROP TABLE
如果命名表不存在且未进行任何更改,则失败并显示错误。以前,该语句返回一个错误,指示哪些表不存在,但也会删除确实存在的表。DROP TABLE
如果所有命名表都使用支持原子 DDL 的存储引擎,则它是完全原子的。DROP DATABASE
如果所有表都使用支持原子 DDL 的存储引擎,则它是原子的。但是,从文件系统中删除数据库目录是最后发生的,不是原子事务的一部分。如果由于文件系统错误或服务器停止而导致删除数据库目录失败,DROP DATABASE
则不会回滚事务。使用支持原子 DDL 的存储引擎的表的中断 DDL 操作不再在存储引擎、数据字典和二进制日志之间引入差异,或留下孤立文件。
不再允许部分执行账户管理报表。帐户管理语句要么对所有指定用户成功,要么回滚并且在发生错误时无效。
对
DROP TABLE
、DROP VIEW
和帐户管理语句行为的更改对跨版本复制配置有影响。有关详细信息,请参阅原子数据定义语句支持。(漏洞 #24620918)
MySQL C API 现在允许客户端指定结果集的元数据传输是可选的。抑制元数据传输可以提高性能,特别是对于执行许多查询且每个查询返回几行的会话而言。有关详细信息,请参阅可选结果集元数据。
-
MySQL 现在支持
utf8mb4
Unicode 字符集的俄语排序规则:utf8mb4_ru_0900_ai_ci
不区分重音和区分大小写。utf8mb4_ru_0900_as_cs
区分重音和区分大小写。
对于调试版本,如果插件包含在构建中,
SAFE_MUTEX
编译标志将被禁用。memcached
这不再发生;SAFE_MUTEX
始终为调试版本启用。由于此更改而发现的一些代码问题已得到纠正。(错误#26442367,错误#87068)EL6 和 EL7 上的二进制包现在使用 Devtoolset 6 而不是 Devtoolset3 和 GCC 6.2.1 而不是 4.9.2 进行编译。(漏洞 #26436968,漏洞 #87061)
MySQL 现在针对 Oracle Linux 上的 SPARC 进行编译。(漏洞 #26306331,漏洞 #86745)
使用 Clang 在 macOS 上编译 MySQL 现在需要不同于 8.0 的 Clang 版本,这在某些内联构造方面存在问题。(漏洞 #26279510,漏洞 #86711)
已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。
系统
performance_schema_max_mutex_classes
变量默认值已从 220 增加到 250。performance_schema_max_thread_classes
系统变量默认值已从 50 增加到 100。(缺陷 #26193630)新
cte_max_recursion_depth
系统变量实现了公用表表达式 (CTE) 最大递归深度。服务器终止任何递归级别超过此变量值的 CTE 的执行。有关详细信息,请参阅 限制公用表表达式递归。(漏洞 #26136509,漏洞 #86444)系统
back_log
变量默认值现在是 的值max_connections
,这使得允许的积压调整为最大允许连接数。要默认启用事件计划程序,
event_scheduler
系统变量默认值已从更改OFF
为ON
。系统
max_allowed_packet
变量默认值已从 4194304 (4M) 增加到 67108864 (64M)。系统
max_error_count
变量默认变量已从 64 增加到 1024。
-
这些
INFORMATION_SCHEMA
表已重新实现为数据字典表的视图:FILES PARTITIONS REFERENTIAL_CONSTRAINTS
现在对这些表的查询更加高效,因为它们从数据字典表中获取信息,而不是通过其他更慢的方式。例如,服务器不再必须为表的每个查询创建一个临时
INFORMATION_SCHEMA
表。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以合并这些更改。
-
复制: 以下过时的mysqlbinlog选项现已弃用,并将在未来的 MySQL 版本中删除:
--short-form
,可用于测试以将输出限制为单独的语句。--stop-never-slave-server-id
--stop-never
,它为使用该选项的连接提供了服务器 ID 。如果您需要此功能,请改用该--connection-server-id
选项。
这些选项的弃用警告被发送到标准错误,而不是标准输出,因此它们不会干扰使用 mysqlbinlog输出的工具的操作。
复制:
sql_log_bin
系统变量已 弃用的全局范围sql_log_bin
现在只有会话范围。@@GLOBAL.sql_log_bin
应调整 依赖访问的应用程序-
这些与加密相关的弃用项目已被删除:
ENCRYPT()
功能 。和函数、
DES_ENCRYPT()
选项 、 系统变量、语句选项和 CMake 选项。DES_DECRYPT()
--des-key-file
have_crypt
DES_KEY_FILE
FLUSH
HAVE_CRYPT
代替删除的加密函数:对于
ENCRYPT()
,考虑使用SHA2()
instead for one-way hashing。对于其他人,请考虑使用AES_ENCRYPT()
andAES_DECRYPT()
代替。(缺陷号 26493987) 已弃用的
tx_isolation
和tx_read_only
系统变量已被删除。使用transaction_isolation
andtransaction_read_only
代替。-
已弃用的查询缓存已被删除。移除包括以下项目:
和
FLUSH QUERY CACHE
语句RESET QUERY CACHE
。这些系统变量:
query_cache_limit
,query_cache_min_res_unit
,query_cache_size
,query_cache_type
,query_cache_wlock_invalidate
。这些状态变量:
Qcache_free_blocks
,Qcache_free_memory
,Qcache_hits
,Qcache_inserts
,Qcache_lowmem_prunes
,Qcache_not_cached
,Qcache_queries_in_cache
,Qcache_total_blocks
。这些线程状态:
checking privileges on cached query
,checking query cache for query
,invalidating query cache entries
,sending cached result to client
,storing result in query cache
,Waiting for query cache lock
。SQL_CACHE
SELECT
修饰符 。
这些不推荐使用的查询缓存项仍然不推荐使用,但没有任何效果,并将在未来的 MySQL 版本中删除:
SQL_NO_CACHE
SELECT
修饰符 。系统
ndb_cache_check_time
变量。
have_query_cache
系统变量仍然被弃用,其值始终为 ,NO
并将在未来的 MySQL 版本中删除。 该语句 的 deprecated
EXTENDED
和PARTITIONS
关键字 已被删除。EXPLAIN
这些关键字是不必要的,因为它们的效果始终处于启用状态。未使用
date_format
的 、datetime_format
、time_format
和max_tmp_tables
系统变量已被删除。已弃用的
multi_range_count
系统变量已被删除。已弃用的
log_warnings
系统变量和--log-warnings
服务器选项已被删除。请改用log_error_verbosity
系统变量。已弃用的
secure_auth
系统变量和--secure-auth
客户端选项已被删除。删除了 C API 函数 的MYSQL_SECURE_AUTH
选项 。mysql_options()
已弃用的
ignore_builtin_innodb
系统变量已被删除。-
在 MySQL 8.0.2 中,从属状态日志的系统变量,
master_info_repository
和relay_log_info_repository
,默认设置为TABLE
而不是FILE
。在 MySQL 8.0.3 中,FILE
这两个系统变量的设置都被弃用了,如果使用会发出警告。该FILE
设置将在未来的 MySQL 版本中删除。该
TABLE
设置确保复制存储库信息存储在 InnoDB 表中,而不是数据目录中的文件中。表的使用使复制对意外停止具有弹性。当存储为文件时,从站状态日志的默认名称是
master.info
和relay-log.info
。可以分别使用--master-info-file
和--relay-log-info-file
选项更改名称。作为 InnoDB 表,从属状态日志被命名为mysql.slave_master_info
和mysql.slave_relay_log_info
。要修改正在使用
FILE
从属状态日志存储库的现有复制从属存储库以使用TABLE
存储库,请通过运行以下命令动态转换现有复制存储库:STOP SLAVE; SET GLOBAL master_info_repository = 'TABLE'; SET GLOBAL relay_log_info_repository = 'TABLE';
master 信息日志表
mysql.slave_master_info
应该受到保护,因为它包含连接到 master 的密码。备份复制从属数据时,请确保备份包含从属状态日志的mysql.slave_master_info
和mysql.slave_relay_log_info
表,因为在从从属恢复数据后需要它们来恢复复制。
-
由于正在进行的外键锁定工作,暂时禁止重命名父外键中的列。这个限制将在 MySQL 8.0.4 中解除。(漏洞 #26334071)
参考资料:另请参阅:Bug #26659110。
-
二进制日志现在默认在服务器启动时启用。系统
log_bin
变量默认设置为 ON,而不是 OFF,即使--log-bin
未指定该选项也是如此。二进制日志记录是生产安装的标准做法,因此默认启用它会删除通常需要的配置和计划步骤。要禁用二进制日志记录,您可以在启动时指定
--skip-log-bin
或--disable-log-bin
选项。系统
server_id
变量现在默认设置为 1,而不是 0。对于复制拓扑中的服务器,您仍必须更改此设置以为每个复制服务器指定唯一的服务器 ID。log_bin=ON
以前,如果未指定服务器 ID ,则服务器无法启动 。现在,服务器可以启动,但如果您没有设置明确的服务器 ID,则会发出一条警告消息。(从 MySQL 8.0.4 开始,该消息仅供参考。)为服务器启用二进制日志记录后,所有更改数据的语句都会记录到服务器的二进制日志中,这是一系列具有基本名称和数字扩展名的文件。默认情况下,服务器会在数据目录中创建二进制日志文件和索引文件。在 MySQL 8.0.3 中,这些文件的默认基本名称是
,使用主机名。从 MySQL 8.0.4 开始,默认基本名称是host_name
-binbinlog
如果您不提供该--log-bin
选项,并且
如果您提供没有字符串或空字符串的选项。host_name
-bin--log-bin
您可以通过指定和--log-bin-index
选项 来选择二进制日志文件和索引文件的名称和位置 。建议您显式指定一个基本名称,这样如果主机名发生变化,您可以轻松地继续使用相同的二进制日志文件名。log_bin_basename
系统变量保存二进制日志文件的基本名称和任何指定路径 。replication slave上的relay log和relay log index,其名称由
--relay-log
和--relay-log-index
选项指定,不能与binary log和binary log index重名。从 MySQL 8.0.3 开始,如果二进制日志和中继日志文件的基本名称相同,服务器会发出一条错误消息并且不会启动。每次启动或刷新日志时,服务器都会在系列中创建一个新的二进制日志文件。服务器还会在当前文件大小达到 后自动创建一个新的二进制日志文件
max_binlog_size
,默认为最大允许值 1GB。在 MySQL 8.0.3 中,二进制日志文件默认在 30 天后过期,然后可以在启动时或刷新二进制日志时自动删除。您可以使用语句手动清除二进制日志文件 ,或使用 系统变量PURGE BINARY LOGS
指定不同的二进制日志有效期 。binlog_expire_logs_seconds
许多其他选项可用于修改二进制日志记录的行为。有关详细信息,请参阅 二进制日志和 二进制日志记录选项和变量。
参考资料:另请参阅:Bug #26730000。
-
优化器现在支持
SET_VAR
在单个语句的持续时间内设置系统变量的会话值的提示。例子:SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name; INSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);
有关详细信息,请参阅优化器提示。(漏洞 #22906815)
优化器现在使用存储在
column_statistics
数据字典表中的列值直方图统计来构建查询执行计划。直方图的使用适用于涉及将列与常量进行比较的谓词。请参阅优化器统计信息。eq_range_index_dive_limit
以前,除了使用系统变量 外,没有办法跳过使用指数潜水来估计指数的有用性 。现在,在某些查询条件下,单表查询可以跳过索引跳转(请参阅 范围优化)。optimizer_switch
系统变量有一个名为的新标志 ,use_invisible_indexes
用于控制优化器是否使用不可见索引来构建查询执行计划。如果标志是off
(默认值),优化器将忽略不可见索引(与引入此标志之前的行为相同)。如果标志是on
,不可见索引保持不可见,但优化器将它们考虑到执行计划构造中。
MySQL Server Docker 映像中缺少mysqlcheck ,这会阻止mysql_upgrade 运行。(错误#26400146,错误#86968)
对于 Debian,非调试二进制文件已从
mysql-server
包移动到mysql-server-core
包。(错误#26382333,错误#86899)mysql-community-source
不再生产 Debian/Ubuntu软件包,因为它包含的 MySQL 源代码压缩包由dev.mysql.com
. (漏洞 #26201482)-
与 MySQL 捆绑的 zlib 库已从 1.2.3 版本升级到 1.2.11 版本。MySQL 在 zlib 库的帮助下实现压缩。
zlib 1.2.11 中的 zlib
compressBound()
函数返回比 zlib 版本 1.2.3 中压缩给定字节长度所需的缓冲区大小略高的估计值。该函数由确定创建压缩表或在压缩表中插入和更新行时允许的最大行大小 的compressBound()
函数调用。因此, 在 早期版本中成功的行大小非常接近最大行大小的、 和 操作现在可能会失败。为避免此问题,请测试 压缩语句InnoDB
InnoDB
InnoDB
CREATE TABLE ... ROW_FORMAT=COMPRESSED
INSERT
UPDATE
CREATE TABLE
InnoDB
升级前 MySQL 8.0 测试实例上的大行表。
从 MySQL 8.0.2 开始,Performance Schema 表定义在服务器内部维护。由于该更改,
CREATE TABLE
PerformanceDROP TABLE
Schema 表不再可能。(缺陷号 26136994)-
该
events_statements_summary_by_digest
表现在为每一行提供了一个示例语句,该语句在该行中生成摘要值。应用程序可以使用此信息作为捕获语句示例的更有效方法,而不是诸如探测
表之类的替代方法。后一种方法需要启用相应的xxx
_history_long
消费者,这对于不需要这些表的应用程序来说是额外的开销。有关详细信息,请参阅 性能模式语句摘要和采样以及 语句汇总表。xxx
_history_long此外,表的
FIRST_SEEN
和LAST_SEEN
timestamp 列events_statements_summary_by_digest
现在有小数秒部分。 -
Performance Schema 表现
setup_instruments
在包含工具元数据列:工具属性、工具波动性和描述工具目的的文档字符串。另外,TIMED
现在的列可以是NULL
,说明仪器不支持计时。请参阅 setup_instruments 表。新的 Performance Schema
setup_threads
表公开了检测线程类名称和属性。请参阅 setup_threads 表。
-
新的
get_sysvar_source
插件服务使插件能够检索系统变量设置的来源。笔记作为这项工作的一部分,用于引用多个
MyISAM
密钥缓存的复合部分结构化变量语法已被弃用。请参阅 多个密钥缓存。
一个新的
caching_sha2_password
身份验证插件可用。与sha256_password
插件一样,caching_sha2_password
实现 SHA-256 密码哈希,但使用缓存来解决连接时的延迟问题。它还支持更多的连接协议,并且不需要针对 OpenSSL 进行链接以实现 RSA 密码交换功能。请参阅 缓存 SHA-2 可插入身份验证。因为启动服务器时
--skip-grant-tables
会禁用身份验证检查,所以在这种情况下,服务器还会通过启用来禁用远程连接skip_networking
。
MySQL 现在支持资源组的创建和管理,并允许将服务器中运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性可以控制其资源,以启用或限制组中线程的资源消耗。DBA 可以根据不同的工作负载修改这些属性。目前,CPU时间是一种可管理的资源,以“虚拟CPU ”的概念为代表 作为一个术语,包括 CPU 核心、超线程、硬件线程等。服务器在启动时确定有多少虚拟 CPU 可用,具有适当权限的数据库管理员可以将这些 CPU 与资源组相关联并将线程分配给组。有关详细信息,请参阅 资源组。
-
不兼容的更改: 以前,这些测试几何关系的函数仅支持笛卡尔空间参考系统 (SRS) :,
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()
这些函数现在检测地理 SRS 中的几何参数并返回地理结果。预计 SRS 和 SRID 0 的计算保持不变。有关详细信息,请参阅 使用对象形状的空间关系函数和 使用最小边界矩形的空间关系函数。
笔记如果空间数据包含引用地理空间参考系统的 SRID 值,则与以前的 MySQL 版本相比,使用这些函数的现有查询将返回不同的结果。
InnoDB:
InnoDB
为空间索引 添加了空间引用标识符 (SRID) 支持-
空间数据类型现在允许使用
SRID
属性来明确指示存储在列中的值的空间参考系统 (SRS)。请参阅 空间数据类型。指示每一列的
SRID
属性值,如果有,则该 表现在INFORMATION_SCHEMA.COLUMNS
有一个SRS_ID
列。具有显式
SRID
属性的空间列是受 SRID 限制的:该列仅采用具有该 ID 的值,并且SPATIAL
该列上的索引将由优化器使用。优化器忽略 没有属性SPATIAL
的空间列上的索引 。SRID
请参阅 空间索引优化。
ALTER TABLE
现在支持使用语法更轻松地重命名列。请参见 ALTER TABLE 语句。对于更改列名而不是其定义,比需要重新指定当前列定义的更方便。使用 ,如果您不知道定义,则必须查找定义,如果您不准确地重新指定它,则有可能导致数据更改或丢失。(错误#11746522、错误#26949、错误#11747473、错误#32497、错误#11765084、错误#58006、错误#14031617)RENAME COLUMN
old_name
TOnew_name
RENAME COLUMN
CHANGE
CHANGE
--skip-grant-tables
使用该选项 启动服务器时无法安装 X 插件。(缺陷号 26516678)X 插件套接字连接工作不正常。(漏洞 #26427112,漏洞 #87019)
从源代码编译 MySQL 时,某些不常用 的CMake参数会导致 X 插件构建出现问题。(漏洞 #26141933)
使用 X 协议的
Mysqlx.Connection.CapabilitiesGet
请求未返回可用身份验证机制的完整列表。(缺陷号 26044113)对于混合大小写或大写的模式名称,该语句
list_objects
可能会错误地将集合报告为表。(缺陷号 25769683)X 插件从插件列表中省略,以包含用于测试数据目录权限。(漏洞 #24823999)
-
InnoDB:默认情况下禁用 的新
innodb_dedicated_server
配置选项可用于InnoDB
根据服务器上检测到的内存量自动配置以下选项:此选项适用于在专用服务器上运行的 MySQL 服务器实例。有关详细信息,请参阅 为专用 MySQL 服务器启用自动配置。
-
InnoDB:
ALTER TABLESPACE ... RENAME TO
语法 现在支持重命名通用表空间ALTER TABLESPACE
and 子句已弃用, 将在未来的 MySQL 版本中删除。DROP TABLESPACE
ENGINE
-
InnoDB:
InnoDB
删除 了与过时的系统表相关的代码INFORMATION_SCHEMA
基于InnoDB
系统表的视图被数据字典表的内部系统视图所取代。受影响InnoDB
INFORMATION_SCHEMA
的视图已重命名:表 1 重命名的 InnoDB 信息模式视图。第一列显示旧名称。第二列显示新名称。
旧名称 新名字 INNODB_SYS_COLUMNS
INNODB_COLUMNS
INNODB_SYS_DATAFILES
INNODB_DATAFILES
INNODB_SYS_FIELDS
INNODB_FIELDS
INNODB_SYS_FOREIGN
INNODB_FOREIGN
INNODB_SYS_FOREIGN_COLS
INNODB_FOREIGN_COLS
INNODB_SYS_INDEXES
INNODB_INDEXES
INNODB_SYS_TABLES
INNODB_TABLES
INNODB_SYS_TABLESPACES
INNODB_TABLESPACES
INNODB_SYS_TABLESTATS
INNODB_TABLESTATS
INNODB_SYS_VIRTUAL
INNODB_VIRTUAL
升级到 MySQL 8.0.3 或更高版本后,更新任何引用以前
InnoDB
INFORMATION_SCHEMA
视图名称的脚本。新
INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF
视图提供表空间的空间、名称、路径、标志和空间类型数据InnoDB
。 -
InnoDB: 当
InnoDB
与全局数据字典集成时,数据字典中的file-per-table表空间名称以innodb_file_per_table_的形式创建x
,其中x
是InnoDB
表空间ID。为了便于使用,数据字典中的 file-per-table 表空间名称再次与表名称相同。从 MySQL 5.7 升级到 MySQL 8.0 时会在数据字典中为MySQL 5.7
innodb_table_stats
和 表空间名称附加“ ” ,以区别于 MySQL 8.0 对应项。innodb_index_stats
_backup57
-
InnoDB: 默认
innodb_autoinc_lock_mode
设置从 1(连续)更改为 2(交错)。交错锁模式允许并行执行多行插入,从而提高并发性和可扩展性。新的innodb_autoinc_lock_mode
默认设置反映了从基于语句的复制到基于行的复制作为 MySQL 5.7 中默认复制类型的变化。Statement-based复制需要连续的自增锁模式来保证给定的SQL语句序列的自增值按照可预测、可重复的顺序赋值,而row-based复制对SQL语句的执行顺序不敏感. 有关详细信息,请参阅 InnoDB AUTO_INCREMENT 锁定模式。对于使用基于语句的复制的系统,新的
innodb_autoinc_lock_mode
默认设置可能会破坏依赖于顺序自动增量值的应用程序。要恢复以前的默认值,请设置innodb_autoinc_lock_mode
为 1。 -
InnoDB: 序列化字典信息 (SDI) 现在存在于所有
InnoDB
表空间文件中,临时表空间和撤消表空间文件除外。SDI 是表和表空间对象的序列化元数据。SDI 数据的存在提供了元数据冗余。例如,如果数据字典变得不可用,则可以从表空间文件中提取字典对象元数据。SDI 提取是使用ibd2sdi工具执行的。SDI 数据以JSON
格式存储。在表空间文件中包含 SDI 数据会增加表空间文件的大小。SDI 记录需要单个索引页,默认情况下大小为 16KB。但是,SDI 数据在存储时会进行压缩以减少存储占用空间。
InnoDB: 默认
innodb_flush_neighbors
值从 1 更改为 0,这会禁用缓冲池中相邻页面的刷新。对于寻道时间不是重要因素的非旋转存储 (SSD) 设备,设置为 0 是最佳选择。对于使用旋转存储 (HDD) 的系统,建议将设置更改回之前的默认值 1。-
InnoDB: 修改了影响缓冲池预刷新和刷新行为的配置选项的默认值:
默认值已更改为 10。之前的
innodb_max_dirty_pages_pct_lwm
默认值 0 会禁用缓冲池预刷新。当缓冲池中的脏页百分比超过 10% 时,值为 10 将启用预刷新。启用预冲洗可提高性能一致性。innodb_max_dirty_pages_pct
默认值已从 75 更改为 90。 尝试从缓冲池刷新数据以 使InnoDB
脏页的百分比不超过此值。增加的默认值允许缓冲池中有更大百分比的脏页。
InnoDB: 最小值
innodb_undo_tablespaces
从 0 更改为 2。在以前的版本中,如果设置为 0,则系统表空间用于回滚段innodb_undo_tablespaces
。最小值 2 可确保在撤消表空间而不是系统表空间中创建回滚段。有关详细信息,请参阅 撤消表空间。-
复制;JSON: 添加了
binlog_row_value_options
系统变量。目前这个变量可以取消设置,或设置为值PARTIAL_JSON
。这导致 MySQL 的基于行的复制对每个更新使用紧凑的二进制日志格式,只修改 JSON 文档的一小部分,并使用JSON_SET()
、JSON_REPLACE()
和JSON_REMOVE()
。紧凑格式仅包含 JSON 文档的修改部分,而不是完整文档,用于二进制日志中更新的后映像。如果修改需要比完整文档更多的空间,或者如果无法生成部分更新,则使用完整文档。有关详细信息,请参阅变量的描述以及 JSON 值的部分更新。
-
复制:在使用基于 GTID 的复制 ( ) 的
IGNORE_SERVER_IDS
选项CHANGE MASTER TO
现已弃用gtid_mode=ON
使用 GTID,已经应用的事务会被自动忽略,因此不需要此功能。在开始基于 GTID 的复制之前,检查并清除之前在相关服务器上设置的所有忽略的服务器 ID 列表。该
SHOW_SLAVE_STATUS
语句可以针对单个通道发出,如果有的话,会显示被忽略的服务器 ID 列表。如果没有列表,则该Replicate_Ignore_Server_Ids
字段为空白。如果为服务器设置了 ,如果您在语句中包含该选项,
gtid_mode=ON
现在会发出弃用警告 。如果您在任何通道的现有服务器 ID 设置为 时发出声明,也会发出弃用警告。如果确实收到弃用警告,您仍然可以在设置后通过发出包含 带有空列表 的选项的语句来清除列表。IGNORE_SERVER_IDS
CHANGE MASTER TO
SET GTID_MODE=ON
IGNORE_SERVER_IDS
gtid_mode=ON
CHANGE MASTER TO
IGNORE_SERVER_IDS
-
复制: 系统
log_slave_updates
变量现在默认设置为 ON,因此您无需--log-slave-updates
在启动复制从站时明确指定。log_slave_updates
系统变量是只读的 。如果您需要防止复制从服务器将其 SQL 线程执行的更新记录到它自己的二进制日志中,请--log-slave-updates=OFF
在从服务器启动时指定。 复制:已添加 该
group_replication_communication_debug_options
变量,使您能够动态过滤每个组复制组件(例如 GCS、XCOM 等)的调试和跟踪消息。复制: 组复制线程状态现在显示在性能模式表中。
-
JSON: 函数
JSON_MERGE()
重命名为JSON_MERGE_PRESERVE()
.此版本还添加了
JSON_MERGE_PATCH()
功能,符合 RFC 7396 的版本JSON_MERGE_PRESERVE()
;它的行为与 的行为相同,JSON_MERGE_PRESERVE()
但有以下两个例外:JSON_MERGE_PATCH()
删除第一个对象中具有第二个对象中的匹配键的任何成员,前提是与第二个对象中的键关联的值不是 JSONnull
。如果第二个对象的成员的键与第一个对象中的成员匹配,则将第一个对象中 的值
JSON_MERGE_PATCH()
替换为第二个对象中的值,同时将第二个值JSON_MERGE_PRESERVE()
附加到第一个值。
此示例将合并相同的 3 个 JSON 对象(每个对象都有一个匹配的键
"a"
)的结果与以下每个函数进行比较:mysql> SET @x = '{ "a": 1, "b": 2 }', > @y = '{ "a": 3, "c": 4 }', > @z = '{ "a": 5, "d": 6 }'; mysql> SELECT JSON_MERGE_PATCH(@x, @y, @z) AS Patch, -> JSON_MERGE_PRESERVE(@x, @y, @z) AS Preserve\G *************************** 1. row *************************** Patch: {"a": 5, "b": 2, "c": 4, "d": 6} Preserve: {"a": [1, 3, 5], "b": 2, "c": 4, "d": 6}
JSON_MERGE()
仍然支持作为 的别名JSON_MERGE_PRESERVE()
,但现在已弃用,并可能在未来的 MySQL 版本中删除。有关详细信息,请参阅修改 JSON 值的函数。(缺陷 #81283,缺陷 #23255346)
-
InnoDB
现在使用 Variance-Aware Transaction Scheduling (VATS) 在系统高负载时调度事务锁的释放,这有助于减少 lock sys wait mutex 争用。当 >= 32 个线程挂在锁等待队列中时,锁调度使用 VATS。有关 VATS 的更多信息,请参阅 识别事务延迟差异的主要来源:走向更可预测的数据库。
感谢 Jiamin Huang 的贡献。(漏洞 #25290971,漏洞 #84266)
-
MySQL 现在根据需要将元数据锁扩展到由外键约束相关的表。扩展元数据锁可防止冲突的 DML 和 DDL 操作在相关表上并发执行。此功能还可以在修改父表时更新外键元数据。以前,子表拥有的外键元数据无法安全更新。
如果一个表被显式锁定
LOCK TABLES
,则任何与外键约束相关的表现在都会被隐式打开和锁定。LOCK TABLES READ
对于外键检查,在相关表上采用共享只读锁 ( )。LOCK TABLES WRITE
对于级联更新,在操作中涉及的相关表上采用 无共享写锁 ( )。如果
LOCK TABLES
对于外键关系中的表是活动的,ALTER TABLE ... RENAME
则对于该表是不允许的。这是一个临时限制,在 MySQL 8.0.4 中通过 Bug #26647340 的补丁解除了。 -
以天为单位指定二进制日志有效期的
expire_logs_days
系统变量现已弃用,并将在未来的 MySQL 版本中删除。expire_logs_days
没有为定义二进制日志有效期提供足够的灵活性。binlog_expire_logs_seconds
可用于设置二进制日志过期时间(以秒为单位)。在 MySQL 8.0.3 中,这两个变量的影响目前是累积的。例如,如果expire_logs_days
为 1 且binlog_expire_logs_seconds
为 43200,则二进制日志每 1.5 天清除一次。binlog_expire_logs_seconds
这会产生与设置为 129600 和0相同的结果。expire_logs_days
请注意, 如果未指定expire_logs_days
,则当前将默认设置 30 天添加到二进制日志有效期 。expire_logs_days
要binlog_expire_logs_seconds
单独使用,请expire_logs_days=0
明确设置。要禁用二进制日志的自动清除,您必须将
expire_logs_days
和binlog_expire_logs_seconds
显式设置为 0。参考资料:另请参阅:Bug #26483363。
一种新型备份锁允许在线备份期间进行 DML,同时防止可能导致快照不一致的操作。
LOCK INSTANCE FOR BACKUP
和UNLOCK INSTANCE
语法支持新的备份锁 。使用这些BACKUP_ADMIN
语句需要特权。
-
不相容的变化;JSON: 如果一个 JSON 对象包含多个具有相同键名的成员,MySQL 保留第一个成员并丢弃其余成员。这与 RFC 7159 相矛盾,RFC 7159 建议可以使用此处列出的其中一种方式处理重复的键名:
报告错误(或无法解析对象)
报告所有名称-值对,包括重复项
仅报告最后的名称-值对
在 JavaScript 中评估 JSON 文本时,如果指定了多个具有相同名称的对,则保留最后一个名称-值对。MySQL 现在也这样做,并实现刚刚列出的三个选项中的最后一个,如下所示:
mysql> CREATE TABLE t1 (c1 JSON); mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}'); mysql> SELECT c1 FROM t1; +------------------+ | c1 | +------------------+ | {"x": [3, 5, 7]} | +------------------+
此问题的修复程序还纠正了 MySQL 8.0 服务器中的一个故障,即无法处理插入包含 JSON 数组作为多个相同键的值的数据的 JSON 列。(错误#86620、错误#86866、错误#26238736、错误#26369555)
-
表现; JSON: 创建 JSON 字符串的表示现在优化了最常见的情况——要处理的字符串不包含需要转义的特殊字符——扫描字符串中的第一个特殊字符,并复制每个字符序列不需要在单个
memcpy()
调用中转义,而不是依次检查每个字符以确定它是否需要转义,如果需要则转义它,然后像以前那样一个一个地复制它。此修复程序还纠正了无法转义控制字符
\u001f
或单位分隔符的问题。(错误#86898、错误#26388690、错误#87722、错误#26780307)参考资料:另请参阅:Bug #25977595。
InnoDB:
ON UPDATE
和ON DELETE
外键子句 的默认值RESTRICT
为NO ACTION
。NO ACTION
是一个标准的SQL关键字,相当于RESTRICT
MySQL中的关键字。(漏洞 #30186407,漏洞 #96466)InnoDB:由于内部父表名和子表名的文件名编码导致表 中缺少外键记录
INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
,导致名称超过允许的长度。(漏洞 #27020089)InnoDB:
ALTER TABLE
执行、DROP TABLE
和DROP DATABASE
操作 时发生了长时间的信号量等待(缺陷号 26779650)InnoDB: 从与表空间导入相关的函数中删除了无效的错误处理代码。(漏洞#26595476)
-
InnoDB: 在 MySQL 5.6 之前创建的 File-per-table 表空间在就地升级到 MySQL 8.0.2 期间导致失败。表空间未按要求注册到
InnoDB
SYS_TABLESPACES
系统表。由于精度类型不匹配,在 MySQL 5.5 之前创建的具有十进制列的表也会导致在就地升级到 MySQL 8.0.2 期间失败。(漏洞 #26542296,漏洞 #87229)
InnoDB: 在安装 MySQL 期间,报告了有关创建外键约束系统表的不必要警告。(漏洞 #26483335)
InnoDB:
ALTER TABLE
由于二级索引条目计数不匹配, 查询在并发操作期间被中断 (漏洞#26381213)InnoDB: 尝试打开在禁用严格模式以包含冲突
TABLESPACE
和COMPRESSION
属性时更改的表时发生分段错误。(缺陷号 26375851)InnoDB: 在使用 TempTable 存储引擎的 DML 操作期间发生分段错误。(缺陷号 26363837)
InnoDB:操作 期间的隐式行格式转换
ALTER TABLE ... REORGANIZE PARTITION
引发了无效断言。(缺陷号 26326611)InnoDB:重建加密表 的
ALTER TABLE
操作没有正确设置加密属性。(漏洞#26243264)InnoDB: 当使用
TempTable
内存内部临时表的存储引擎时,在 Windows 上遇到内存泄漏。(缺陷号 26237680)InnoDB: 在未启用 Valgrind 测试的服务器构建上运行 Valgrind 测试时会产生误导性错误。(错误号 26037206)
InnoDB: 与删除孤立的全文搜索表相关的有问题的代码在启动时导致无效的对象 ID 断言失败。(缺陷号 25998362)
InnoDB: 在 DML 操作期间检查丢弃的分区仅检查第一个分区。未能检查其他丢弃的分区导致断言失败。(漏洞#25942592)
InnoDB: 分配的内存在写入文件之前未初始化,导致 Valgrind 错误。(错误#25913151,错误#85986)
InnoDB: 在同一语句中添加虚拟列和索引导致错误。(缺陷号 25899959)
InnoDB: 在对具有许多分区的表进行大型更新操作期间,从属实例上出现复制滞后。(错误#25687813,错误#85352)
InnoDB: 结束范围比较期间发生故障。(缺陷号 25669686)
InnoDB:
innodb_buffer_pool_load_now
在只读模式下 启用 向缓冲池加载线程发出信号的事件未初始化。(缺陷号 25586766)InnoDB: 多版本并发控制行搜索功能的游标位置检查引发了断言。(缺陷号 25377592)
InnoDB: 错误的变量被传递给
row_mysql_handle_errors
导致断言失败的例程。(缺陷号 25183130)InnoDB: 长时间等待全文搜索同步操作持有的字典操作锁导致服务器退出。(错误#24938374、错误#26376681、错误#26376239)
InnoDB: 修改了断言代码以说明事务尝试获取记录上的显式锁定而另一个事务在提交操作之前将隐式锁定转换为对同一记录的显式锁定的可能性。(漏洞 #24344131)
InnoDB:
FLUSH TABLES ... FOR EXPORT
对加密或页面压缩表 的 (漏洞 #22916982)InnoDB:
DROP TABLE
不允许innodb_force_recovery
设置大于 0 的InnoDB: 在
CREATE TABLE ... SELECT
提交事务之前删除新创建的表时,操作引发断言失败。(缺陷号 22154768)InnoDB:
ALTER TABLE
由于重复的约束名称,在未指定外键约束名称的情况下重建表并添加外键 的就地InnoDB
没有考虑现有的外键约束名称。这个问题在 MySQL 8.0.3 中得到解决,当时外键元数据被移动到数据字典,外键约束名称生成被移动到 SQL 层。(错误#18199504,错误#71616)InnoDB:
InnoDB
删除了在外键检查期间 锁定数据字典的错位函数调用 (缺陷 #12917178,缺陷 #62221)InnoDB: 尝试使用现有外键约束名称时报告的错误消息不一致,并不总是提供足够的信息。(缺陷 #11925430,缺陷 #60633)
分区: 在某些情况下,当获取堆记录时,分区 ID 可以设置为零。(缺陷 #86255,缺陷 #26034430)
分区:
CREATE TABLE
创建分区表失败 的语句可能InnoDB
正确回滚。这是由于在执行外键信息检查时进行了无关的提交。由于分区表目前不支持外键,这种检查是不必要的,因此在这种情况下不再进行。(缺陷 #85299,缺陷 #25667278)-
分区: 涉及
NULL
的查询并不总是在由 . 分区的表上得到正确处理LIST
。(错误#76418,错误#20748521)参考资料:另请参阅:Bug #86255、Bug #26034430。
Replication: 在多线程slave上,由于relay log使用的磁盘空间记录的更新时机,有可能出现死锁状态。更新的时间现已更改,因此不会发生死锁。(缺陷号 26729635)
复制:设置后,死锁可能发生 在
slave_preserve_commit_order=1
持有表共享写锁的事务与提交顺序中较早的也需要共享写锁的事务之间。(漏洞#26666609)复制: Group Replication 流控制变量现在可以正确地允许您在一个组中拥有一些不影响流控制机制的最小吞吐量的成员,有效地忽略这些成员以防它们被阻塞。(漏洞#26537497)
复制:
opt_reckless_slave
删除 了未使用的变量(漏洞 #26500285)复制: 当 Group Replication 插件
Delayed_initialization_thread
由于资源不可用而无法启动时,会保留一个锁定的互斥量,这会导致Delayed_initialization_thread
析构函数出现问题。该修复可确保在线程启动失败时解锁互斥量。(缺陷号 26394678)复制: 在以单主模式部署的 Group Replication 插件延迟初始化的情况下,辅助节点能够通过异步复制通道进行写入,这在 Group Replication 插件的正常初始化中是不允许的。(漏洞#26314756)
复制: 如果选项文件包含与组复制相关的设置,服务器可能会在启动时意外停止。(漏洞#26314472)
复制:
FLUSH LOGS
在提交阶段已发送错误响应后尝试发送 OK 消息。感谢 Laurynas Biveinis 提供补丁。(错误#26272158、错误#25363745、错误#84437)复制: 使用为事件日志事件生成的 GTID,无法使用
--slave-skip-errors=1590
复制从站上的启动选项跳过 MySQL 错误代码 1590 (ER_SLAVE_INCIDENT)。(缺陷号 26266758)复制: 在恢复成员上
COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE
时设置为不正确的值group_replication_recovery_complete_at="transactions_certified"
(缺陷号 26180350)复制: 为组复制恢复通道配置时
group_replication_recovery_use_ssl
和 的值group_replication_recovery_ssl_verify_server_cert
(漏洞#26142801)复制: 复制带有索引的分区表时,在
HASH_SCAN
指定为slave_rows_search_algorithms
设置一部分的复制从站上,从站 I/O 线程有时会因错误而停止HA_ERR_KEY_NOT_FOUND
。(缺陷号 26137159)复制: 可以设置
server_uuid
为与 相同的值group_replication_group_name
。这样做可能会导致意外行为,因为 GTID 由 UUID 标识。现在无法设置server_uuid
为与 相同的值group_replication_group_name
。(漏洞 #26035931)复制:供内部服务器使用 的系统变量
pseudo_slave_mode
,有时会在事务内部更改时引发断言。服务器不再在事务中更改此变量。(缺陷 #26034192,缺陷 #86250)复制: 当写集被复制从属(由系统变量指定)用于并行化时
binlog_transaction_dependency_tracking
,空事务现在被忽略,并且中继日志轮换的处理得到了优化。(漏洞#25982097)复制: Performance Schema
replication_applier_status_by_worker
表有时会错误地为不活动的工作人员显示 APPLYING_TRANSACTION 的值,因为在工作线程停止之前正在填充该表。(漏洞 #25896166,漏洞 #85951)复制: 尝试在
START GROUP_REPLICATION
执行时卸载插件可能会导致意外行为。(错误#25423650、错误#91042、错误#28088177)复制: 如果在创建多个从属应用程序工作线程时发生故障,一些线程将被孤立,并且不会收集它们的资源。感谢 Laurynas Biveinis 为修复此错误所做的贡献。(缺陷 #24679056,缺陷 #82980)
复制: 该
binlog_checksum
选项不能在事务中更改。当在二进制日志上执行请求的功能时,MySQL 无法记录此语句,正如事务内部所需要的那样。(漏洞 #22914463)复制: 可以使用组复制流控制选项的无效值启动服务器。现在,
--group-replication-flow-control-min-quota
、--group-replication-flow-control-max-quota
和--group-replication-flow-control-min-recovery-quota
选项在服务器启动时得到验证。(漏洞 #87206,漏洞 #26531899)复制: 如果主机名解析不适用于组复制中的成员,则尝试连接时返回的错误是指凭据。改进了错误消息以描述主机名解析问题。(漏洞 #86858,漏洞 #26368004)
复制:当单主模式处于活动状态时 ,组复制插件不再设置
auto_increment_increment
和auto_increment_offset
(漏洞 #86669,漏洞 #26263155)复制: 组复制分区线程在性能模式表中不可见。(漏洞 #86626,漏洞 #26241008)
复制:
group_replication_force_members
可以在小组工作正常的情况下使用,换句话说,大多数人可以到达。这种不正确的使用可能会导致组的不稳定。因此,它的使用仅限于创建它的场景,用于在无法访问大多数成员时从先前组成员的子集形成新成员。(缺陷 #86359,缺陷 #26093967)-
复制: 在同时运行Group Replication和异步复制的成员上,异步复制不遵守Group Replication要求的限制,例如仅使用InnoDB存储引擎,需要主键的表等。对成员运行mysqlbinlog时也可能遇到这种情况现在,运行 Group Replication 和异步复制的成员不允许 Group Replication 的要求被破坏。(漏洞 #85164,漏洞 #25609945)
参考资料:另请参阅:Bug #85781、Bug #25828806。
复制: 将运行较低版本的成员加入运行较高版本的组会导致运行较高版本的成员无法访问。(缺陷 #85026,缺陷 #25568493)
JSON:
Json_object
JSON 对象和数组 (和 的内部表示中的容器Json_array
已更改为使用智能指针而不是指向 的原始指针Json_dom
,因此现在可以自动销毁孤立的 DOM 对象。(漏洞#26161264)JSON:
\u001f
当 JSON 文档被格式化为字符串(例如,by )时,未引用 JSON 文档中字符串文字中的 ASCII 字符 31(CAST('"\u001f"' AS JSON
)。(缺陷号 25977959)JSON: 当 a
path_expression
标识一个非数组值时,JSON_INSERT()
和JSON_ARRAY_INSERT()
函数无法将path_expression
[0] 计算为等于path_expression
。(缺陷 #86213,缺陷 #26022576)-
JSON:使用通配符进行 搜索
JSON_EXTRACT()
花费了大量时间。(漏洞 #84523,漏洞 #25418534)参考资料:另请参阅:Bug #83959、Bug #25151440。
重负载下,Performance Schema buffer container代码出现死循环。(漏洞#26666274)
如果包含头文件,则 MySQL 特定的 typedef(例如
uchar
和my_bool
)会无意中重新引入到客户端名称空间中。mysql.h
(错误#26588846、错误#26582752、错误#87337)uint8korr()
和相关的宏已修复,因此即使在 x86 上,它们也可以显式地进行未对齐的访问。(错误#26568748,错误#87298),
main.mysql_upgrade_grant,
main.roles-upgrade
和auth_sec.secure_file_priv_warnings
, 测试用例错误处理了错误日志。sys_vars.innodb_redo_log_encrypt_basic
测试用例输出不稳定。 感谢 Laurynas Biveinis 提供的补丁。(错误#26562401、错误#87279、错误#26575150、错误#87313、错误#26575142、错误#87314、错误#26582158、错误#87303)对于调试版本,
sql_buffer_result
启用递归公用表表达式会导致服务器退出。(缺陷号 26556025)将窗口函数错误地解析为常量函数可能会导致服务器退出。(漏洞 #26500442)
对于窗口函数,使用
GROUP BY ... WITH ROLLUP
可能会导致服务器退出。(错误#26497353,错误#26497247)对于窗口函数,
JSON
列提出了断言。(缺陷号 26496733)对于窗口函数,小于
RANGE
框架参数的值会导致服务器退出。(漏洞#26496645)编译 with
-DWITHOUT_SERVER=1
导致my_symlink.c
编译失败,因为缺少#include
formy_dir.h
. 感谢 Christian Hesse 提供的补丁。(错误#26495816,错误#87137)假设系统 openssl zlib命令可用,但实际情况可能并非如此。现在检查该命令的可用性,如果不可用, 则构建zlib_decompress实用程序。(缺陷 #26494495,缺陷 #87123)
-DWITH_SSL=system
-DWITH_ZLIB=system
yaSSL 可能错误地执行 TLS 密码协商。(漏洞#26482173)
某些
thread_stack
设置可能会导致服务器退出。(缺陷号 26438067)对于窗口函数,
ROW
框架接受行计数的非整数参数。(缺陷 #26411055,缺陷 #86990)REPLACE(UUID(),...)
表达式可以被缓存(不正确地)并为结果集的每一行返回相同的值。(缺陷号 26395601)在源代码树中构建 MySQL 时,make install将一些
CMake
文件安装到mysql-test
树中的目录中。(缺陷 #26385175,缺陷 #86905)PROCESS_ID
Performance Schemasession_connect_attrs
和session_account_connect_attrs
表中 的列已从更改INT
为BIGINT UNSIGNED
以适应更大的进程 ID 值。感谢 Daniël van Eeden 提供补丁。(漏洞 #26357806,漏洞 #86835)生成列上的索引(其值是从 生成的
JSON_EXTRACT()
)有时在本应被优化器使用时未被优化器使用。(漏洞 #26352119)将
log_error_services
系统变量设置为NULL
导致服务器退出。(漏洞#26331795)对于tar文件包,一些测试套件共享库安装在服务器包而不是测试包中。(缺陷号 26329850)
SHOW COLUMNS
对于有效视图可能会失败。(错误#26322203,错误#86778)导致重命名或删除直方图统计信息的操作可能导致服务器退出。(漏洞 #26303972)
对于
VARCHAR
列,使用显式排序规则 ( ) 进行排序比使用隐式排序规则(无 子句)慢得多,即使显式排序规则与隐式排序规则相同。(漏洞 #26286790,漏洞 #86710)ORDER BY
col_name
COLLATEcollation_name
COLLATE
SET binlog_format = ROW
产生语法错误,因为ROW
现在是保留字。现在专门识别此语法以保持向后兼容性。(缺陷号 26269280)SET PERSIST_ONLY
, 应该只允许拥有SYSTEM_VARIABLES_ADMIN
和PERSIST_RO_VARIABLES_ADMIN
特权的用户使用,但错误地也允许拥有SUPER
特权的用户使用。(缺陷号 26247864)-
MySQL 8.0.0 中引入的
information_schema_stats
配置选项已被删除并替换为information_schema_stats_expiry
.information_schema_stats_expiry
INFORMATION_SCHEMA
定义缓存表统计信息 的过期设置 。有关详细信息,请参阅 优化 INFORMATION_SCHEMA 查询。和
TABLES_DYNAMIC
内部STATISTICS_DYNAMIC
系统视图已删除。(缺陷 #26203731,缺陷 #83957) Debian 平台的源代码包包含预构建的调试二进制文件,导致在除构建这些二进制文件的架构之外的任何架构上构建失败。(缺陷号 26186911)
如果在服务器启动期间使用,可加载函数注册服务将不起作用。(缺陷号 26173244)
通过更改性能模式
setup_objects
表来禁用表检测可能会导致索引统计信息中的索引名称不正确。(漏洞 #26162562)尝试删除不存在的表空间文件时返回误导性错误消息。(漏洞 #26133507,漏洞 #86438)
当使用该 选项 运行mysqlbinlog
--read-from-remote-server
时 ,使用该选项指定的重写规则将--rewrite-db
被忽略,因此数据不会写入目标数据库。(漏洞 #26117735,漏洞 #86288)在 DDL 操作期间从数据字典缓存复制的时间戳数据使用
time_zone
不再有效的值进行转换。生成的时间戳数据不正确,导致发布版本出错和调试版本断言失败。(漏洞 #26091333,漏洞 #86290)成功的数据字典更新但未能写入二进制日志事件可能会导致不一致的状态。(缺陷号 26037355)
mysqlbinlog现在打印事件类型的完整元数据
Table_map_log_event
。(漏洞 #26020990)ALTER EVENT
语句 中的某些字符串函数可能会导致服务器退出。(漏洞 #25942505)卸载
daemon_memcached
插件导致严重错误。(缺陷号 25909540)使用公共表表达式和许多
?
参数的准备好的语句可能会很慢。(漏洞 #25903274,漏洞 #85933)对于带有 子句的
UPDATE
or 语句,优化器有时无法识别比 . (漏洞#25899921)DELETE
ORDER BY ... LIMIT
filesort
rpl_diff.inc
测试用例文件没有发现服务器之间的数据差异 。感谢 Yura Sorokin 提供的补丁。(错误#25860138,错误#85838)ngram 全文解析器搜索查询返回不正确的结果并提出断言。(漏洞 #25851975)
索引虚拟生成列、外键和触发器的组合可能会引发断言。(漏洞 #25817660,漏洞 #85757)
从视图中选择可能会产生不同的结果,具体化启用与具体化禁用。(漏洞 #25782811,漏洞 #85622)
使用
SET PERSIST
设置event_scheduler
系统变量后,如果使用该--skip-grant-tables
选项启动,服务器无法重新启动。(缺陷号 25776940)对于调试版本,向具有外键关系的表添加索引可能会引发断言。(漏洞 #25739983)
该 表从存储引擎而不是数据字典
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
请求外键信息 。InnoDB
(缺陷号 25730513)失败
DROP VIEW
可以写入二进制日志。(缺陷号 25680097)SHOW CREATE VIEW
有时会在原始视图定义中不存在的表名中添加数据库名称前缀。(错误#25634576,错误#85176)Performance Schema
variables_info
表显示不正确VARIABLE_SOURCE
,并且 在or 指令VARIABLE_PATH
指定的选项文件中设置了变量值。(漏洞#25563891)!include
!includedir
对于基于 UCA 的归类,常量字符串传播可能会失败。(漏洞 #25503965,漏洞 #84837)
mysqlpump显示有关转储表数的错误进度信息。(缺陷号 25432850)
UCA 9.0.0 归类的计算对于定制包含收缩字符的规则效率低下。(错误#25426632、错误#84577、错误#25426632、错误#84577)
GROUP BY DESC
onDECIMAL
值可能会错误地NULL
与非NULL
值分组。(漏洞 #25407964,漏洞 #84537)一些mysqldump警告进入标准输出而不是标准错误输出,因此被写入转储文件。(错误#25380000,错误#82992)
NULL
在具有该子句的视图上执行准备好的语句时,作为结果生成的值WITH ROLLUP
被替换为前一行的值。GROUP BY .. WITH ROLLUP
(缺陷号 25174118)当全文搜索结果超出
innodb_ft_result_cache_limit
设置时发生服务器错误。此漏洞的补丁还向后移植了一个相关补丁(漏洞 #21140111)。(缺陷号 25033538)MySQL 8.0.1 中的解析器重构导致某些
INSERT ... ON DUPLICATE KEY UPDATE
语句的处理不正确。这些问题已得到纠正。(错误#24716127、错误#25526439、错误#25071305)对于调试版本,具有十六进制格式默认值的或 列的
CREATE TABLE
语句导致服务器退出。(漏洞 #24679166,漏洞 #83020)VARBINARY
BINARY
如果存储函数被优化器视为常量,则从子句中的
NOT IN
条件中的子查询调用它WHERE
可能会导致服务器退出。(缺陷号 23577867)一个mysqldump内存泄漏是固定的。感谢 Yura Sorokin 提供的补丁。(缺陷 #23531150,缺陷 #81714)
当查询使用批处理密钥访问优化并且虚拟生成的列是连接缓冲区的一部分时,可能会导致不正确的结果或服务器退出。(缺陷号 23169112)
如果会话回滚到保存点然后被终止,则可以提交到保存点为止的语句。(错误#22350047,错误#79596)
MySQL 接受对外部查询块中定义的聚合表达式的别名的引用,即使引用发生在引用无意义的 GROUP BY 子查询中也是如此。(缺陷 #21974346,缺陷 #78785)
对于使用连接器/Python 并使用
sha256_password
插件进行身份验证的客户端,服务器可能无法正确处理连接。(漏洞 #21421642)某些
SELECT DISTINCT
查询GROUP BY
可能会返回不正确的结果。(缺陷 #20692219,缺陷 #76283)