Amazon RDS for MySQL LTS 8.4版本现已全面推17认证网

正规官方授权
更专业・更权威

Amazon RDS for MySQL LTS 8.4版本现已全面推

2024年11月21日,亚马逊关系型数据库服务(Amazon RDS)宣布支持MySQL 8.4版本,这是MySQL社区提供的最新的长期支持(LTS)主要版本。至此,Amazon RDS现已支持MySQL社区版的8.0和8.4版本。除了这两个社区支持的LTS版本外,Amazon RDS还在RDS扩展支持下提供MySQL 5.7版本,其中RDS为该引擎提供关键补丁和错误修复。对于这些版本,您可以将现有的MySQL代码、应用程序和工具带到Amazon RDS。

MySQL 8.4版本中,MySQL社区引入并淘汰了多项功能,这些功能均列在MySQL 8.4参考手册中。本文将探讨这些功能,列出已知的重大变更,并提供建议以帮助您将工作负载迁移到这个版本。

在我们深入探讨RDS for MySQL 8.4之前,先来看看去年社区引入的新MySQL版本模型。MySQL社区现在将每个引擎版本分类为创新发布版或长期支持(LTS)发布版。

  • 创新发布版:这些版本通常每季度发布一次,支持周期较短,非常适合开发者和数据库管理员进行早期和快速实验。截至目前,MySQL社区已宣布五个创新发布版——8.1、8.2、8.3、9.0和9.1版本。由于这些版本的生命周期较短,RDS在Amazon RDS数据库预览环境中提供这些版本。
  • 长期支持(LTS)发布版:相比之下,LTS发布版包含稳定、经过验证的功能,包括在之前的创新发布版中引入的功能,并接受社区五年的支持(RDS在社区停止支持这些版本后提供最多额外三年的RDS扩展支持)。MySQL社区预计仅在LTS系列的第一个版本中添加/移除功能,例如8.4.0。LTS系列中的增量发布,如MySQL 8.4.1和8.4.2,优先考虑向后兼容性和安全性。MySQL 8.4是社区的第一个LTS发布版,预计大约每两年发布一次LTS发布版。需要长期支持和最小化因重大变更引起的中断的企业将更倾向于选择LTS发布版而非创新发布版。

更多信息,请查看MySQL发布:创新和LTS

将Amazon RDS for MySQL 8.0数据库升级到MySQL 8.4

在开始规划MySQL升级之前,我们强烈建议您查看MySQL社区提供的升级路径指南。Amazon RDS for MySQL支持直接从MySQL 8.0升级到8.4。请注意,如果您运行的次要版本低于8.0.22,则需要先升级到更高的次要版本,然后再升级到MySQL 8.4。此外,MySQL不支持多版本升级,即您不能在主要版本或LTS升级过程中跳过版本。如果您的数据库运行的是MySQL 5.7,则需要先将MySQL 5.7升级到MySQL 8.0,然后再将MySQL 8.0升级到MySQL 8.4。

当您将Amazon RDS for MySQL 8.0数据库升级到MySQL 8.4时,有多种选项:使用Amazon RDS蓝绿部署、读取副本,或执行原地升级。在这些选项中,我们建议您使用Amazon RDS蓝绿部署以最小化数据库升级期间的风险和停机时间。检查新的主要/LTS版本与您现有应用程序的兼容性在升级的整体成功中起着至关重要的作用。Amazon RDS蓝绿部署创建两个数据库环境:您当前的生产环境(蓝)和暂存环境(绿)。蓝和绿环境通过原生逻辑复制保持同步,因此您可以安全地在暂存(绿)环境中测试更改,并仅在您确信应用程序与新版本兼容时才将其提升为主要环境。这种方法允许您在生产设置旁边安全地测试数据库升级,并允许您在不影响生产环境的情况下识别和解决问题。

在以下部分中,我们将讨论MySQL 8.4引入的一些重大变更,这些变更可能与您的应用程序相关。

变更了与性能相关的参数默认值

MySQL 8.4中,社区更改了几个参数的默认值,可能会影响刷新行为。Amazon RDS for MySQL使用相同的默认值。我们建议您在升级之前彻底测试这些新默认值与您的应用程序的兼容性。尽管这些更改旨在提高整体性能,但某些工作负载可能需要额外的参数调整。仔细审查每个参数更改,并考虑其对您特定用例的影响。以下表格显示了MySQL 8.0和8.4之间默认参数值的差异:

