MySQL 8.4 Reference Manual  /  General Information  /  What Is New in MySQL 8.4 since MySQL 8.0

1.4 MySQL 8.4 的新特性 since MySQL 8.0

本节总结了MySQL 8.4中相对于MySQL 8.0而添加、废弃、更改和移除的内容。一个配套部分列出了在MySQL 8.4中添加、废弃或移除的服务器选项和变量;请参阅第1.5节,“MySQL 8.4中自8.0起添加、废弃或移除的服务器选项和变量”

以下是MySQL 8.4中添加的功能:

  • MySQL原生密码认证更改。 从MySQL 8.4.0开始,已被弃用的mysql_native_password认证插件不再默认启用。要启用它,请使用--mysql-native-password=ON(在MySQL 8.4.0中添加)或将mysql_native_password=ON包含在您的MySQL配置文件的[mysqld]部分中(在MySQL 8.4.0中添加)。

    有关启用、使用和禁用 mysql_native_password 的更多信息,请参阅第 8.4.1.1 节,“Native Pluggable Authentication”

  • InnoDB 系统变量默认值更改。 MySQL 8.4.0 中,对于InnoDB 存储引擎的多个服务器系统变量默认值进行了更改,见以下表格:

    表 1.1 MySQL 8.4 中与 MySQL 8.0 不同的 InnoDB 系统变量默认值

    InnoDB System Variable Name New Default Value (MySQL 8.4) Previous Default Value (MySQL 8.0)
    innodb_buffer_pool_in_core_file OFF 如果支持 MADV_DONTDUMP,否则 ON ON
    innodb_buffer_pool_instances

    If innodb_buffer_pool_size <= 1 GiB, then innodb_buffer_pool_instances=1

    如果 innodb_buffer_pool_size > 1 GiB,则这是以下两个计算提示在 1-64 范围内得出的最小值:

    8 (or 1 if innodb_buffer_pool_size < 1 GiB)
    innodb_change_buffering none all
    innodb_dedicated_server 如果 ON[a],则 innodb_flush_method 的值不再会被改变,如 MySQL 8.0 中那样,但计算 innodb_redo_log_capacity 的方式从基于内存的更改为基于 CPU 的。有关更多信息,请参阅第 17.8.12 节,“为专用 MySQL 服务器启用自动配置” OFF
    innodb_adaptive_hash_index OFF ON
    innodb_doublewrite_files 2 innodb_buffer_pool_instances * 2
    innodb_doublewrite_pages 128 innodb_write_io_threads,默认值为 4
    innodb_flush_method 在 Linux 上 O_DIRECT 如果支持的话,否则 fsync fsync
    innodb_io_capacity 10000 200
    innodb_io_capacity_max 2 * innodb_io_容量 2 * innodb_io_容量,最小默认值为2000
    innodb_log_buffer_size 67108864(64 MiB) 16777216(16 MiB)
    innodb_numa_interleave ON OFF
    innodb_page_cleaners innodb_buffer_pool_instances 4
    innodb_parallel_read_threads 可用逻辑处理器数 / 8,最小默认值为4 4
    innodb_purge_threads 如果可用逻辑处理器数少于或等于16,则为1,否则为4 4
    innodb_read_io_threads 可用逻辑处理器数除以2,且默认值最小为4 4
    innodb_use_fdatasync ON OFF
    temptable_max_ram 总内存的3%,默认值在1-4 GiB范围内 1073741824(1 GiB)
    temptable_max_mmap 0,表示OFF 1073741824(1 GiB)
    temptable_use_mmap[b] OFF ON

    [a] 这个变量的实际默认值为OFF,与MySQL 8.0保持一致。

    [b] 在 MySQL 8.0.26 中已被弃用。


  • 克隆插件。  克隆插件的版本要求已经放宽,允许在同一系列中的不同点发布之间进行克隆。换句话说,只需确保主版本号和次版本号匹配,而不再需要点发布号也必须匹配。

    例如,现在可以克隆 8.4.0 到 8.4.14,以及反向操作。

  • 基于 SASL 的 LDAP 认证在 Windows 上。  在 Microsoft Windows 上,SASL 基于的 LDAP 认证服务器插件现在得到支持。这意味着 Windows 客户端可以使用 GSSAPI/Kerberos 与 authentication_ldap_sasl_client 插件进行认证。

    有关更多信息,请参阅 基于 SASL 的 LDAP 认证

  • MySQL 复制:SOURCE_RETRY_COUNT 变更。  CHANGE REPLICATION SOURCE TO 语句的 SOURCE_RETRY_COUNT 选项的默认值已更改为 10。这意味着,使用此选项和 SOURCE_CONNECT_RETRY (60) 的默认值时,副本在重连尝试之间等待 60 秒,并以每分钟 10 次重连尝试的速率持续尝试,直到超时并失败转移。

    此更改还适用于已废弃的--master-retry-count服务器选项的默认值。请使用SOURCE_RETRY_COUNT代替。

    欲知更多信息,请参阅第19.4.9.1节,“异步连接故障转移(源)”

  • MySQL 复制:标记的 GTIDs。 MySQL 复制和群组复制中的全局事务标识符(GIDs)的格式已被扩展,以便能够识别事务组,使得可以为属于特定事务组的 GTIDs 分配一个唯一名称。例如,包含数据操作的事务可以通过比较其 GTIDs 来轻松区分于仅由管理操作组成的事务。

    新版GTID格式是 UUID:标签:数字,其中 标签 是一个由1到8个字符组成的字符串,可以通过将gtid_next系统变量设置为 自动:标签 来启用,该功能在本次发布中添加(请参阅该变量的描述以获取标签格式和其他信息)。这个标签对于当前会话中的所有事务都是持久的(除非使用 SET gtid_next 更改),并且在提交时应用于这些事务,或者在使用群组复制时,在认证时间。还可以将 gtid_next 设置为 UUID:标签:数字 来为单个事务设置一个自定义的UUID和标签。对于 UUIDNUMBER 的分配,其他方面与之前的MySQL版本保持一致。在任何情况下,都由用户负责确保标签在给定的复制拓扑中是唯一的。

    原有的 UUID:NUMBER 格式的GTID格式继续保持不变,按照之前版本的MySQL实现;对使用GTIDs的现有复制设置进行更改是不必要的。

    设置 gtid_nextAUTOMATIC:标签 或者 UUID:标签:数字 需要在这个版本中添加一个新的TRANSACTION_Gtid_Tag特权,这个是对源服务器以及复制线程的 PRIVILEGE_CHECKS_APPLIER 都需要;这意味着管理员现在可以限制使用 SET @gtid_next=AUTOMATIC:标签 或者 UUID:标签:数字 到特定的MySQL用户或角色上,只有那些与某个数据或操作域相关的用户才能使用带有分配标签的事务。

    Note

    从之前版本升级到MySQL 8.4时,任何已经拥有BINLOG_ADMIN特权的用户账户或角色都会自动获得 TRANSACTION_Gtid_Tag 特权。

    内置函数GTID_SUBSET()GTID_SUBTRACT()WAIT_FOR_EXECUTED_GTID_SET() 与带标签的 GTIDs 兼容。

    更多信息请参阅 gtid_next 系统变量和 TRANSACTION_GTID_TAG 权限的说明,以及 第 19.1.4 节 “更改在线服务器上的 GTID 模式”

  • 复制:SQL_AFTER_GTIDS 和 MTA。START REPLICA 语句选项 SQL_AFTER_GTIDS 现在与多线程应用器兼容。(以前,当启用 MTA 并且用户尝试使用此选项时,该语句会引发警告 ER_MTS_FEATURE_IS_NOT_SUPPORTED,并且副本会切换到单线程模式。)这意味着需要赶上缺失事务的副本现在可以这样做,而不会失去多线程带来的性能优势。

    对于更多信息,请参阅第15.4.2.4节,“START REPLICA 语句”,以及有关replica_parallel_workers系统变量的文档。请参阅第19.2.3.2节,“监控复制应用程序工作者线程”,以及第25.7.11节,“NDB 集群复制使用多线程应用程序”

  • 复制术语向后兼容性。 本次发布添加了--output-as-version选项用于mysqldump。该选项允许您从MySQL 8.2或更高版本的服务器创建一个兼容旧版本MySQL的备份;其值,以下列出的其中之一,确定了在备份中使用的复制术语的兼容性:

    • SERVER:获取服务器版本并使用与该MySQL版本兼容的最新复制语句和变量名称。

    • BEFORE_8_2_0:输出与运行MySQL 8.0.23至8.1.0(含)的服务器兼容。

    • BEFORE_8_0_23:输出与之前的MySQL版本兼容,包括8.0.22及以下版本。

    请参阅该选项的描述以获取更多信息。

    此外,对于系统变量terminology_use_previous,添加了一个新的值。BEFORE_8_2_0会导致服务器在SHOW CREATE EVENT的输出中打印DISABLE ON SLAVE(现在已过时),而不是DISABLE ON REPLICA。现有的值BEFORE_8_0_26现在也会产生这个效果,除了它之前已经有的其他效果。

  • MySQL版本号在版本特定的注释中使用时,可以包含一个或两个数字的主版本号;这意味着整个版本号可以是五位数或六位数。关于如何更改影响MySQL处理版本化注释的详细信息,请参阅第11.7节,“Comments”

  • group_replication_set_as_primary() 和 DDL 语句。 group_replication_set_as_primary()函数在等待所有事务完成之前,会等待正在进行的DDL语句,如ALTER TABLE,以便在选举新主服务器前完成。

    有关此函数的更多信息,请参阅其描述。

  • DDL和DCL语句跟踪对于group_replication_set_as_primary()。 group_ replication_set_as_primary()现在等待以下语句完成后才会选举新的主节点:

    这些语句在MySQL 8.4中新增,除了在MySQL 8.1中添加的语句以及此前已支持的语句。有关更多信息,包括MySQL 8.3中所有支持的语句列表,请参阅group_replication_set_as_primary()函数的描述。

  • Group Replication变量默认值。 MySQL 8.4中更改了与Group Replication相关的两个服务器系统变量的默认值:

    有关更多信息,请参阅第20.5.3.2节,“配置事务一致性保证”,以及第20.7.7节,“对故障检测和网络分区的响应”,以及上述变量描述。

  • binlog_transaction_dependency_tracking 默认值更改。 binlog_transaction_dependency_tracking 服务器系统变量在 MySQL 8.2.0 中被弃用。在为最终移除该变量做准备,其默认值现在是 WRITESET。没有计划替换这个变量或其功能,预计将来会将其内置到服务器中。

  • 添加了多个与Group Replication插件特定的状态变量,用于改善网络不稳定性诊断和故障排除,提供有关每个组成员网络使用、控制消息和数据消息的统计信息。

    请参阅第20.9.2节,“Group Replication Status Variables”,获取更多信息。

    在进行此工作的过程中,对性能模式replication_group_communication_表添加了一个新的MEMBER_FAILURE_SUSPICIONS_COUNT列。该列的内容以JSON数组格式表示,其键为组成员ID,值为考虑该组成员可疑次数的数量。请参阅该表的描述获取更多信息。

  • FLUSH_PRIVILEGES 权限。MySQL 8.4.0中添加了一个新的特权,用于允许使用FLUSH PRIVILEGES语句。与RELOAD权限不同,FLUSH_PRIVILEGES权限仅适用于FLUSH PRIVILEGES语句。

    在MySQL 8.4中,RELOAD权限继续被支持,以提供向后兼容性。

    在升级时,会进行检查,看是否有用户拥有 FLUSH_PRIVILEGES 权限;如果没有,则任何拥有 RELOAD 权限的用户都会自动获得新权限。

    从 MySQL 8.4 (或更高版本) 降级到不支持 FLUSH_PRIVILEGES 权限的版本时,如果一个用户曾经被赋予了这个权限,他将无法执行 FLUSH PRIVILEGES 语句,除非该用户拥有 RELOAD 权限。

  • OPTIMIZE_LOCAL_TABLE 权限。  MySQL 8.4.0 引入了一个新的 OPTIMIZE_LOCAL_TABLE 权限。用户必须拥有这个权限才能执行 OPTIMIZE LOCAL TABLEOPTIMIZE NO_WRITE_TO_BINLOG TABLE 语句。

    从之前的发布系列升级时,拥有 SYSTEM_USER 权限的用户会自动获得 OPTIMIZE_LOCAL_TABLE 权限。

  • MySQL企业数据遮罩和去标识化。 数据遮罩组件添加了支持指定一个专用的模式来存储相关的内部表格和遮罩函数。之前,mysql 系统模式提供了唯一的存储选项。新的component_ masking. masking_database 只读变量允许在服务器启动时设置并持久化一个备用模式名称。

  • 数据遮罩字典的刷新。 MySQL企业数据遮罩和去标识化组件现在包括了将数据从副本或复制源刷入内存的能力。这可以通过以下两种方式之一进行:

    更多信息,请参阅第8.5节,“MySQL企业数据遮罩和去标识化”,以及这些项目的描述。

  • 自动更新直方图。 MySQL 8.4.0 引入了对直方图自动更新的支持。当启用此特性时,直方图将在运行 ANALYZE TABLE 语句对其所属表进行分析时自动更新。此外,由 InnoDB 持久统计的自动重新计算(参见Section 17.8.10.1 “Configuring Persistent Optimizer Statistics Parameters”)也会更新直方图。即使没有指定数量的桶,直方图的更新仍然使用原始指定的桶数相同。

    您可以在指定直方图时通过在 ANALYZE TABLE 语句中包含 AUTO UPDATE 选项来启用此特性。要禁用它,请使用 MANUAL UPDATE 而不是 AUTO UPDATE。如果既没有指定 AUTO UPDATE 也没有指定 MANUAL UPDATE,则默认为 MANUAL UPDATE(不自动更新)。

    有关更多信息,请参阅直方图统计分析

  • 添加了tls-证书-enforced-验证系统变量,这允许DBA在服务器启动时或使用ALTER 实例 RELOAD TLS语句重新加载证书时强制证书验证。启用强制后,发现无效的证书将在启动时阻止服务器运行,并在运行时防止加载无效的证书,还会发出警告。有关详细信息,请参阅配置证书验证强制

  • 添加了服务器系统变量来控制使用LDAP插件身份验证连接到MySQL服务器的MySQL账户在LDAP服务器下线或响应迟缓时等待的时间。以下简单和SASL-基于LDAP身份验证变量的默认超时时间为30秒:

    连接和响应超时可以通过Linux平台上的系统变量进行配置。对于更多信息,请参阅LDAP插件认证的超时设置

  • 服务器关闭过程的日志记录被增强,添加了MySQL服务器、插件和组件的启动和关闭消息。现在还包括了关闭连接的消息。这些新增加的信息应该有助于排查问题,尤其是在服务器关闭时间过长时进行调试。

    对于更多信息,请参阅第7.4.2节“错误日志”

  • 服务器启动和关闭消息的新增内容。 在服务器启动和关闭过程中添加了以下类型的消息,如下所列:

    • 使用--initialize--initialize-insecure启动服务器时的服务器初始化开始和结束消息;这些与正常服务器启动和关闭过程中的消息相区别。

    • InnoDB初始化的开始和结束消息。

    • 服务器初始化期间执行init文件的开始和结束消息。

    • 服务器初始化期间编译时语句执行的开始和结束消息。

    • 服务器启动过程中的崩溃恢复(如果发生)开始和结束消息。

    • 服务器启动期间动态插件初始化的开始和结束消息。

    • 服务器启动时组件初始化步骤的开始和结束消息(在服务器启动期间可见)。

    • 副本线程和连接线程的关闭消息,以及优雅关闭和强制关闭的连接线程消息,均在服务器关闭期间出现。

    • 服务器关闭时插件和组件的开始和结束消息。

    • 初始化或服务器关闭过程中的退出代码(返回值)信息与关闭消息一起出现。

    如果服务器使用了WITH_SYSTEMD选项进行构建,那么现在服务器将在错误日志中包含所有systemd消息。

  • 添加了SHOW PARSE_TREE语句,该语句显示了JSON格式的解析树,用于一个SELECT语句。这一语句仅供测试和开发使用,不适合生产环境。它只在调试版本中可用,或者如果MySQL使用源代码构建,并且使用了CMake-DWITH_SHOW_PARSE_TREE选项,那么它将被包含和支持,但在发布版本中不包括或不受支持。

  • 线程池插件连接信息。 添加了MySQL性能_schema中的线程池连接信息,具体如下:

    • 添加了tp_connections表,该表包含每个线程池连接的信息。

    • tp_thread_state 表中添加了以下列:TIME_OF_ATTACHMARKED_STALLEDSTATEEVENT_COUNTACCUMULATED_EVENT_TIMEEXEC_COUNT,和 ACCUMULATED_EXEC_TIME

    • tp_thread_group_state 表中添加了以下列:EFFECTIVE_MAX_TRANSACTIONS_LIMITNUM_QUERY_THREADSTIME_OF_LAST_THREAD_CREATIONNUM_CONNECT_HANDLER_THREAD_IN_SLEEPTHREADS_BOUND_TO_TRANSACTIONQUERY_THREADS_COUNT,和 TIME_OF_EARLIEST_CON_EXPIRE

    更多信息,请参阅第 7.6.3 节,“MySQL Enterprise Thread Pool”第 29.12.16 节,“Performance Schema Thread Pool Tables”

  • 信息架构 PROCESSLIST 表使用说明。 尽管 INFORMATION_SCHEMA.PROCESSLIST 表在 MySQL 8.0.35 和 8.2.0 中被废弃,但仍有兴趣追踪其使用情况。该版本添加了两个系统状态变量,提供有关访问 PROCESSLIST 表的信息,这里列举如下:

  • 集合操作的哈希表优化。 MySQL 8.2 通过一个新的哈希表优化来提高使用集合操作 EXCEPTINTERSECT 的语句性能。这个优化在执行这些操作时自动启用,并且可以通过设置 hash_set_operations 优化器开关来控制;要禁用此优化并导致优化器使用旧的临时表优化(MySQL 之前版本中的优化),请将该标志设置为 off

    可以通过设置服务器系统变量set_operations_buffer_size来控制为此优化分配的内存量;增加缓冲区大小还能进一步提高某些使用这些操作语句执行时间的性能。

    请参阅《10.9.2 可切换优化》,获取更多信息。

  • WITH_LD CMake 选项。 WITH_LD:定义是否使用LLVM lld或mold链接器,否则使用标准链接器。WITH_LD还替换了MySQL 8.3.0中移除的USE_LD_LLDCMake选项。

  • MySQL企业防火墙增强功能。 自MySQL 8.0以来,MySQL Enterprise Firewall已进行了多项增强。这些增强如下所列:

    • 由MySQL Enterprise Firewall提供的存储过程现在以事务性方式运行。当执行防火墙存储过程时发生错误时,将报告错误,并回滚到该点之前所有由存储过程做出的更改。

    • 火墙存储过程现在避免执行不必要的组合操作,包括DELETEINSERT语句的组合,以及INSERT IGNOREUPDATE操作的组合,这样可以减少时间消耗和资源使用,使其运行更快,更高效。

    • 基于用户的存储过程和UDF(用户定义函数),在MySQL 8.0.26中被弃用,现在会发出一个警告。特别地,调用sp_set_firewall_mode()sp_reload_firewall_rules()会产生这样的警告。有关更多信息,请参阅火墙帐户配置存储过程以及迁移帐户配置到组配置

    • MySQL Enterprise Firewall现在允许其内存缓存在定期的时间间隔后从火墙表中重新加载数据。系统变量mysql_ firewalls_reload_interval_seconds设置了运行时使用的周期性重载计划,或者默认禁用重载。在之前的实现中,只有在服务器启动或重新安装服务器端插件时才会重新加载缓存。

    • 添加了mysql_火墙数据库服务器系统变量,以便于在自定义模式中存储内部表、函数和存储过程。

    • 添加了卸载_火墙.sql脚本,简化了安装的火墙卸载过程。

    关于火墙存储程序的更多信息,请参阅MySQL Enterprise Firewall Stored Procedures

  • 可插拔认证.  支持使用智能卡、安全钥匙和生物识别读取器等设备对MySQL服务器进行认证。在WebAuthn上下文中,新添加的WebAuthn认证方法基于FIDO和FIDO2标准。它使用一对插件,认证_webauthn在服务器端和认证_webauthn_client在客户端上。仅在MySQL Enterprise Edition发行版中包含的WebAuthn认证插件。

  • 密钥环迁移.  支持从密钥环组件迁移到密钥环插件。要执行此类迁移,请使用在MySQL 8.4.0中引入的--keyring-migration-from-component服务器选项,将--keyring-migration-source设置为源组件的名称,并将--keyring-migration-destination设置为目标插件的名称。

    请参阅使用迁移服务器进行密钥迁移,获取更多信息。

  • MySQL企业审计.  添加了audit_log_filter_uninstall.sql脚本,以简化卸载MySQL企业审计的过程。

