我想在最大限度减少停机时间的情况下升级 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库引擎版本。
解决方法
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
升级 Amazon RDS for MySQL 数据库引擎版本
要将 Amazon RDS 数据库引擎升级到主要版本,您必须手动使用 AWS 管理控制台、AWS CLI 或 RDS API。有关更多信息,请参阅手动升级引擎版本。
要将 Amazon RDS 数据库引擎自动升级到次要版本,请参阅自动升级次要引擎版本。
缩短 Amazon RDS for MySQL 数据库引擎升级停机时间的最佳实践
估算升级时间
升级时间取决于升级类型、数据和可用资源。要估算升级时间,请在不同的测试数据库实例上测试升级。要启动主要或次要升级的测试数据库实例,您可以使用快照恢复或只读副本。有关更多信息,请参阅 RDS for MySQL 数据库引擎升级。
为尽量缩短升级停机时间,请使用蓝绿部署进行数据库更新。蓝绿部署会创建一个复制生产环境的暂存环境。您可以在绿色环境中升级 Amazon RDS 数据库实例,而不会影响生产工作负载。测试完成后,再切换环境。
数据库备份影响
开启备份后,Amazon RDS 会为所有版本升级创建数据库实例先前版本的快照。如果 Amazon RDS 找不到任何最近的备份,则 Amazon RDS 将在升级过程中创建完整快照。更改量的大小会影响您的升级时间。但是,当 Amazon RDS 创建快照时,您的数据库实例可以继续接受流量。备份完成后,数据库实例将关闭。然后,MySQL 在已停用的网络上运行新的引擎版本,以防止任何远程连接。
缓慢关闭的影响
为了缓慢关闭,Amazon RDS 会将 innodb_fast_shutdown 参数值设置为 0。在缓慢关闭时,Amazon RDS 会合并更改缓冲区并完全清除已删除的行。根据恢复的数据量,缓慢关闭可能需要几分钟到几个小时。缓慢关闭具有较大更改缓冲区或较长历史记录列表的数据库可能需要更长的时间。有关详细信息,请参阅 MySQL 网站上的缓慢关闭、innodb_fast_shutdown、更改缓冲区和清除。
将系统表和用户表转换为新版本
要将系统表和用户表转换为新版本,需在 MySQL 数据库上运行 MySQL 二进制程序 mysql_upgrade。根据表的状态,您可能需要创建表以符合新版本的要求。**mysql\ _upgrade ** 二进制程序会更新表中的元数据,并显示数据库已升级。如果您的表数量较多,则 Amazon RDS for MySQL 可能需要更长的时间才能完成主要版本升级。有关详细信息,请参阅 MySQL 网站上的 mysql_upgrade — 检查和升级 MySQL 表。
MySQL 升级的注意事项
在从版本 8.0 到 8.4 的主要版本升级过程中,Amazon RDS for MySQL 会重建您的一些表。根据表中的数据量,重建可能需要数小时或数天才能完成。
MySQL 主要版本之间的不兼容性可能会在升级时产生问题。为了确保升级成功,最佳做法是查看 MySQL 升级的注意事项。当您开始从 MySQL 5.7 升级到 8.0 时,Amazon RDS 会自动运行预检,以检测不兼容性问题。有关详细信息,请参阅 MySQL 网站上的升级 MySQL。
制定回滚计划
对于从 MySQL 8.0 开始的升级,Amazon RDS 会运行预检,以确认有足够的存储空间来重建表。Amazon RDS 还会确认是否存在孤表。对于早于 MySQL 5.7 版本的升级,Amazon RDS 不会运行预检。对于可能失败的主要版本升级,最佳做法是制定计划,以防升级失败并需要回滚。
检查表是否存在问题
要检查表中是否存在问题,最佳做法是执行 mysqlcheck。最佳做法是在还原的快照上测试表维护操作。有关更多信息,请参阅 MySQL 网站上的 mysqlcheck — 表维护程序。
相关信息
升级数据库实例引擎版本
升级 Amazon RDS for MySQL 和 Amazon RDS for MariaDB 的最佳做法
Amazon RDS 上的 MySQL 版本