Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将 MySQL 数据库引擎

如果 Amazon RDS 支持数据库引擎的新版本,您可以将您的数据库实例升级到新版本。有两种升级方式:主版本升级和次要版本升级。

升级概览

在升级流程期间,Amazon RDS 会创建两个数据库快照。第一个数据库快照是数据库实例在进行任何升级更改前的。如果无法完成数据库的升级,那么,就可以恢复此快照,创建一个运行旧版本的数据库实例。第二个数据库快照是在升级完成时创建的。

注意

如果您将数据库实例的备份保留期设置为大于 0 的数字,则 Amazon RDS 只需创建数据库快照。要更改您的备份保留期,请参阅 修改运行 MySQL 数据库引擎的数据库实例

升级完成后,您无法恢复为数据库引擎的以前版本。如果要返回以前版本,则还原创建的第一个数据库快照以新建数据库实例。

您可以控制何时将数据库实例升级到 Amazon RDS 支持的新版本。此级别的控制可帮助您保留与特定数据库版本的兼容性,并在生产中部署前使用应用程序测试新版本。在您准备好后,可在与时间表最搭配的时间执行版本升级。

如果数据库实例使用只读副本,则必须先升级所有只读副本,然后再升级源实例。

如果数据库实例在多可用区部署中,则同时升级主数据库实例和备用数据库实例。主副本和备用数据库实例将同时升级,而您会遇到中断,直到升级完成。服务中断时间因数据库实例大小而异。

MySQL 的主版本升级

Amazon RDS 支持 MySQL 数据库引擎的以下主版本就地升级:

  • MySQL 5.5 到 MySQL 5.6。

  • MySQL 5.6 到 MySQL 5.7。

注意

除了 db.m3 上一代数据库实例类以外,您只能使用最新一代和当前一代数据库实例类创建 MySQL 版本 5.7 数据库实例。如果您想将在上一代数据库实例类 (除 db.m3 以外) 上运行的 MySQL 5.6 版数据库实例升级到 MySQL 5.7 版数据库实例,必须先修改数据库实例以使用最新一代或当代数据库实例类。将数据库实例修改为使用最新一代或当代数据库实例类后,您便可以将数据库实例修改为使用 MySQL 5.7 版数据库引擎。有关 Amazon RDS 数据库实例类的信息,请参阅数据库实例类

主版本升级会包含不与现有应用程序向后兼容的数据库更改。因此,Amazon RDS 不会自动应用主要版本升级;您必须手动修改数据库实例。您应当在将任何升级应用于生产实例前全面测试这些升级。

要将 Amazon RDS 上的 MySQL 5.5 版数据库实例的主版本升级到 MySQL 5.6 版或更高版本,您需要先执行所有可用的操作系统更新。在操作系统更新完成后,您必须升级至各个主版本:5.5 到 5.6,然后 5.6 到 5.7。在 2014 年 4 月 24 日之前创建的 MySQL 数据库实例会显示可用的操作系统更新,直到更新安装完成。有关操作系统升级的更多信息,请参阅 应用数据库实例的更新

在 MySQL 的主要版本升级期间,如果需要的话,Amazon RDS 会运行 MySQL 二进制 mysql_upgrade 以便升级表。此外,Amazon RDS 会在主要版本升级期间清空 slow_loggeneral_log 表。要保留日志信息,请在升级主版本之前保存日志内容。

MySQL 主版本升级通常在大约 10 分钟内完成。由于数据库实例类大小不同或由于实例未遵循Amazon RDS 的最佳实践中的特定操作指南,某些升级过程可能需要更长时间。如果您从 Amazon RDS 控制台升级数据库实例,则数据库实例的状态会标明升级完成的时间。如果您使用 AWS Command Line Interface (AWS CLI) 进行升级,请使用 describe-db-instances 命令并选中 Status 值。

如果使用的是自定义参数组,必须为新的数据库引擎版本指定默认参数组,或者为其创建自定义参数组。在完成升级后,将新的参数组与数据库实例关联需要重新启动客户启动的数据库。如果数据库实例需要重新启动来应用参数组更改,该数据库实例的参数组状态将显示 pending-reboot。可在 AWS 控制台中查看数据库实例的参数组状态,或者用“describe”调用查看,例如 describe-db-instances

升级到 MySQL 5.7 版的速度可能较慢

MySQL 5.6.4 版引入了 datetimetimetimestamp 列的新的日期和时间格式,这将允许日期和时间值包含小数部分。在将数据库实例升级到 MySQL 5.7 版时,MySQL 会强制性将所有日期和时间列类型转换为新格式。由于此转换会重新构建表,因此,完成数据库实例升级可能需要耗费大量时间。对于任何正在运行 MySQL 5.6.4 版之前的版本的数据库实例以及任何已从 MySQL 5.6.4 版之前的版本升级到 5.7 版之外的版本的数据库实例,将强制实施此转换。

