Amazon Aurora MySQL 版本 2兼容 MySQL 57升级到版本 3兼容 M
Amazon Aurora MySQL 升级检查清单第 2 版至第 3 版
关键要点
提醒用户:Amazon Aurora MySQL 版本 2兼容 MySQL 57的标准支持将于2024年10月31日结束。建议尽早将数据库升级到 Amazon Aurora MySQL 版本 3兼容 MySQL 80。注意:升级会导致应用程序停机,需提前规划。重点关注常见的升级预检查失败原因及解决方案。Amazon Aurora MySQL 版本 2兼容 MySQL 57计划于 2024 年 10 月 31 日结束标准支持。有关 Amazon Aurora MySQL 版本 2 的标准支持结束时间表,请参见我们的公开文档。我们建议您尽早将数据库升级到 Amazon Aurora MySQL 版本 3 或更高版本,在2024年10月31日之前。Amazon Aurora MySQL 版本 3兼容 MySQL 80提供众多好处,例如社区增强功能、高效的无服务器架构 V2、零 ETL 解决方案、I/O 优化支持、增强的二进制日志binlog 和 AWS Graviton3 支持。
执行升级时,需要在升级期间使应用程序停机。Amazon Aurora MySQL 会对整个集群的引擎版本进行升级,因此写入和读取 DB 实例会同时升级。升级持续时间因多个因素而异,例如您的架构属性、数据库元数据的大小以及集群的繁忙程度。您可以通过测试数据库克隆进行升级评估来确定所需时间。请注意,创建测试环境可能会产生额外费用。
升级可以采取就地升级、快照和恢复,或者使用 Amazon RDS 蓝绿部署,后者是减少应用程序停机时间的首选方法。在进行主要版本之间的升级时,需要进行详尽且仔细的规划和测试,无论是在升级之前和之后。本文将讨论升级和升级预检查失败的最常见原因。必须在执行升级之前解决这些问题。
升级预检查
Amazon Aurora MySQL 执行的主要版本升级是一个多阶段过程,而升级预检查是该过程的第一步。MySQL 80 引入了许多增强功能,但也存在与 MySQL 57 的不兼容之处,这可能导致从 Amazon Aurora MySQL 版本 2 升级到版本 3 时出现潜在问题。当您启动升级时,Amazon Aurora MySQL 自动运行预检查以检测这些不兼容性。在就地升级中,预检查在数据库实例关闭进行升级之前运行,因此它们不会导致停机。如果预检查发现不兼容性,Aurora 会在数据库实例关闭之前自动取消升级。在快照恢复和 Amazon RDS 蓝绿部署中,如果 Amazon Aurora MySQL 版本 3 的升级过程失败,则会在创建并升级写入实例时检测到该问题。Aurora 将保留原始的 57 兼容写入实例。这样,您可以检查 Amazon Aurora MySQL 在执行升级之前运行的预检查日志。Aurora 会在日志文件 upgradeprecheckslog 中详细记录每个不兼容性的信息。您可以使用 downloaddblogfileportion CLI 命令下载此文件。

