Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

管理 Amazon Aurora 数据库群集

以下部分讨论针对 Amazon Aurora 数据库群集的性能管理、扩展、容错能力、备份和还原。

针对 Aurora 数据库群集的性能管理和扩展

扩展存储

Aurora 存储自动使用您的群集卷中的数据进行扩展。当数据量增多时,您的群集卷存储将以 10 GB 增量递增,最多 64 TB。

每小时检查一次群集卷的大小以确定存储成本。

扩展 Aurora 数据库实例

您可通过两种方式扩展 Aurora 数据库实例,即实例扩展和读取扩展。

实例扩展

可通过修改群集中每个数据库实例的数据库实例类来按需扩展您的数据库群集。Aurora 支持针对 Aurora 优化的多个数据库实例类。下表描述了实例类规格。

实例类 vCPU ECU 内存 (GB)

db.t2.small

1

1 2

db.t2.medium

2

2 4

db.r3.large

2

6.5 15.25

db.r3.xlarge

4

13 30.5

db.r3.2xlarge

8

26 61

db.r3.4xlarge

16

52 122

db.r3.8xlarge

32

104 244

读取扩展

可通过在数据库群集中创建最多 15 个 Aurora 副本来实现针对 Aurora 数据库群集的读取扩展。每个 Aurora 副本均返回群集卷中的相同数据,且副本滞后时间最短 - 通常大大少于主实例写入更新后的 100 毫秒。当读取流量增大时,可创建额外 Aurora 副本并直接连接到这些副本以为您的数据库群集分配读取负载。Aurora 副本不必具有与主实例相同的数据库实例类。

至 Aurora 数据库实例的最大连接数

允许连接到 Aurora 数据库实例的最大数量由数据库实例的实例级别参数组中的 max_connections 参数确定。默认情况下,此值设置为以下公式 (在对数函数中以 2 为底数):

GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})

max_connections 参数设置为此方程式确保允许的连接数量随着实例大小缩放。例如,假设您的数据库实例类为 db.r3.xlarge,其具有 30.5 GB 内存。则允许的最大连接数为 2000,如以下方程式中所示:

log( (30.5 * 1073741824) / 8187281408 ) * 1000 = 2000

下表列出了为 Aurora 可用的各个数据库实例类生成的 max_connections 默认值。您可通过增加内存将实例缩放为数据库实例类,或通过将 max_connections 参数设置为更大的值 (最大为 16000) 来增加至您的 Aurora 数据库实例的最大连接数。

实例类 max_connections 默认值

db.t2.small

45

db.t2.medium

90

db.r3.large

1000

db.r3.xlarge

2000

db.r3.2xlarge

3000

db.r3.4xlarge

4000

db.r3.8xlarge

5000

Aurora 数据库群集的容错能力

Aurora 数据库群集设计为具有容错能力。群集卷跨一个区域中的多个可用区,每个可用区均包含一个群集卷数据副本。此功能意味着您的数据库群集可容忍可用区的故障,而不发生任何数据丢失,只是会短暂中断服务。

如果数据库群集中的主实例失败,Aurora 将通过两种方式之一来自动故障转移到新的主实例:

  • 将现有的 Aurora 副本提升为新的主实例

  • 创建新的主实例

如果数据库群集具有一个或多个 Aurora 副本,则 Aurora 副本将在故障事件期间被提升为主实例。故障事件将导致短暂中断,其间的读取和写入操作将失败并引发异常。不过,服务通常会在 120 秒内 (经常在 60 秒内) 还原。要提高数据库群集的可用性,建议您在两个或更多的不同的可用区中创建至少一个或多个 Aurora 副本。

您可以通过为每个副本分配一个优先级来自定义发生故障后将 Aurora 副本提升为主实例的顺序。优先级介于 0 (最高优先级) 和 15 (最低优先级) 之间。如果主实例失败,则 Amazon RDS 会将具有最高优先级的 Aurora 副本提升为新的主实例。您可以随时修改 Aurora 副本的优先级。修改优先级不会触发故障转移。

多个 Aurora 副本可共享同一个优先级,这会产生多个提升层。如果两个或更多 Aurora 副本共享同一个优先级,则 Amazon RDS 将提升最大的副本。如果两个或多个 Aurora 副本共享同一优先级和大小,那么 Amazon RDS 将提升同一提升层中的任意副本。