如果数据库实例运行的是 MySQL 5.6.4 版之前的版本或已从 MySQL 5.6.4 版之前的版本升级,则建议您先转换数据库中的 datetimetimetimestamp 列,然后再将数据库实例升级到 MySQL 5.7 版。此转换可大大减少将数据库实例升级到 MySQL 5.7 版所需的时间。要将日期和时间列升级到新格式,请对每个包含日期或时间列的表发出 ALTER TABLE <table_name> FORCE; 命令。由于修改表会将表锁定为只读状态,因此,我们建议您在维护时段内执行此更新。

您可以使用以下查询来查找数据库中所有具有 datetime、time 或 timestamp 类型的列的表,并为每个表创建一条 ALTER TABLE <table_name> FORCE; 命令:

SELECT DISTINCT CONCAT('ALTER TABLE `', REPLACE(is_tables.TABLE_SCHEMA, '`', '``'), '`.`', REPLACE(is_tables.TABLE_NAME, '`', '``'), '` FORCE;') FROM information_schema.TABLES is_tables INNER JOIN information_schema.COLUMNS col ON col.TABLE_SCHEMA = is_tables.TABLE_SCHEMA AND col.TABLE_NAME = is_tables.TABLE_NAME LEFT OUTER JOIN information_schema.INNODB_SYS_TABLES systables ON SUBSTRING_INDEX(systables.NAME, '#', 1) = CONCAT(is_tables.TABLE_SCHEMA,'/',is_tables.TABLE_NAME) LEFT OUTER JOIN information_schema.INNODB_SYS_COLUMNS syscolumns ON syscolumns.TABLE_ID = systables.TABLE_ID AND syscolumns.NAME = col.COLUMN_NAME WHERE col.COLUMN_TYPE IN ('time','timestamp','datetime') AND is_tables.TABLE_TYPE = 'BASE TABLE' AND is_tables.TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema') AND (is_tables.ENGINE = 'InnoDB' AND syscolumns.MTYPE = 6);

MySQL 的次要版本升级

次要版本升级仅在次要升级替换不安全的版本时自动进行 (如包含针对上一个版本的错误修复的次要升级)。在所有其他情况下,您必须手动修改数据库实例才能执行次要版本升级。

在将公告发布到论坛公告页面并发送客户电子邮件通知之前,我们不会自动更新 Amazon RDS 数据库实例。即使在实例维护时段进行升级,我们仍会在一年中的特定时间安排升级。我们会安排升级,以便您对其进行规划,因为升级数据库引擎版本需要停机时间,即便是多可用区实例也是如此。

测试升级

在数据库实例上执行主版本升级前,应该彻底地测试数据库以及访问该数据库的所有应用程序,了解是否与新版本兼容。我们建议您使用以下过程。

测试主版本升级

  1. 检查新版数据库引擎的升级文档以了解是否存在可能会影响数据库或应用程序的兼容性问题:

  2. 如果数据库实例是自定义数据库参数组的成员,就必须使用兼容新主版本的现有设置创建一个新的数据库参数组。在升级测试实例时,应指定新的数据库参数组,以便升级测试确保其运行正常。有关创建数据库参数组的详细信息,请参阅 使用数据库参数组

  3. 为要升级的数据库实例创建数据库快照。有关更多信息,请参阅创建数据库快照

  4. 恢复数据库快照,以便创建一个新的测试数据库实例。有关更多信息,请参阅从数据库快照还原

  5. 使用下方详细介绍的某种方法,修改此新测试数据库实例以将其升级到新版本。如果您在步骤 2 中创建了一个新的参数组,则指定该参数组。

  6. 计算升级的实例使用的存储容量以决定升级是否需要额外的存储容量。

  7. 对升级的数据库实例运行所需次数的质量保证测试以确保数据库和应用程序可正常使用新版本。实施任何必需的新测试,评估您在步骤 1 中发现的任何兼容性问题的影响。测试所有的存储过程和功能。将应用程序的测试版本指向所升级的数据库实例。

  8. 如果所有测试通过,那么请在生产数据库实例上执行升级。我们建议您直到确认一切正常后,再允许对数据库实例执行写入操作。

升级 MySQL 数据库,减少了停机时间

如果 MySQL 数据库实例当前与生产应用程序结合使用,则可使用以下过程来升级数据库实例的数据库版本并减少应用程序的停机时间。此过程显示了从 MySQL 5.5 版升级到 MySQL 5.6 版的示例。