在升级生产数据库之前,最佳实践是创建生产数据库的克隆,并对克隆集群执行就地升级,以查看您的集群是否存在不兼容问题。当 upgradeprecheckslog 中的 detectedProblems 字段包含值为 Error 的条目时,表示在您纠正这些问题之前,升级无法成功。要汇总错误并显示相关对象和描述字段,可以对 upgradeprecheckslog 文件的内容运行命令 grep A 2 level Error。这样可以显示每个错误行及其后两行。这些行包含相应数据库对象的名称以及有关如何纠正问题的指导。以下是一个示例:
grep A 2 level Error upgradeprecheckslog
level ErrordbObject testtesttable1description Table testtesttable1 contains one or more capital letters in name while lowercasetablenames = 1level ErrordbObject testtesttable2description present in INFORMATIONSCHEMAs INNODBSYSTABLES table but missing from TABLES table
upgradeprecheckslog 文件的结尾总结了遇到的每种类型的轻微或严重问题的检查数量。非零的 errorCount 表示升级将失败。warningCount 不会直接影响升级过程,但建议在可能的情况下进行修正,以避免升级后出现可能的问题。
errorCount 2warningCount 58noticeCount 0Summary 2 errors were found Please correct these issues before upgrading to avoid compatibility issues
接下来的部分将介绍升级预检查失败的最常见原因。
集群的数据字典或用户架构中的中间表不一致
数据字典是一个元数据集合,用于跟踪对象,例如表和索引。MySQL 8 及 Amazon Aurora MySQL 版本 3支持原子数据定义语言 (DDL) 语句,而 MySQL 57 及 Amazon Aurora MySQL 版本 2 不支持。因此,在 MySQL 57 及 Amazon Aurora MySQL 版本 2 中,突然中断的 DDL 可能导致表的数据字典不一致。此问题是由 MySQL 的设计引起的,并非由 Amazon Aurora MySQL 或 Amazon 关系数据库Amazon RDS造成的。对于具有不一致数据字典问题的表,您将在 upgradeprecheckslog 中获得以下错误:
{id schemaInconsistencyChecktitle Schema inconsistencies resulting from file removal or corruptionstatus OKdescription Error Following tables show signs that either table datadir directory or frm file was removed/corrupted Please check server logs examine datadir to detect the issue and fix it before upgradedetectedProblems [{level ErrordbObject testinconsistentddtabledescription present in INFORMATIONSCHEMAs INNODBSYSTABLES table but missing from TABLES table}
在升级期间如果看到这个问题,如果以下选项适合您,我们建议您首先尝试它们:
飞跃vnp执行逻辑备份,然后恢复到一个新集群,然后将新集群升级至 Aurora MySQL v3。此策略假设您不再需要有问题的表,因为它们将不会移动到新集群。您可以使用 mysqldump 或 mydumper 和 myloader 进行多线程迁移。如果有 binlog 副本集群,确保这些集群中不存在相同的问题,然后在没有复制延迟的情况下将它们提升为独立集群。如果您知道导致问题的 DDL/DCL 运行的时间,执行 时间点恢复PiTR,恢复到原始 DCL 或 DDL 开始之前的时间。将增量迁移到已恢复的集群,以最小化数据丢失。如果以上选项都不适用,请联系 AWS 支持。请注意,修复数据字典不一致通常是基于尽力而为的原则,有些情况下字典处于不可恢复状态。
集群包含孤立的 FULLTEXT 索引的表
创建 FULLTEXT 索引然后删除该索引可能会留下某些元数据,从而导致升级预检查失败并回滚升级。孤立的索引称为悬挂的 FULLTEXT 索引。有关包含悬挂 FULLTEXT 索引的有问题表的信息会在 upgradeprecheckslog 文件中打印出来:
{id getDanglingFulltextIndextitle Tables with dangling FULLTEXT index referencestatus OKdescription Error The following tables contain dangling FULLTEXT index which is not supported It is recommended to rebuild the table before upgradedetectedProblems [{level ErrordbObject sandboxdanglingfulltextindextabledescription Table sandboxdanglingfulltextindextable contains dangling FULLTEXT index Kindly recreate the table before upgrade}
要解决悬挂 FULLTEXT 问题,您可以在 Aurora MySQL v2 集群上运行 OPTIMIZE TABLE 命令。例如,OPTIMIZE TABLE sandboxdanglingfulltextindextable
集群包含保留关键字的对象
MySQL 80 引入了以前不被保留的保留关键字。升级预检查器评估数据库对象名称以及其定义和主体中保留关键字的使用情况。如果检测到数据库对象中使用了保留关键字,例如存储过程、函数、事件和触发器,升级将失败并在 upgradeprecheckslog 文件中打印出错误:
{id routinesSyntaxChecktitle MySQL 80 syntax check for routinelike objectsstatus OKdescription The following objects did not pass a syntax check with the latest MySQL 80 grammar A common reason is that they reference names that conflict with new reserved keywords You must update these routine definitions and quote any such references before upgradingdocumentationLink https//devmysqlcom/doc/refman/en/keywordshtmldetectedProblems [{level ErrordbObject testEXCEPTdescription at line 128 unexpected token }
要解决此问题,您必须在升级之前更新这些对象定义,并对任何这样的引用进行 quote。或者,您可以将名称更改为其他名称,这可能需要更改应用程序。
集群包含列定义中的无效字符
当您尝试升级 Amazon Aurora MySQL DB 集群时,由于表中的列注释定义中存在无效字符,升级可能会失败。在错误日志中,您可能会看到以下错误:
20230919T031127361837Z 2 [ERROR] [MY013140] [Server] Comment for table testproblematictables contains an invalid utf8mb3 character string x8ExE8x94
我们建议您检查引擎错误日志以识别所有有问题的表,然后对这些表运行命令 SHOW CREATE TABLE lttablenamegt,并使用 SHOW WARNINGS 检查警告,以了解详细信息。在重试升级之前,您必须更新这些列的注释定义。
有关其他导致升级失败的常见问题的信息,请参考 MySQL 80 中的变更。
结论
本文讨论了升级预检查过程和导致升级及升级预检查失败的常见问题,以及如何解决这些问题。有关升级的更多信息,请参见第 2 部分,我们将讨论 Amazon Aurora MySQL 2 升级至 Amazon Aurora MySQL 3 常见的延伸或失败原因。
作者介绍
Huy Nguyen 是 AWS 支持的高级工程师,专注于 Amazon RDS 和 Amazon Aurora。他为客户提供指导和技术支持,使他们能够在 AWS 云中构建可扩展、高可用且安全的解决方案。
Leevon Abuan 是 AWS 支持的数据库工程师,专注于 Amazon RDS 和 Amazon Aurora,并且一直在帮助客户解决在云中运行数据库时遇到的复杂技术问题。
SaaS 应用程序在 AWS 上的租户路由策略 网络与内容交付
SaaS 应用程序的租户路由策略主要要点SaaS 提供商需设计安全、可扩展的租户路由机制,确保请求能被正确路由到相关资源。本文讨论了在 AWS 上的多租户 SaaS 环境中,HTTP 请求的路由策略,包括相关考虑、最佳实践和示例场景。租户路由策略包括基于域名和基于数据的路由方法,各有其优缺点和适用场...