如果数据库群集不包含任何 Aurora 副本,则将在故障事件期间重新创建主实例。故障事件将导致中断,其间的读取和写入操作将失败并引发异常。创建新的主实例时将还原服务,此操作所需的时间通常在 10 分钟内。将 Aurora 副本提升为主实例要比创建新的主实例快得多。

注意

Amazon Aurora 还支持对外部 MySQL 数据库或 RDS MySQL 数据库实例的复制。有关更多信息,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库群集之间的复制

备份和还原 Aurora 数据库群集

以下几节将讨论 Aurora 备份以及如何使用 AWS 管理控制台还原 Aurora 数据库群集。

备份

Aurora 自动备份您的群集卷并将还原数据保留备份保留期 的时长。Aurora 备份是连续且递增的,您可以快速还原到备份保留期内的任何时间点。在写入备份数据时,不会发生任何性能影响或数据库服务中断。在创建或修改数据库群集时,可指定备份保留期 (1 天到 35 天)。

如果希望备份的保留期超出备份保留期,还可为群集卷中的数据拍摄快照。存储快照会产生 Amazon RDS 的标准存储费用。

由于 Aurora 将增量还原数据保留整个备份保留期,因此您只需创建要在备份保留期后保留的数据的快照。可从该快照创建新的数据库群集。

还原数据

可通过从 Aurora 保留的备份数据或从已保存的数据库群集快照创建新的 Aurora 数据库群集来恢复您的数据。从备份数据创建的新数据库群集副本可快速还原到备份保留期内的任何时间点。备份保留期内的 Aurora 备份的持续和增量性质意味着您无需频繁拍摄数据快照来缩短还原时间。

要确定数据库实例的最近或最早的可还原时间,请在 RDS 控制台上查找 Latest Restorable TimeEarliest Restorable Time 值。数据库群集的最近可还原时间是您可还原数据库群集的最近时间点,通常为当前时间的 5 分钟内。最早可还原时间指定可将群集卷还原到的备份保留期内的时间点。

您可以通过检查 Latest Restorable TimeEarliest Restorable Time 确定数据库群集还原完成的时间。在还原操作完成之前,Latest Restorable TimeEarliest Restorable Time 值会返回 NULL。如果 Latest Restorable TimeEarliest Restorable Time 值返回 NULL,则无法请求备份或还原操作。

使用 AWS 管理控制台将数据库群集还原到指定时间

  1. https://console.amazonaws.cn/rds 打开 Amazon Aurora 控制台。

  2. 在左侧导航窗格中,单击 Instances。单击以选择要还原的数据库群集的主实例。

  3. 单击 Instance Actions,然后单击 Restore To Point In Time

    Restore DB Cluster 窗口中,单击以选择 Use Custom Restore Time 选项。

  4. Use Custom Restore Time 框中,键入要还原到的日期和时间。

  5. DB Instance Identifier 框中,键入新的已还原数据库实例的名称。

  6. 单击 Launch DB Cluster 按钮以启动已还原的数据库群集。

数据库克隆

通过数据库克隆,而不是将数据库群集快照存储到新数据库群集,也可以克隆数据库群集的数据库。在一开始创建时,克隆数据库仅使用很小的额外空间,仅在源数据库或克隆数据库发生数据更改时才会复制数据。您可以从同一个数据库群集进行多次克隆,甚至可以为其他克隆创建额外的克隆。有关更多信息,请参阅 克隆 Aurora 数据库群集中的数据库

使用错误注入查询测试 Amazon Aurora

可使用错误注入查询来测试 Amazon Aurora 数据库群集的容错能力。将错误注入查询作为 SQL 命令发送到 Amazon Aurora 实例,这将使您能够计划下列事件之一的模拟发生:

  • 主实例或 Aurora 副本发生崩溃

  • Aurora 副本发生故障

  • 磁盘故障

  • 磁盘拥塞

指定崩溃的错误注入查询将强制使 Amazon Aurora 实例发生崩溃。其他错误注入查询将导致模拟故障事件,但不会导致事件发生。提交错误注入查询时,还可指定故障事件模拟发生的时间量。

可通过连接到 Aurora 副本的终端节点来将错误注入查询提交到 Aurora 副本实例之一。有关更多信息,请参阅 Aurora 终端节点

测试实例崩溃

可使用 ALTER SYSTEM CRASH 错误注入查询强制使 Amazon Aurora 实例发生崩溃。

对于此错误注入查询,将不会进行故障转移。若要测试故障转移,可以在 RDS 控制台中为您的数据库群集选择 Failover 实例操作,或者使用 failover-db-cluster AWS CLI 命令或 FailoverDBCluster RDS API 操作。

