

# 使用错误注入查询测试 Amazon Aurora MySQL
<a name="AuroraMySQL.Managing.FaultInjectionQueries"></a>

您可以使用错误注入查询来测试 Aurora MySQL 数据库集群的容错能力。错误注入查询作为 SQL 命令发布到 Amazon Aurora 实例。它们允许您计划以下事件之一的模拟发生：
+ 写入器或读取器数据库实例崩溃
+ Aurora 副本故障
+ 磁盘故障
+ 磁盘拥塞

当故障注入查询指定崩溃时，它会强制 Aurora MySQL 数据库实例崩溃。其他错误注入查询将导致模拟故障事件，但不会导致事件发生。提交错误注入查询时，还可指定故障事件模拟发生的时间长度。

可通过连接到 Aurora 副本的终端节点来将错误注入查询提交到 Aurora 副本实例之一。有关更多信息，请参阅 [Amazon Aurora 端点连接](Aurora.Overview.Endpoints.md)。

运行故障注入查询需要所有主用户权限。有关更多信息，请参阅 [主用户账户权限](UsingWithRDS.MasterAccounts.md)。

## 测试实例崩溃
<a name="AuroraMySQL.Managing.FaultInjectionQueries.Crash"></a>

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

对于该错误注入查询，将不会进行故障转移。如果要测试失效转移，您可以在 RDS 控制台中为数据库集群选择**失效转移**实例操作，或者使用 [failover-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/failover-db-cluster.html) AWS CLI 命令或 [FailoverDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html) RDS API 操作。

### 语法
<a name="AuroraMySQL.Managing.FaultInjectionQueries.Crash-Syntax"></a>

```
1. ALTER SYSTEM CRASH [ INSTANCE | DISPATCHER | NODE ];
```

### 选项
<a name="AuroraMySQL.Managing.FaultInjectionQueries.Crash-Options"></a>

该错误注入查询采用下列崩溃类型之一：
+ **`INSTANCE`** – 模拟 Amazon Aurora 实例的 MySQL 兼容数据库崩溃。
+ **`DISPATCHER`** – 模拟 Aurora 数据库集群的写入器实例上的调度程序崩溃。*调度程序* 将更新写入到 Amazon Aurora 数据库集群的集群卷中。
+ **`NODE`** – 模拟 Amazon Aurora 实例的 MySQL 兼容数据库和调度程序崩溃。对于该错误注入模拟，还将删除缓存。

默认崩溃类型为 `INSTANCE`。

## 测试 Aurora 副本故障
<a name="AuroraMySQL.Managing.FaultInjectionQueries.ReplicaFailure"></a>

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

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

### 语法
<a name="AuroraMySQL.Managing.FaultInjectionQueries.ReplicaFailure-Syntax"></a>

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

### 选项
<a name="AuroraMySQL.Managing.FaultInjectionQueries.ReplicaFailure-Options"></a>

该错误注入查询采用以下参数：
+ **`percentage_of_failure`** – 在故障事件期间阻止的请求百分比。该值可为 0 到 100 之间的双数。如果指定 0，则不阻止任何请求。如果指定 100，则阻止所有请求。
+ **故障类型** – 要模拟的故障的类型。指定 `TO ALL` 以模拟数据库集群中所有 Aurora 副本的故障。指定 `TO` 及单个 Aurora 副本的名称，以模拟单个 Aurora 副本故障的情况。默认故障类型为 `TO ALL`。
+ **`quantity`** – 要模拟 Aurora 副本故障的时间长度。该间隔为后跟一个时间单位的时间长度。模拟将在指定单位的时间长度内发生。例如，`20 MINUTE` 将促使模拟持续运行 20 分钟。
**注意**  
在指定 Aurora 副本故障事件的时间间隔时，请小心谨慎。如果指定的时间间隔太长，并且您的写入器实例在故障事件期间写入大量数据，则您的 Aurora 数据库集群可能假定您的 Aurora 副本已发生崩溃并将替换它。

## 测试磁盘故障
<a name="AuroraMySQL.Managing.FaultInjectionQueries.DiskFailure"></a>

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

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

### 语法
<a name="AuroraMySQL.Managing.FaultInjectionQueries.DiskFailure-Syntax"></a>

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

### 选项
<a name="AuroraMySQL.Managing.FaultInjectionQueries.DiskFailure-Options"></a>

该错误注入查询采用以下参数：
+ **`percentage_of_failure`** – 在故障事件期间标记为故障的磁盘百分比。该值可为 0 到 100 之间的双数。如果指定 0，则不会将任何磁盘标记为故障。如果指定 100，则整个磁盘将标记为故障。
+ **`DISK index`** – 要模拟故障事件的特定逻辑数据块。如果您超出了可用逻辑数据块的范围，将收到一条错误，告知您可指定的最大索引值。有关更多信息，请参阅“[显示 Aurora MySQL 数据库集群的卷状态](AuroraMySQL.Managing.VolumeStatus.md)”。
+ **`NODE index`** – 要模拟故障事件的特定存储节点。如果您超出了可用存储节点的范围，将收到一条错误，告知您可指定的最大索引值。有关更多信息，请参阅“[显示 Aurora MySQL 数据库集群的卷状态](AuroraMySQL.Managing.VolumeStatus.md)”。
+ **`quantity`** – 要模拟磁盘故障的时间长度。该间隔为后跟一个时间单位的时间长度。模拟将在指定单位的时间长度内发生。例如，`20 MINUTE` 将促使模拟持续运行 20 分钟。

## 测试磁盘拥塞
<a name="AuroraMySQL.Managing.FaultInjectionQueries.DiskCongestion"></a>

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

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

### 语法
<a name="AuroraMySQL.Managing.FaultInjectionQueries.DiskCongestion-Syntax"></a>

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

### 选项
<a name="AuroraMySQL.Managing.FaultInjectionQueries.DiskCongestion-Options"></a>

该错误注入查询采用以下参数：
+ **`percentage_of_failure`** – 在故障事件期间标记为拥塞的磁盘百分比。该值可为 0 到 100 之间的双数。如果指定 0，则不会将任何磁盘标记为拥塞。如果指定 100，则整个磁盘将标记为拥塞。
+ **`DISK index` 或 `NODE index`** – 要模拟故障事件的特定磁盘或节点。如果您超出了磁盘或节点的索引范围，则将收到一条错误，告知您可指定的最大索引值。
+ **`minimum` 和 `maximum`** – 拥塞延迟的最小和最大时间长度（以毫秒为单位）。标记为拥塞的磁盘区段将在模拟持续时间内的最小和最大时间范围内的任意时间长度内 (以毫秒为单位) 延迟。
+ **`quantity`** – 磁盘拥塞的模拟时间长度。该间隔为后跟一个时间单位的时间长度。模拟将在指定时间单位的时间长度内发生。例如，`20 MINUTE` 将促使模拟持续运行 20 分钟。