以下功能在MySQL 8.4中已被弃用,并可能在未来版本中移除。在有替代方案的地方,应更新应用程序以使用它们。

对于依赖于MySQL 8.4中已被弃用的功能并在后续版本中被移除的应用程序,当从一个运行MySQL 8.4的源服务器复制到一个运行更高版本的副本时,语句可能会失败,或者在源和副本上有不同的效果。为了避免这些问题,使用了8.4中已弃用的功能的应用程序应被更新以避免它们并尽可能使用替代方案。

  • group_Replication_Allow_Local_Lower_Version_Join系统变量.  group_Replication_Allow_Local_Lower_Version_Join 系统变量已被弃用,并且设置它会导致一个警告(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT)被记录到日志中。

    您应该预期这个变量在MySQL的未来版本中会被移除。由于设置group_Replication_Allow_Local_Lower_Version_Join启用的功能现在不再有用,因此没有计划为其提供替代方案。

  • 组复制恢复元数据。 组复制恢复不再依赖于将视图更改事件写入二进制日志来标记组成员身份的变化;而是,当所有组成员都是MySQL 8.3.0或更高版本时,成员之间共享压缩的恢复元数据,并且当一个新成员加入组时,不会记录(或分配GTID)这样的事件。

    恢复元数据包括GCS视图ID、GTID_SET认证事务的集合以及认证信息,以及在线成员的列表。

    由于View_change_log_event不再参与恢复,group_replication_view_change_uuid系统变量不再需要,因此现在已被弃用;预计将在未来MySQL版本中移除。您应该了解没有为此变量或其功能提供替代方案的计划,并且应根据这一点开发您的应用程序。

  • WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()函数。 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() SQL函数在MySQL 8.0中被弃用,并且自MySQL 8.2起不再支持。尝试调用此函数现在会导致语法错误。

    取代WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(),建议使用WAIT_FOR_EXECUTED_GTID_SET,它允许您等待特定的GTIDs。这无论是通过哪个复制通道或用户客户端到达服务器上的指定事务都适用。

  • 基于GTID的复制和忽略服务器ID。 当使用全局事务标识符(GTIDs)进行复制时,已经应用的事务将自动被忽略。这意味着IGNORE_SERVER_IDS与GTID模式不兼容。如果gtid_mode设置为ON,则使用非空CHANGE REPLICATION SOURCE TO语句时会因为错误而被拒绝。同样,如果任何现有的复制通道在创建时指定了要忽略的服务器ID列表,执行SET gtid_mode=ON也会被拒绝。在启动基于GTID的复制之前,在涉及到的服务器上检查并清除任何忽略的服务器ID列表;您可以通过SHOW REPLICA STATUS的输出来进行检查。在这种情况下,您可以通过使用一个空列表的CHANGE REPLICATION SOURCE TO语句来清除列表,如下所示:

    CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();

    请参阅第19.1.3.7节,“基于GTIDs的复制限制”,获取更多信息。

  • 二进制日志事务依赖性跟踪和记录格式。 对冲突检测使用writeset信息已被发现会导致依赖性跟踪问题;因此,我们现在仅在行级别记录有效时限制对writesets的冲突检查的使用。

    这意味着,从本次发布开始,如果binlog_transaction_dependency_tracking设置为WRITESETWRITESET_SESSION,则binlog_format必须为ROWMIXED在这种情况下不再被支持。

  • expire_logs_days系统变量。 MySQL 8.0中已废弃的expire_logs_days服务器系统变量已经被移除。尝试在运行时获取或设置此变量,或者使用等效选项(--expire-logs-days)启动mysqld现在会导致错误。

    取代expire_logs_days,请使用binlog_expire_logs_seconds,它允许您指定以秒为单位的过期时间,而不仅限于整数天。

  • 数据库授权中的通配符字符。 MySQL 8.2.0中已经废弃了在数据库授权中使用%_作为通配符的功能。您应该预期将来会移除这些通配符的功能,并且在partial_revokes服务器系统变量为ON时,这些字符将始终被视为字面值,就像现在一样。因此,请避免在未来的MySQL版本中使用这些通配符字符。相反,应使用更具体的授权规则来控制对数据库的访问权限。

    此外,服务器将%视为localhost的同义词进行权限检查的处理方式,从MySQL 8.2.0开始已经被弃用,因此在未来MySQL版本中可能会被移除。

  • --character-set-client-handshake选项.  --character-set-client-handshake服务器选项,原本为与非常旧版本MySQL进行升级时设计的,现在已经被弃用,并且在使用时会发出警告。您应该预期这个选项将来会被移除;依赖于此选项的应用程序应尽快开始迁移到新的选项。