参数 Amazon RDS for MySQL 8.0默认值 Amazon RDS for MySQL 8.4默认值
innodb_adaptive_hash_index ON OFF
innodb_change_buffering ALL NONE
innodb_buffer_pool_instances 8(如果innodb_buffer_pool_size小于1 GB,则为1) 如果innodb_buffer_pool_size小于或等于1 GiB,默认innodb_buffer_pool_instances值为1。如果innodb_buffer_pool_size大于1 GiB,默认innodb_buffer_pool_instances值为以下两个计算提示的最小值,范围在1-64之间:- 缓冲池提示:计算为(innodb_buffer_pool_size / innodb_buffer_pool_chunk_size)的1/2 – CPU提示:计算为可用逻辑处理器的1/4
innodb_page_cleaner_threads 4 等于innodb_page_buffer_pool_instances
innodb_io_capacity 200 10000
innodb_io_capacity_max 2 * innodb_io_capacity, 最小2000 2* innodb_io_capacity
innodb_read_io_threads 4 可用逻辑处理器/2,最小值为4
innodb_purge_threads 1 Amazon RDS默认值:LEAST({DBInstanceVCPU/2}, 4)。上游默认值:如果可用逻辑处理器数量小于或等于16,则为1;否则为4。
innodb_log_buffer_size 16 MB 64 MB
temptable_max_ram 1 GB 总内存的3%,范围在1-4 GiB之间
temptable_max_mmap 1 GB 0,即OFF
temptable_use_mmap ON OFF

将默认身份验证插件设置为caching_sha2_password

从MySQL 8.4开始,Amazon RDS将默认身份验证插件切换为caching_sha2_password。caching_sha2_password插件实现了SHA-256密码哈希和服务器端缓存,以提高性能。

身份验证插件决定了在用户尝试连接到MySQL服务器时用于验证其身份的方法。它定义了用于验证凭据和授权访问数据库系统的协议和算法。以前的默认身份验证插件mysql_native_password从MySQL 8.0.34开始被社区弃用,并已在MySQL 9.0及后续创新发布版中完全移除。我们鼓励您在创建新用户时使用新的默认身份验证插件,即caching_sha2_password

当使用caching_sha2_password插件连接到RDS for MySQL数据库实例时,您必须使用SSL。MySQL 5.7及更高版本的命令行客户端默认启用SSL。如果使用未加密的连接,则连接应支持使用RSA密钥对进行密码交换以维护安全性。

以下示例显示了如何在禁用SSL的情况下使用RSA密钥对交换连接到数据库。

请注意,MySQL 5.7之前的客户端版本不支持caching_sha2_password身份验证插件。为确保兼容性,重要的是将您的MySQL客户端升级到最新版本。

如果您将现有的Amazon RDS实例从MySQL 8.0升级到MySQL 8.4,您的现有数据库用户(包括主用户)将继续使用mysql_native_password。然而,所有新用户将使用caching_sha2_password身份验证插件创建。我们鼓励您将使用mysql_native_password创建的现有用户迁移到使用caching_sha2_password插件。您可以使用以下ALTER USER命令将使用mysql_native_password创建的现有用户修改为caching_sha2_password

您可以使用以下查询列出所有使用mysql_native_password身份验证插件的用户。

在迁移用户之前,请确保您的客户端驱动程序与caching_sha2_password身份验证插件兼容。

限制使用非唯一键或部分键作为外键

MySQL社区已弃用在创建或修改表时使用非唯一或部分键作为外键的能力,并将在将来的版本中移除。为了管理这种过渡,MySQL 8.4包括一个名为restrict_fk_on_non_standard_key的新参数,默认设置为ON。此设置防止使用非唯一或部分键作为外键。您可以通过将其设置为OFF来恢复到以前的行为。然而,我们建议您遵循最佳实践,并修改您的模式,仅使用唯一键作为外键。

引入自动直方图更新

MySQL 8.4引入了一个名为自动直方图更新的功能,旨在提高查询优化的效率和准确性。在以前的版本中,更新直方图需要手动执行ANALYZE TABLE…UPDATE HISTOGRAM…命令来更新直方图。MySQL 8.4引入了自动更新,当满足某些阈值时会触发。要在特定直方图上启用自动更新,请运行ANALYZE TABLE…UPDATE HISTOGRAM…并使用AUTO UPDATE选项。

要验证是否启用了直方图的自动更新,您可以查询information_schema.column_statistics表中的HISTOGRAM列。在JSON输出中查找“auto-update”: true属性。

具体来说,对于使用InnoDB引擎的表,innodb_stats_auto_recalc参数在表的行超过10%被修改时触发自动直方图更新。此阈值确保统计信息保持相关性,无需不断手动刷新,这可以帮助提高查询性能,特别是在复杂查询上。

自动直方图重新计算是异步的,因此可能不会在数据发生重大变化后立即发生。在大多数情况下,延迟很小,通常只有几秒钟,但它允许MySQL在系统性能需求和对最新统计信息的需求之间取得平衡。MySQL 8.4中的自动直方图更新简化了查询优化,并减少了维护开销,允许更一致和高效的数据库性能。