语法

ALTER SYSTEM CRASH [ INSTANCE | DISPATCHER | NODE ];

选项

此错误注入查询采用下列崩溃类型之一:

  • INSTANCE - 模拟 Amazon Aurora 实例的与 MySQL 兼容的数据库的崩溃。

  • DISPATCHER - 模拟 Aurora 数据库群集的主实例上的调度程序的崩溃。调度程序 写入对 Amazon Aurora 数据库群集的群集卷的更新。

  • NODE - 模拟 Amazon Aurora 实例的与 MySQL 兼容的数据库和调度程序的同时崩溃。对于此错误注入模拟,还将删除缓存。

默认崩溃类型为 INSTANCE

测试 Aurora 副本故障

可使用 ALTER SYSTEM SIMULATE READ REPLICA FAILURE 错误注入查询来模拟 Aurora 副本的故障。

Aurora 副本故障将在指定的时间间隔内阻止对数据库群集中的一个 Aurora 副本或所有 Aurora 副本的所有请求。在该时间间隔过后,受影响的 Aurora 副本将自动与主实例同步。

语法

ALTER SYSTEM SIMULATE percentage_of_failure PERCENT READ REPLICA FAILURE [ TO ALL | TO "replica name" ] FOR INTERVAL quantity { YEAR | QUARTER | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND };

选项

此错误注入查询采用以下参数:

  • percentage_of_failure - 故障事件期间要阻止的请求的百分比。此值可为 0 到 100 之间的双数。如果指定 0,则不阻止任何请求。如果指定 100,则阻止所有请求。

  • 故障类型 - 要模拟的故障的类型。指定 TO ALL 以模拟数据库群集中所有 Aurora 副本的故障。指定 TO 和 Aurora 副本的名称以模拟单个 Aurora 副本的故障。默认故障类型为 TO ALL

  • quantity - 要在其间模拟 Aurora 副本故障的时间量。该间隔为后跟一个时间单位的时间量。模拟将在指定单位的时间量内发生。例如,20 MINUTE 将促使模拟持续运行 20 分钟。

    注意

    在指定 Aurora 副本故障事件的时间间隔时,请小心谨慎。如果指定的时间间隔太长,并且您的主实例在故障事件期间写入大量数据,则您的 Aurora 数据库群集可能假定您的 Aurora 副本已发生崩溃并将替换它。

测试磁盘故障

可使用 ALTER SYSTEM SIMULATE DISK FAILURE 错误注入查询模拟 Aurora 数据库群集的磁盘故障。

磁盘故障模拟期间,Aurora 数据库群集会随机将磁盘区段标记为故障。在模拟期内,对这些区段的请求将被阻止。

语法

ALTER SYSTEM SIMULATE percentage_of_failure PERCENT DISK FAILURE [ IN DISK index | NODE index ] FOR INTERVAL quantity { YEAR | QUARTER | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND };

选项

此错误注入查询采用以下参数:

  • percentage_of_failure — 故障事件期间标记为故障的磁盘百分比。此值可为 0 到 100 之间的双数。如果指定 0,则不会将任何磁盘标记为故障。如果指定 100,则整个磁盘将标记为故障。

  • DISK index — 要为其模拟故障事件的特定逻辑数据块。如果您超出了可用逻辑数据块的范围,将收到一条错误,告知您可指定的最大索引值。有关更多信息,请参阅 显示 Aurora 数据库群集的卷状态

  • NODE index — 要为其模拟故障事件的特定存储节点。如果您超出了可用存储节点的范围,将收到一条错误,告知您可指定的最大索引值。有关更多信息,请参阅 显示 Aurora 数据库群集的卷状态

  • quantity — 要模拟磁盘故障的时间长度。该间隔为后跟一个时间单位的时间量。模拟将在指定单位的时间量内发生。例如,20 MINUTE 将促使模拟持续运行 20 分钟。

测试磁盘拥塞

可使用 ALTER SYSTEM SIMULATE DISK CONGESTION 错误注入查询模拟 Aurora 数据库群集的磁盘故障。

磁盘拥塞模拟期间,Aurora 数据库群集会将磁盘区段标记为拥塞。在模拟持续时间内,对这些区段的请求将在指定的最小和最大延迟时间之间延迟。

语法

ALTER SYSTEM SIMULATE percentage_of_failure PERCENT DISK CONGESTION BETWEEN minimum AND maximum MILLISECONDS [ IN DISK index | NODE index ] FOR INTERVAL quantity { YEAR | QUARTER | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND };

选项

此错误注入查询采用以下参数:

  • percentage_of_failure - 故障事件期间要标记为拥塞的磁盘的百分率。此值可为 0 到 100 之间的双数。如果指定 0,则不会将任何磁盘标记为拥塞。如果指定 100,则整个磁盘将标记为拥塞。

  • DISK indexNODE index - 要为其模拟故障事件的特定磁盘或节点。如果您超出了磁盘或节点的索引范围,则将收到一条错误,告知您可指定的最大索引值。

  • minimummaximum - 拥塞延迟的最小和最大时间量 (以毫秒为单位)。标记为拥塞的磁盘区段将在模拟持续时间内的最小和最大时间范围内的任意时间量内 (以毫秒为单位) 延迟。

  • quantity - 要模拟磁盘拥塞的时间量。该间隔为后跟一个时间单位的时间量。模拟将在指定时间单位的时间量内发生。例如,20 MINUTE 将促使模拟持续运行 20 分钟。

使用快速 DDL 在 Amazon Aurora 中修改表

在 MySQL 中,许多数据定义语言 (DDL) 操作会对性能产生明显影响。即使经过最近的在线 DDL 改进,还会对性能产生影响。

例如,假设您使用 ALTER TABLE 操作在表中添加一列。根据指定的算法,此操作可涉及以下步骤:

  • 创建表的完整副本

  • 创建临时表,以处理并发数据操控语言 (DML) 操作

  • 重建此表的所有索引

  • 应用并发 DML 更改时应用表锁定

  • 减慢并发 DML 吞吐量

在 Amazon Aurora 中,您可以使用快速 DDL 立即就地执行 ALTER TABLE 操作。完成此操作无需复制表,对其他 DML 语句也没有重大影响。由于此操作不会因复制表而使用临时存储,使得 DDL 语句对于小型实例类型中的大型表也很实用。

注意

快速 DDL 可用于 Aurora 版本 1.12 和更高版本。有关 Aurora 版本的更多信息,请参阅 Amazon Aurora 数据库引擎更新

限制

目前,快速 DDL 具有以下限制:

  • 快速 DDL 仅支持将没有默认值且可为空的列添加到现有表的最后。

  • 快速 DDL 不支持分区表。

  • 快速 DDL 不支持使用 REDUNDANT 行格式的 InnoDB 表。

语法

ALTER TABLE tbl_name ADD COLUMN col_name column_definition

选项

此语句具有以下选项:

  • tbl_name要修改的表的名称。

  • col_name要添加的列的名称。

  • col_definition要添加的列的定义。

    注意

    您必须指定不带默认值且可为空的列定义,否则无法使用快速 DDL。

显示 Aurora 数据库群集的卷状态

在 Amazon Aurora 中,数据库群集卷中包含一组逻辑块。每个逻辑块代表 10 GB 分配的存储空间。这些块称为保护组

每个保护组中的数据在六个物理存储设备中进行复制,这些存储设备称为存储节点。这些存储节点分布在数据库群集所在区域的三个可用性节点 (AZ) 中。而每个存储节点又包含数据库群集卷的一个或多个逻辑数据块。有关保护组和存储节点的更多信息,请参阅 AWS 数据库博客上的 Aurora 存储引擎简介

您可以模拟整个存储节点的故障,或存储节点中单个逻辑数据块的故障。要进行模拟,您可使用 ALTER SYSTEM SIMULATE DISK FAILURE 错误注入查询。使用此查询时,您应指定特定逻辑数据块或存储节点的索引值。但如果您指定的索引值大于数据库群集卷所用的逻辑数据块或存储节点的数量,查询将返回错误。有关错误注入查询的更多信息,请参阅 使用错误注入查询测试 Amazon Aurora

使用 SHOW VOLUME STATUS 查询可避免该错误。此查询返回两个服务器状态变量,DisksNodes。这些变量各自代表数据库群集卷的逻辑数据块和存储节点的总数。

注意

SHOW VOLUME STATUS 查询可用于 Aurora 版本 1.12 和更高版本。有关 Aurora 版本的更多信息,请参阅 Amazon Aurora 数据库引擎更新

语法

SHOW VOLUME STATUS

示例

以下示例说明了 SHOW VOLUME STATUS 的典型结果。

mysql> SHOW VOLUME STATUS; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Disks | 96 | | Nodes | 74 | +---------------+-------+