以下项目已经被废弃,并在MySQL 8.4中被移除。如有替代方案,应更新应用程序以使用它们。

对于依赖于MySQL 8.4中已移除特性的MySQL 8.3应用程序,当这些应用程序从MySQL 8.3的源服务器复制到MySQL 8.4的副本时,可能会遇到语句失败的问题,或者在源和副本上产生不同的效果。为了避免这样的问题,使用MySQL 8.4中已移除特性的应用程序应被更新以避免它们并尽可能使用替代方案。

  • 已移除的服务器选项和变量.  MySQL 8.4中已经移除了多个在之前版本中支持的服务器选项和变量。尝试在MySQL 8.4中设置任何一个都会引发错误。这些选项和变量如下所列:

    • binlog_transaction_dependency_tracking:在MySQL 8.0.35和MySQL 8.2.0中被弃用。没有计划替换这个变量或其功能,它已经被内部化到服务器中。在MySQL 8.4(及以后的版本)中,当使用多线程复制时,源mysqld总是使用always writesets来生成依赖信息以写入二进制日志;这与在MySQL的前版本中设置binlog_transaction_dependency_trackingWRITESET相同。

    • group_replication_recovery_complete_at:在MySQL 8.0.34中被弃用。在MySQL 8.4及以后的版本中,分布式恢复过程中的策略总是标记一个新成员在线,只有在它接收、认证并应用了所有在它加入组之前发生的事务后;这相当于在MySQL的前版本中设置group_replication_recovery_complete_atTRANSACTIONS_APPLIED

    • avoid_temporal_upgradeshow_old_temporals:这两个变量在MySQL 5.6中被弃用;它们在最近的MySQL版本中都没有任何效果。现在,这两个变量已经被移除,没有计划替换它们。

    • --no-dd-upgrade:在MySQL 8.0.16中被弃用,现在已被移除。请使用--upgrade=NONE代替。

    • --old--new:这两个在MySQL 8.0.35和MySQL 8.2.0中被弃用,现在已被移除。

    • --language:在MySQL 5.5中被弃用,现在已被移除。

    • 在MySQL 8.0.26版本中,--ssl--admin-ssl服务器选项,以及have_sslhave_openssl服务器系统变量被废弃。它们在本次发布中被移除。请使用--tls-version--admin-tls-version代替。

    • 在MySQL 8.0.27版本中,default_authentication_plugin系统变量被废弃,现在在MySQL 8.4.0版本中被移除。请使用authentication_policy代替。

      随着default_authentication_plugin的移除,authentication_policy的语法发生了变化。有关authentication_policy的更多信息,请查看其描述。

    • --skip-host-cache 服务器选项已被移除;请以 --host-cache-size=0 的形式启动服务器。有关第7.1.12.3节“DNS查询和主机缓存”的更多信息,请查看。

    • --innodb 和 --skip-innodb 服务器选项已被移除。InnoDB 存储引擎始终启用,无法禁用它。

    • --character-集客户端握手和--old-style用户限制服务器选项。 这些选项以前用于与非常旧版本MySQL兼容,但这些版本已不再支持或维护,因此不再有任何实际用途。

    • FLUSH HOSTS语句。 已在MySQL 8.0.23中废弃的FLUSH HOSTS语句已经被移除。要清空主机缓存,请使用TRUNCATE TABLEperformance_ schema.host_cachemysqladmin flush-hosts

  • 过时的复制选项和变量。 在MySQL 8.4中,多个与MySQL复制相关的选项和变量已经被废弃,并从MySQL 8.4中移除。尝试使用这些现在会导致服务器抛出语法错误。这些选项和变量如下所列:

    • --slave-rows-search-algorithms:复制应用程序在应用更新或删除时查找表行的算法,现在总是使用HASH_SCAN,INDEX_SCAN,不再由用户可配置。

    • log_bin_use_v1_events:允许源服务器运行MySQL 5.7及以上版本向早期版本的MySQL进行复制,但这些早期版本已不再支持或维护。

    • --relay-log-info-file, --relay-log-info-repository, --master-info-file, --master-info-repository:使用文件作为应用程序元数据仓库和连接元数据仓库的方式已经被崩溃安全表所取代,不再支持。请参阅第19.2.4.2节,“复制元数据仓库”

    • transaction_write_set_extraction

    • group_replication_ip_whitelist:请使用group_Replication_ip_allowlist

    • group_replication_primary_member:不再需要;请检查性能_schema中的复制组成员表的MEMBER_ROLE列

  • 复制SQL语法。 MySQL复制中的一些SQL语句在早期版本的MySQL中已经被弃用,现在在MySQL 8.4中不再支持尝试使用这些语句将产生语法错误。这些建议可以分为两组,分别是源服务器和副本服务器相关的语句,如下所示:

    作为本工作的一部分,DISABLE ON SLAVE 选项对于 CREATE EVENTALTER EVENT 现在已经被废弃,并由 DISABLE ON REPLICA 取代。相应的术语 SLAVESIDE_ DISABLED 也现在已经被废弃,不再用于事件描述,如信息架构中的 EVENTS 表;REPLICA_SIDE_ DISABLED 现在被显示出来。

    所有之前列出的语句都已从MySQL测试程序和文件中移除,以及从任何其他内部使用中移除。

    此外,多个已废弃的选项,曾经由CHANGE REPLICATION SOURCE TOSTART REPLICA支持,但现在已经被移除并且不再被服务器接受。每个SQL语句的移除选项列表如下:

    此外,作为本次工作的一部分,以下服务器状态变量,由于已被弃用,现在已经被移除。它们在这里列出,其中包括了它们的替代品:

    • Com_slave_start:使用 Com_Replica_start

    • Com_slave_stop:使用 Com_replica_stop

    • Com_show_slave_status:使用 Com_show_replica_status

    • Com_show_slave_hosts:使用 Com_show_replicas

    • Com_show_master_status:使用 Com_show_binary_log_status

    • Com_change_master:使用 Com_change_replication_source

    刚刚列出的变量不再出现在像 SHOW STATUS 语句的输出中。请参阅 Com_xxx 变量

  • 插件。 在 MySQL 8.4.0 中,有几个插件被移除,并在这里列出,包括与它们相关的系统变量和其他功能,它们也随着插件的移除而被移除或受到影响:

    • authentication_fidoauthentication_fido_client 插件:使用 authentication_webauthn 插件。请参阅 第 8.4.1.11 节,“WebAuthn 可插拔认证”

      已移除的变量、选项和构建参数包括 authentication_ fido_rp_id 服务器系统变量,mysql 客户端的 --fido-register-factor 选项,以及 CMake 构建参数 -DWITH_FIDO

    • keyring_file 插件:请使用 component_keyring_file 组件。详见第 8.4.4.4 节,“使用文件基的 keyring_file 组件”

      此外,已移除 keyring_file_data 系统变量。另外,CMake 构建参数 -DINSTALL_MYSQLKEYRINGDIR-DWITH_KEYRING_TEST 也被移除了。

    • keyring_encrypted_file 插件:请使用 component_keyring_encrypted_file 组件。详见第 8.4.4.5 节,“使用加密文件基的 keyring_encrypted_file 组件”

      已移除 keyring_encrypted_file_datakeyring_encrypted_file_password 系统变量。

    • keyring_oci 插件:请使用 component_keyring_oci 组件。详见第 8.4.4.9 节,“使用 Oracle 云基础设施密钥环组件”

      以下服务器系统变量也被移除:keyring_oci_ca_证书keyring_oci_分区keyring_oci_加密终端keyring_oci_密钥文件keyring_oci_密钥指纹keyring_oci_管理终端keyring_oci_主密钥keyring_oci_秘密终端keyring_oci_租户keyring_oci_用户keyring_oci_保管库终端,以及keyring_oci_虚拟保管库

    • openssl_udf 插件:使用 MySQL Enterprise 加密 (component_enterprise_encryption) 组件;请参阅第 8.6 节,“MySQL Enterprise 加密”

  • 对弱加密算法的支持。 当配置加密连接时,MySQL 8.4.0 及更高版本不再允许指定任何不符合以下要求的加密器:

    • 遵循适当的 TLS 版本(TLS v1.2 或 TLSv1.3,根据需要)

    • 提供完美前向保密性

    • 在加密器、证书或两者中使用 SHA2

    • 使用 AES-GCM 或任何其他 AEAD 算法或模式

    这对以下系统变量有影响:

    查看这些变量的描述以获取MySQL 8.4中允许的值,并获得更多信息。

    Note

    libmysqlclient 继续支持不符合这些条件的额外加密方法,以便能够连接到旧版本的MySQL。

  • INFORMATION_SCHEMA.TABLESPACES.  INFORMATION_SCHEMA.TABLESPACES 表格,实际上并未使用,已在MySQL 8.0.22中被弃用,现在已经被移除。

    Note

    对于NDB表格,信息架构中的FILES表格提供了有关表空间的信息。

    对于InnoDB表格,信息架构中的INNODB_TABLESPACESINNODB_DATAFILES表格提供了有关表空间元数据的信息。

  • DROP TABLESPACE 和 ALTER TABLESPACE: ENGINE 子句。 ENGINE 子句用于 DROP TABLESPACEALTER TABLESPACE 语句在 MySQL 8.0 中已经被弃用。在 MySQL 8.4 中,它不再支持,尝试使用时会引发错误,尤其是与 DROP TABLESPACEALTER TABLESPACE ... DROP DATAFILE 一起使用。ENGINE 也不再支持所有其他的 ALTER TABLESPACE 变体,除了以下两个例外:

    • ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}

    • ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE} ENGINE=INNODB

    有关这些语句的更多信息,请查看它们的文档。

  • LOW_PRIORITY 与 LOCK TABLES ... WRITE。 LOCK TABLES ... WRITE 语句中的 LOW_PRIORITY 子句自 MySQL 5.5 起就没有效果,并在 MySQL 5.6 中被弃用。在 MySQL 8.4 中,它不再支持;将其包含在 LOCK TABLES 中现在会导致语法错误。

  • 解释JSON格式版本化. 现在可以选择使用由 EXPLAIN FORMAT=JSON 语句输出的2种不同版本的JSON格式,通过在本次发布中引入的 explain_json_format_version 服务器系统变量。将这个变量设置为 1 会使得服务器使用版本1,即线性格式,这是MySQL 8.2及之前版本对这样的语句输出的默认值和格式。在MySQL 8.4中也是这样。在将 explain_json_format_version 设置为 2 时,会使用版本2格式的JSON输出,这种格式基于访问路径,并旨在提供与未来的MySQL优化器版本更好的兼容性。

    查看获取执行计划信息,以获取更多信息和示例。

  • 捕获EXPLAIN FORMAT=JSON输出.  EXPLAIN FORMAT=JSON 已经扩展了一个 INTO 选项,这个选项允许将JSON格式的 EXPLAIN 输出存储到用户变量中,以便使用MySQL JSON函数进行处理,例如:

    mysql> EXPLAIN FORMAT=JSON INTO @myex SELECT name FROM a WHERE id = 2;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT JSON_EXTRACT(@myex, "$.query_block.table.key");
    +------------------------------------------------+
    | JSON_EXTRACT(@myex, "$.query_block.table.key") |
    +------------------------------------------------+
    | "PRIMARY"                                      |
    +------------------------------------------------+
    1 row in set (0.01 sec)

    这个选项只能在包含 FORMAT=JSONEXPLAIN 语句中使用;否则会出现语法错误。这一点不受 explain_format 系统变量的影响。

    INTO 可以与任何可解释的语句一起使用,除了 EXPLAIN FOR CONNECTION。它不能与 EXPLAIN ANALYZE 一起使用。

    为了获取更多信息和示例,请参阅获取执行计划信息

  • EXPLAIN FOR SCHEMA. EXPLAIN 语句添加了一个 FOR SCHEMA 选项。语法如下所示,其中 stmt 是一个可解释的语句:

    EXPLAIN [options] FOR SCHEMA schema_name stmt

    这将导致在命名模式下运行 stmt

    FOR DATABASE 同样被支持作为同义词。

    这个选项与 FOR CONNECTION 不兼容。

    请参阅获取执行计划信息,以获取更多信息。

  • 客户端注释保留.  在 MySQL 8.0 中,默认行为是从 mysql 客户端中去除注释;在 MySQL 8.0 及更早版本中,MySQL 服务器默认保留这些注释。

    要启用像 MySQL 8.0 和更早版本那样进行的注释去除,请使用 --skip-comments 启动 mysql 客户端。

  • AUTO_INCREMENT和浮点数列。FLOATDOUBLE列中使用AUTO_INCREMENT修饰符的CREATE TABLEALTER TABLE语句在MySQL 8.0中已被弃用;在MySQL 8.4中,它将完全移除,并引发ER_WRONG_FIELD_SPEC字段指定错误)错误。

    在升级到MySQL 8.4之前,从前一系列版本升级,您必须修复任何包含FLOATDOUBLE列的表,该列使用了AUTO_INCREMENT,以便该表不再使用这些类型。否则,升级将失败。

  • mysql_ssl_ rsa_ setup实用程序。 在MySQL 8.0.34中被弃用的mysql_ ssl_ rsa_ setup实用程序已被移除。对于使用OpenSSL编译的MySQL发行版,MySQL服务器可以在启动时自动生成缺失的SSL和RSA文件。请参阅第8.3.3.1节,“使用MySQL创建SSL和RSA证书和密钥”,获取更多信息。

  • MySQL 权限.  添加了 SET_ANY_DEFINER 权限用于定义对象的创建,以及 ALLOW_NONEXISTENT_DEFINER 权限用于保护孤儿对象。这些权限与已废弃的 SET_USER_ID 权限共存。

  • SET_USER_ID 权限.  MySQL 8.2.0 中已废弃的 SET_USER_ID 权限已经被移除。现在在 GRANT 语句中使用它将导致语法错误。

    代替 SET_USER_ID,您可以使用 SET_ANY_DEFINER 权限进行定义对象的创建,以及 ALLOW_NONEXISTENT_DEFINER 权限用于保护孤儿对象。

    两种权限都需要来创建使用CREATE PROCEDURECREATE FUNCTIONCREATE TRIGGERCREATE EVENTCREATE VIEW 创建的孤儿 SQL 对象。

  • --abort-slave-event-count 和 --disconnect-slave-event-count 服务器选项。  MySQL 8.0 中已废弃并在本次发布中移除的服务器启动选项 --abort-slave-event-count--disconnect-slave-event-count,原用于测试,现在尝试使用这些选项启动mysqld 将导致错误。

  • mysql_upgrade 工具。  在 MySQL 8.0.16 中已废弃的 mysql_upgrade 工具已经被移除。

  • MySQL 数据库备份工具。 mysqlpump 工具及其辅助工具 lz4_解压缩zlib_解压缩 自 MySQL 8.0.34 起已被弃用,取而代之的是使用 mysqldumpMySQL Shell 的备份工具

  • 过时的 CMake 选项。 用于编译服务器的以下 CMake 选项已被弃用并移除:

    • USE_LD_LLD:请使用 WITH_ LD=lld 代替。

    • WITH_BOOSTDOWNLOAD_BOOSTDOWNLOAD_BOOST_TIMEOUT:这些选项现在不再必要,因为 MySQL 现在在从源代码编译时会包含并使用一个捆绑的 Boost 版本。