对于频繁或大量数据变化的表,您可以依赖自动功能,或根据需要调整重新计算阈值。更多信息,请查看配置持久优化器统计参数。或者,对于需要精确控制直方图更新的表,指定MANUAL UPDATE选项提供了在高负载环境中的灵活性,减少了频繁重新计算可能带来的性能影响。

更新了Group Replication插件

MySQL 8.4对Group Replication插件进行了几项更新,该插件通常用于在分布式系统中实现持续可用性或容错。一些关键变化包括:

  • 默认系统变量更改——group_replication_consistency的默认值现在设置为BEFORE_ON_PRIMARY_FAILOVER,取代了以前的默认值EVENTUAL。这在故障转移事件期间提供了更严格的事务一致性。此外,group_replication_exit_state_action现在默认设置为OFFLINE_MODE,从READ_ONLY转变,这改变了节点处理故障情况的方式。
  • 支持跨版本成员资格——在8.4系列中,不同8.4版本的服务器仍然可以加入同一个复制组,使版本管理更加灵活。
  • 引入Group Replication状态变量——Group Replication引入了一组新的状态变量,以提供对其操作的详细洞察。这些变量提供有关各种方面的信息,如共识提议、认证垃圾收集、消息传输、事务一致性等。这些状态变量具有成员范围,反映本地观察结果,并在组引导、成员加入、自动重新加入或服务器重新启动时重置。有关更多信息,请参阅MySQL参考手册。

这些更新使MySQL Group Replication更加健壮,提供了更好的一致性保证和版本管理的灵活性。

从语法、参数组和存储过程中移除非包容性术语

MySQL社区一直在积极淘汰所有非包容性语言。从MySQL 8.4开始,社区已停止支持已弃用的复制相关的SQL语句。尝试使用这些语句现在会导致语法错误。例如,SHOW MASTER STATUS现在是SHOW BINARY LOG STATUSSHOW SLAVE STATUS现在是SHOW REPLICA STATUS。审查并更新任何包含这些已弃用术语的存储过程,因为可能会导致您的升级失败。您可以参阅MySQL参考手册,了解已更改的复制语句语法的完整列表。

同样,Amazon RDS从MySQL 8.4开始过渡到使用包容性语言。例如,术语slave已被术语replica替换在参数名称中。这一变化扩展到所有配置参数和系统变量。例如:slave_parallel_workers现在是replica_parallel_workers。我们建议您更新现有自动化脚本、监控工具和自定义配置中的新参数名称。您可以在RDS用户指南中了解更多关于这一过渡的信息。

当您将Amazon RDS for MySQL数据库升级到MySQL 8.4 LTS时,主要版本升级过程会自动更新所有RDS存储过程,以使用包容性术语。以下表格说明了新的和现有的程序名称。

新的包容性名称(RDS for MySQL 8.4) 以前的名称(RDS for MySQL 8.0 & RDS for MySQL 8.4)
rds_reset_external_source rds_reset_external_master
rds_set_external_source_with_auto_position rds_set_external_master_with_auto_position
rds_next_source_log rds_next_master_log
rds_set_external_source rds_set_external_master
rds_set_external_source_with_delay rds_set_external_master_with_delay
rds_set_source_auto_position rds_set_master_auto_position

Amazon RDS for MySQL 8.4支持这两组存储过程,以确保向后兼容性。然而,我们鼓励您采用新的、包容性的命名约定。旧的程序将在Amazon RDS for MySQL的未来版本中被移除,因此过渡到新名称将有助于确保长期兼容性,并符合行业最佳实践的包容性语言。

对于所有用户创建的存储过程,我们强烈建议您手动审查并更新任何包含不受支持术语的自定义存储过程。未能这样做可能会导致在您的主要版本升级期间出现问题。升级预检查过程将尝试识别所有受影响的程序,但列表可能不是详尽无遗的。

移除了binlog_transaction_dependency_tracking

从MySQL 8.4开始,社区已移除binlog_transaction_dependency_tracking变量。MySQL现在使用WRITESETS为二进制日志生成依赖信息,当使用多线程复制时。此行为等同于在早期MySQL版本中将binlog_transaction_dependency_tracking设置为WRITESET。这一变化旨在提高多线程复制场景的性能优化。

在本文中,我们讨论了MySQL社区在8.4 LTS发布中添加或移除的功能。在以下部分中,我们将探讨Amazon RDS for MySQL 8.4特有的增强功能。

用AWS-LC替换OpenSSL作为加密库提供商