在使用数据库实例时升级 MySQL 数据库

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 创建 MySQL 5.5 数据库实例的只读副本。此过程可创建数据库的可升级副本。

    1. 在控制台上,选择 Instances,然后选择您要升级的数据库实例。

    2. 选择实例操作,然后选择创建只读副本

    3. 为只读副本提供数据库实例标识符的值,并确保数据库实例类和其他设置与您的 MySQL 5.5 数据库实例匹配。

    4. 选择创建只读副本

  3. 在已创建只读副本并且 Status 显示为 available 之后,将只读副本升级到 MySQL 5.6。

    1. 在控制台上,选择 Instances,然后选择您刚才创建的只读副本。

    2. 选择实例操作,然后选择修改

    3. 对于数据库引擎版本,选择升级目标版本 MySQL 5.6 版,然后选择继续

    4. 对于修改计划,选择立即应用

    5. 选择修改数据库实例开始升级。

  4. 升级完成并且 Status 显示为 available 之后,验证升级的只读副本是否随主 MySQL 5.5 数据库实例保持最新。为此,您可以连接到只读副本并发出 SHOW SLAVE STATUS 命令。如果 Seconds_Behind_Master 字段为 0,则复制保持最新。

  5. 将 MySQL 5.6 只读副本设为主数据库实例。

    重要

    将 MySQL 5.6 只读副本提升为独立的单可用区数据库实例后,它不再是 MySQL 5.5 数据库实例的从属复制。建议您在源 MySQL 5.5 数据库实例处于只读模式并且所有写入操作都暂停的维护时段期间,提升 MySQL 5.6 只读副本。提升完成之后,您可以将写入操作定向到已升级的 MySQL 5.6 数据库实例,以确保不会丢失写入操作。

    此外,建议您在提升 MySQL 5.6 只读副本之前,对 MySQL 5.6 只读副本执行所有必需的数据定义语言 (DDL) 操作,如创建索引。此方法可避免在 MySQL 5.6 只读副本提升之后对其性能造成任何负面影响。要提升只读副本,请使用以下过程:

    1. 在控制台上,选择 Instances,然后选择您刚才升级的只读副本。

    2. 选择实例操作,然后选择提升只读副本

    3. 选择,为只读副本实例启用自动备份。有关更多信息,请参阅使用备份

      选择 Continue (继续)

    4. 选择 Promote Read Replica

  6. 您现在有了 MySQL 数据库的升级版本。此时,您可以将应用程序定向到新的 MySQL 5.6 数据库实例,添加只读副本,设置多可用区支持等。

AWS 管理控制台

使用 AWS 管理控制台升级数据库实例的引擎版本

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择实例,然后选择要升级的数据库实例。

  3. 选择实例操作,然后选择修改

  4. 对于数据库引擎版本,选择新版本。

  5. 选择 Continue (继续)

  6. 要立即升级,请选择 Apply immediately (立即使用)。要将升级推迟到下一个维护时段,请选择在下一个计划的维护时段内应用

  7. 查看修改摘要信息。要继续进行升级,请选择 Modify DB Instance。要取消升级,请选择 CancelBack

CLI

要升级数据库实例的引擎版本,请使用 AWS CLI modify-db-instance 命令。指定以下参数:

  • --db-instance-identifier – 数据库实例的名称。

  • --engine-version – 数据库引擎要升级到的版本号。

  • --allow-major-version-upgrade – 升级主版本。

  • --no-apply-immediately – 在下一维护时段内应用更改。要立即应用更改,请使用 --apply-immediately

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier <mydbinstance> \ --engine-version <new_version> \ --allow-major-version-upgrade \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier <mydbinstance> ^ --engine-version <new_version> ^ --allow-major-version-upgrade ^ --apply-immediately

API

要升级数据库实例的引擎版本,请使用 ModifyDBInstance 操作。指定以下参数:

  • DBInstanceIdentifier – 数据库实例的名称,例如 mydbinstance

  • EngineVersion – 数据库引擎要升级到的版本号。

  • AllowMajorVersionUpgrade – 设置为 true 可升级主版本。

  • ApplyImmediately – 是立即应用更改还是在下一个维护时段内应用更改。要立即应用更改,请将该值设置为 true。要在下一个维护时段内应用更改,请将该值设置为 false

https://rds.us-east-1.amazonaws.com/ ?Action=ModifyDBInstance &ApplyImmediately=false &DBInstanceIdentifier=mydbinstance &EngineVersion=new_version &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2013-09-09 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20131016/us-east-1/rds/aws4_request &X-Amz-Date=20131016T233051Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=087a8eb41cb1ab5f99e81575f23e73757ffc6a1e42d7d2b30b9cc0be988cff97

相关主题