从8.4版本开始,Amazon RDS for MySQL与AWS Libcrypto(AWS-LC)FIPS模块(证书#4816)集成。Amazon RDS for MySQL 8.4支持TLS 1.2和TLS 1.3,并支持以下密码套件:

我们建议您验证客户端应用程序与这些支持的TLS版本和密码套件的兼容性。这对于提供无缝连接和维护新加密库提供的增强安全性至关重要。

默认启用InnoDB_dedicated_server

从MySQL 8.4开始,Amazon RDS默认启用innodb_dedicated_server参数,允许数据库引擎根据底层实例自动计算innodb_buffer_pool_sizeinnodb_redo_log_capacity的最佳值。这可能会为某些工作负载带来性能提升。在我们的测试中,当innodb_dedicated_server默认启用时,与禁用此参数的配置相比,我们观察到DML吞吐量最高可提高3倍。

innodb_redo_log_capacity值是基于vCPU数量计算的。公式是(nVCPUs/2)GB,最大动态默认值为16 GB。另一方面,innodb_buffer_pool_size是基于DB实例类内存计算的,如下表所示。

检测到的服务器内存 缓冲池大小
小于1 GB 128 MB(默认值)
1 GB至4 GB 检测到的服务器内存 * 0.5
大于4 GB 检测到的服务器内存 * 0.75

尽管innodb_dedicated_server自动计算InnoDB缓冲池和重做日志的大小,但您仍然可以选择在参数组中使用自定义值覆盖innodb_redo_log_capacityinnodb_buffer_pool_size。如果您选择自定义值,我们建议您保持innodb_dedicated_server启用。这样,如果参数组中重置了这些参数,它们将恢复为innodb_dedicated_server计算的值,而不是默认到可能不合适的100 MB的innodb_redo_log_capacity和128 MB的innodb_buffer_pool_size。有关更多详细信息,请参阅启用专用MySQL服务器的自动InnoDB配置。

从选项组中移除Memcached插件

MySQL社区在8.0.22版本中弃用了Memcached插件,并从MySQL 8.4开始完全移除。因此,RDS for MySQL选项组不再支持MEMCACHED作为选项。作为替代方案,我们建议您使用Amazon RDS for MySQL外部的缓存服务,如Amazon ElastiCache。

将binlog_format默认值切换为ROW

binlog_format变量的默认值已更改为ROW,这提供了更准确和高效的数据复制,并是设置Amazon RDS与Amazon Redshift零ETL集成的先决条件。

binlog_format设置为ROW时,在读取副本上回放二进制日志时,如果表缺少主键,MySQL必须扫描整个表以更新每行。这可能会导致意外的延迟,尤其是在多行更新操作期间。为缓解此问题,我们强烈建议您审查数据库模式,并确保所有表都定义了适当的主键。

请注意,对于具有两个可读备用实例的RDS Multi-AZ部署,已从集群参数组中移除binlog_format。相反,我们现在使用默认的binlog_format设置,即ROW

将InnoDB_purge_threads默认值更改为随vCPU数量扩展

Purge是MySQL数据库中的一个清理操作。InnoDB存储引擎依赖它来清理不再需要的undo日志和标记为删除的表记录,以实现多版本并发控制(MVCC)或回滚操作。在Amazon RDS for MySQL 8.4上,InnoDB purge线程现在根据底层实例的vCPU数量动态扩展,以防止历史列表长度的累积。innodb_purge_threads参数在RDS for MySQL 8.4上默认为LEAST({DBInstanceVCPU/2}, 4),而不是以前版本中设置的固定值1。要了解如何为您特定的应用程序工作负载微调InnoDB purge线程以获得最佳性能,请查看专门讨论此主题的全面博客文章。

结论

本文讨论了MySQL社区的新版本模型、MySQL 8.4 LTS增强功能以及Amazon RDS for MySQL 8.4引入的变更。我们还概述了如何使用Amazon RDS蓝绿部署将Amazon RDS for MySQL升级到MySQL 8.4,以最小化停机时间。我们鼓励您尝试Amazon RDS for MySQL 8.4 LTS版本的新功能和性能改进。


关于作者

img Mershad Irani是亚马逊网络服务的数据库工程师。他是Amazon RDS for MySQL和Amazon Aurora MySQL的专家,与Amazon RDS产品团队紧密合作,通过确定改进领域和帮助塑造Amazon RDS生态系统的未来方向,为开发和增强创新产品贡献他的专业知识。

img Vijay Karumajji是亚马逊网络服务的首席数据库解决方案架构师。他与客户合作,提供数据库项目的指导和技术帮助,帮助他们提高使用AWS时解决方案的价值。

想了解更多资讯

扫码关注👇

了解更多考试相关

扫码添加上智启元官方客服微信👇

未经允许不得转载:17认证网 » Amazon RDS for MySQL LTS 8.4版本现已全面推
分享到:0

评论已关闭。

400-663-6632
咨询老师
咨询老师
咨询老师