

# 在 Aurora MySQL 全局数据库中使用写入转发
<a name="aurora-global-database-write-forwarding-ams"></a>

**Topics**
+ [Aurora MySQL 中写入转发的区域和版本可用性](#aurora-global-database-write-forwarding-regions-versions-ams)
+ [在 Aurora MySQL 中启用写入转发](#aurora-global-database-write-forwarding-enabling-ams)
+ [检查辅助集群是否在 Aurora MySQL 中启用了写入转发](#aurora-global-database-write-forwarding-describing-ams)
+ [应用程序和 SQL 与 Aurora MySQL 中写入转发的兼容性](#aurora-global-database-write-forwarding-compatibility-ams)
+ [Aurora MySQL 中写入转发的隔离和一致性](#aurora-global-database-write-forwarding-isolation-ams)
+ [使用 Aurora MySQL 中的写入转发运行多部分语句](#aurora-global-database-write-forwarding-multipart-ams)
+ [使用 Aurora MySQL 中写入转发执行的事务](#aurora-global-database-write-forwarding-txns-ams)
+ [Aurora MySQL 中写入转发的配置参数](#aurora-global-database-write-forwarding-params-ams)
+ [Aurora MySQL 中写入转发的 Amazon CloudWatch 指标](#aurora-global-database-write-forwarding-cloudwatch-ams)
+ [用于写入转发的 Aurora MySQL 状态变量](#aurora-global-database-write-forwarding-status-ams)

## Aurora MySQL 中写入转发的区域和版本可用性
<a name="aurora-global-database-write-forwarding-regions-versions-ams"></a>

在每个提供基于 Aurora MySQL 的全局数据库的区域，Aurora MySQL 2.08.1 及更高版本都支持写入转发。

有关 Aurora MySQL 全局数据库的版本和区域可用性的更多信息，请参阅[使用 Aurora MySQL 的 Aurora 全局数据库](Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.md#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.amy)。

## 在 Aurora MySQL 中启用写入转发
<a name="aurora-global-database-write-forwarding-enabling-ams"></a>

默认情况下，在将辅助集群添加到 Aurora Global Database 时不启用写入转发。

要使用 AWS 管理控制台启用写入转发，请在为全局数据库添加区域时，选中**只读副本写入转发**下的**开启全局写入转发**复选框。对于现有的辅助集群，将集群修改为**开启全局写入转发**。要关闭写入转发，请在添加区域或修改辅助集群时，清除**开启全局写入转发**复选框。

 要使用 AWS CLI 启用写入转发，请使用 `--enable-global-write-forwarding` 选项。当您使用 `create-db-cluster` 命令创建新的辅助集群时，此选项将起作用。当您使用 `modify-db-cluster` 命令修改现有辅助集群时，它也可以起作用。它要求全局数据库使用支持写入转发的 Aurora 版本。您可以通过对这些相同的 CLI 命令使用 `--no-enable-global-write-forwarding` 选项来关闭写入转发。

 要使用 Amazon RDS API 启用写入转发，请将 `EnableGlobalWriteForwarding` 参数设置为 `true`。当您使用 `CreateDBCluster` 操作创建新的辅助集群时，此参数起作用。当您使用 `ModifyDBCluster` 操作修改现有辅助集群时，它也起作用。它要求全局数据库使用支持写入转发的 Aurora 版本。您可以通过将 `EnableGlobalWriteForwarding` 参数设置为 `false` 来关闭写入转发。

**注意**  
要使数据库会话使用写入转发，请为 `aurora_replica_read_consistency` 配置参数指定设置。在使用写入转发功能的每个会话中执行此操作。有关此参数的信息，请参阅[Aurora MySQL 中写入转发的隔离和一致性](#aurora-global-database-write-forwarding-isolation-ams)。  
RDS 代理功能对于 `aurora_replica_read_consistency` 变量不支持 `SESSION` 值。设置此值可能导致意外行为。

以下 CLI 示例说明如何可以在启用或禁用写入转发的情况下设置 Aurora Global Database。突出显示的项表示在为 Aurora Global Database 设置基础设施时务必指定且保持一致的命令和选项。

 以下示例创建启用写入转发的 Aurora Global Database、主集群和辅助集群。将用户名、密码以及主要和辅助 AWS 区域替换为您自己选择的内容。

```
# Create overall global database.
aws rds create-global-cluster --global-cluster-identifier write-forwarding-test \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-1

# Create primary cluster, in the same AWS Region as the global database.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-1 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --master-username user_name --master-user-password password \
  --region us-east-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \
  --db-instance-identifier write-forwarding-test-cluster-1-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \
  --db-instance-identifier write-forwarding-test-cluster-1-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-1

# Create secondary cluster, in a different AWS Region than the global database,
# with write forwarding enabled.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-2 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-2 \
  --enable-global-write-forwarding

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-2

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-2
```

 以下示例从上一个示例继续。它创建一个未启用写入转发的辅助集群，然后启用写入转发。完成此示例后，全局数据库中的所有辅助集群都启用了写入转发功能。

```
# Create secondary cluster, in a different AWS Region than the global database,
# without write forwarding enabled.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-2 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-west-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-west-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-west-1

aws rds modify-db-cluster --db-cluster-identifier write-forwarding-test-cluster-2 \
  --region us-east-2 \
  --enable-global-write-forwarding
```

## 检查辅助集群是否在 Aurora MySQL 中启用了写入转发
<a name="aurora-global-database-write-forwarding-describing-ams"></a>

 要确定是否可以使用辅助集群中的写入转发，可以检查集群是否具有属性 `"GlobalWriteForwardingStatus": "enabled"`。

在 AWS 管理控制台中，在集群详细信息页面的**配置**选项卡上，您可以看到**全局只读副本写入转发**的状态为**已启用**。

要查看所有集群的全局写入转发设置的状态，请运行以下 AWS CLI 命令。

辅助集群显示值 `"enabled"` 或 `"disabled"`，以指示写入转发是打开还是关闭。`null` 的值表示写入转发对该集群不可用。集群不是全局数据库的一部分，或者是主集群而不是辅助集群。如果写入转发处于打开或关闭的过程中，则该值也可能是 `"enabling"` 或 `"disabling"`。

**Example**  

```
aws rds describe-db-clusters \
--query '*[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus}'

[
    {
        "GlobalWriteForwardingStatus": "enabled",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1"
    },
    {
        "GlobalWriteForwardingStatus": "disabled",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2"
    },
    {
        "GlobalWriteForwardingStatus": null,
        "DBClusterIdentifier": "non-global-cluster"
    }
]
```

 要查找启用了全局写入转发功能的所有辅助集群，请运行以下命令。此命令还会返回集群的读取器终端节点。在 Aurora Global Database 中使用从辅助集群到主集群的写入转发时，可以使用辅助集群的读取器端点。

**Example**  

```
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]'
[
    {
        "GlobalWriteForwardingStatus": "enabled",
        "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1"
    }
]
```

## 应用程序和 SQL 与 Aurora MySQL 中写入转发的兼容性
<a name="aurora-global-database-write-forwarding-compatibility-ams"></a>

您可以将以下类型的 SQL 语句与写入转发一起使用：
+ 数据操作语言 (DML) 语句，如 `INSERT`、`DELETE` 和 `UPDATE`。对于您可以与写入转发一起使用的这些语句的属性存在一些限制，如下所述。
+ `SELECT ... LOCK IN SHARE MODE` 和 `SELECT FOR UPDATE` 语句。
+ `PREPARE` 和 `EXECUTE` 语句。

 在具有写入转发的全局数据库中使用某些语句时，不允许这些语句或它们可能产生过时的结果。因此，默认情况下，辅助集群的 `EnableGlobalWriteForwarding` 设置处于关闭状态。在启用它之前，请检查以确保您的应用程序代码不受任何这些限制的影响。

 以下限制适用于与写入转发一起使用的 SQL 语句。在某些情况下，您可以对在集群级别启用写入转发的辅助集群使用语句。如果 `aurora_replica_read_consistency` 配置参数未在会话中打开写入转发，则此方法可用。当由于写入转发而不允许使用语句时，尝试使用语句会导致以下格式的错误消息。

```
ERROR 1235 (42000): This version of MySQL doesn't yet support 'operation with write forwarding'.
```

**数据定义语言 (DDL)**  
 连接到主集群以运行 DDL 语句。您不能从读取器数据库实例运行它们。

**使用临时表中的数据更新永久表**  
 您可以在启用写入转发的辅助集群上使用临时表。但是，如果语句引用临时表，则不能使用 DML 语句来修改永久表。例如，您不能使用从临时表中获取数据的 `INSERT ... SELECT` 语句。临时表存在于辅助集群上，当该语句在主集群上运行时不可用。

**XA 事务**  
 在会话内打开写入转发时，不能在辅助集群上使用以下语句。您可以在未启用写入转发的辅助集群上使用这些语句，或者在 `aurora_replica_read_consistency` 设置为空的会话中使用这些语句。在会话内启用写入转发之前，请检查您的代码是否使用这些语句。  

```
XA {START|BEGIN} xid [JOIN|RESUME]
XA END xid [SUSPEND [FOR MIGRATE]]
XA PREPARE xid
XA COMMIT xid [ONE PHASE]
XA ROLLBACK xid
XA RECOVER [CONVERT XID]
```

**永久表的 LOAD 语句**  
 您不能在启用写入转发的辅助集群上使用以下语句。  

```
LOAD DATA INFILE 'data.txt' INTO TABLE t1;
        LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;
```
 您可以将数据加载到辅助集群上的临时表中。但是，请确保您仅在主集群上运行任何引用永久表的 `LOAD` 语句。

**插件语句**  
 您不能在启用写入转发的辅助集群上使用以下语句。  

```
INSTALL PLUGIN example SONAME 'ha_example.so';
UNINSTALL PLUGIN example;
```

**SAVEPOINT 语句**  
 在会话内打开写入转发时，不能在辅助集群上使用以下语句。您可以在未启用写入转发的辅助集群上使用这些语句，或者在 `aurora_replica_read_consistency` 设置为空白的会话中使用这些语句。在会话内启用写入转发之前，请检查您的代码是否使用这些语句。  

```
SAVEPOINT t1_save;
ROLLBACK TO SAVEPOINT t1_save;
RELEASE SAVEPOINT t1_save;
```

## Aurora MySQL 中写入转发的隔离和一致性
<a name="aurora-global-database-write-forwarding-isolation-ams"></a>

 在使用写入转发的会话中，您只能使用 `REPEATABLE READ` 隔离级别。尽管您也可以将 `READ COMMITTED` 隔离级别用于辅助 AWS 区域中的只读集群，但该隔离级别不适用于写入转发。有关 `REPEATABLE READ` 和 `READ COMMITTED` 隔离级别的信息，请参阅 [Aurora MySQL 隔离级别](AuroraMySQL.Reference.IsolationLevels.md)。

 您可以控制辅助集群上的读取一致性程度。读取一致性级别确定辅助集群在每次读取操作之前要等待多少时间，以确保从主集群复制某些或所有更改。您可以调整读取一致性级别，以确保会话中的所有转发的写入操作在辅助集群中可见，然后再进行任何后续查询。您还可以使用此设置来确保辅助集群上的查询始终看到主集群中的最新更新，即使是由其他会话或其他集群提交的更新。要为应用程序指定此类行为，请为会话级别参数 `aurora_replica_read_consistency` 选择一个值。

**重要**  
始终为要转发写入的任何会话设置 `aurora_replica_read_consistency` 参数。若不设置，Aurora 不会为该会话启用写入转发。默认情况下，此参数的值为空，因此在使用此参数时请选择一个特定值。`aurora_replica_read_consistency` 参数仅对启用写入转发的辅助集群产生影响。  
对于低于 3.04 的 Aurora MySQL 版本 2 和版本 3，使用 `aurora_replica_read_consistency` 作为会话变量。对于 Aurora MySQL 版本 3.04 及更高版本，可以使用 `aurora_replica_read_consistency` 作为会话变量或作为数据库集群参数。

 对于 `aurora_replica_read_consistency` 参数，您可以指定值 `EVENTUAL`、`SESSION` 和 `GLOBAL`。

 随着您提高一致性级别，您的应用程序会花更多时间等待在 AWS 区域之间传播更改。您可以在快速响应时间与确保在运行查询之前在其他位置进行的更改完全可用之间选择平衡。

 将读取一致性设置为 `EVENTUAL` 后，使用写入转发的辅助 AWS 区域中的查询可能会看到由于复制滞后而稍微过时的数据。在对主区域执行写入操作并将其复制到当前区域之前，看不到同一会话中写入操作的结果。查询不会等待更新的结果可用。因此，它可能会检索较旧的数据或更新的数据，具体取决于语句的时间和复制滞后量。

 将读取一致性设置为 `SESSION` 后，辅助 AWS 区域中使用写入转发的所有查询都会看到在该会话中所做的所有更改的结果。无论事务是否已提交，这些更改都是可见的。如有必要，查询将等待转发的写入操作的结果复制到当前区域。它不会等待在其他区域或当前区域内的其他会话中执行的写入操作的更新结果。

 将读取一致性设置为 `GLOBAL` 后，辅助 AWS 区域中的会话会看到该会话所做的更改。它还可以查看来自主 AWS 区域和其他辅助 AWS 区域的所有已提交的更改。每个查询可能会等待一段时间，该时间取决于会话滞后量。从查询开始时，辅助集群与来自主集群的所有已提交数据处于最新状态时，查询将继续进行。

 有关写入转发涉及的所有参数的更多信息，请参阅 [Aurora MySQL 中写入转发的配置参数](#aurora-global-database-write-forwarding-params-ams)。

### 使用写入转发的示例
<a name="aurora-global-database-write-forwarding-examples-ams"></a>

这些示例使用 `aurora_replica_read_consistency` 作为会话变量。对于 Aurora MySQL 版本 3.04 及更高版本，可以使用 `aurora_replica_read_consistency` 作为会话变量或作为数据库集群参数。

在以下示例中，主集群位于 US East (N. Virginia) 区域中。辅助集群位于 美国东部（俄亥俄州） 区域中。该示例显示运行 `INSERT` 语句后跟 `SELECT` 语句的效果。根据 `aurora_replica_read_consistency` 设置的值，结果可能会因语句的时间而异。为了实现更高的一致性，您可以在发出 `SELECT` 语句之前稍等一会。或者，Aurora 可以自动等到结果复制完成后再继续进行 `SELECT`。

在此示例中，读取一致性设置为 `eventual`。在 `INSERT` 语句之后立即运行 `SELECT` 语句仍将返回 `COUNT(*)` 的值。此值反映插入新行之前的行数。稍后再次运行 `SELECT` 将返回更新的行计数。这些 `SELECT` 语句不会等待。

```
mysql> set aurora_replica_read_consistency = 'eventual';
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)
mysql> insert into t1 values (6); select count(*) from t1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)
```

如果读取一致性设置为 `session`，则紧随 `INSERT` 后的一条 `SELECT` 语句会等待，直至 `INSERT` 语句中的更改可见。后续 `SELECT` 语句不会等待。

```
mysql> set aurora_replica_read_consistency = 'session';
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.01 sec)
mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1;
Query OK, 1 row affected (0.08 sec)
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.37 sec)
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)
```

 当读取一致性设置仍设置为 `session`，如果在执行一条 `INSERT` 语句后引入简短的等待，则会使更新的行计数在下一条 `SELECT` 语句运行时可用。

```
mysql> insert into t1 values (6); select sleep(2); select count(*) from t1;
Query OK, 1 row affected (0.07 sec)
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.01 sec)
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)
```

 如果读取一致性设置为 `global` 时，每个 `SELECT` 语句将等待，以确保在执行该查询之前，该语句开始时的所有数据更改均可见。每个 `SELECT` 语句的等待量会有所不同，具体取决于主集群和辅助集群之间的复制滞后量。

```
mysql> set aurora_replica_read_consistency = 'global';
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.75 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.37 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.66 sec)
```

## 使用 Aurora MySQL 中的写入转发运行多部分语句
<a name="aurora-global-database-write-forwarding-multipart-ams"></a>

 DML 语句可能由多个部分组成，如 `INSERT ... SELECT` 语句或 `DELETE ... WHERE` 语句。在这种情况下，整个语句将转发到主集群并在此处运行。

## 使用 Aurora MySQL 中写入转发执行的事务
<a name="aurora-global-database-write-forwarding-txns-ams"></a>

 事务是否转发到主集群取决于事务的访问模式。您可以使用 `SET TRANSACTION` 语句或 `START TRANSACTION` 语句指定事务的访问模式。您还可以通过更改 [transaction\$1read\$1only](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_read_only) 会话变量的值来指定事务访问模式。只有在连接到启用了写入转发的数据库集群时，才能更改此会话值。

 如果长时间运行的事务在很长一段时间内没有发出任何语句，则可能会超过空闲超时期限。此时段的默认值为一分钟。您最多可以将其增加到一天。超过空闲超时的事务将被主集群取消。您提交的下一个后续语句会收到超时错误。然后 Aurora 回滚事务。

 在写入转发变得不可用的其他情况下，可能会发生此类错误。例如，如果重新启动主集群或关闭写入转发配置设置，则 Aurora 取消使用写入转发的任何事务。

## Aurora MySQL 中写入转发的配置参数
<a name="aurora-global-database-write-forwarding-params-ams"></a>

 Aurora 集群参数组包含写入转发功能的设置。由于这些是集群参数，因此每个集群中的所有数据库实例对于这些变量具有相同的值。下表汇总了有关这些参数的详细信息，表后附有使用说明。


| 名称 | 范围 | 类型 | 默认值 | 有效值 | 
| --- | --- | --- | --- | --- | 
| aurora\$1fwd\$1master\$1idle\$1timeout（Aurora MySQL 版本 2） | 全局  | 无符号整数 | 60 | 1–86,400 | 
| aurora\$1fwd\$1master\$1max\$1connections\$1pct（Aurora MySQL 版本 2） | 全局 | 无符号长整数 | 10 | 0–90 | 
| aurora\$1fwd\$1writer\$1idle\$1timeout（Aurora MySQL 版本 3） | 全局 | 无符号整数 | 60 | 1–86,400 | 
| aurora\$1fwd\$1writer\$1max\$1connections\$1pct（Aurora MySQL 版本 3） | 全局 | 无符号长整数 | 10 | 0–90 | 
| aurora\$1replica\$1read\$1consistency | 对于版本 2 和版本 3（低于版本 3.04）为会话，对于版本 3.04 及更高版本为全局 | 枚举 | ''（null） | EVENTUAL, SESSION, GLOBAL | 

要控制来自辅助集群的传入写入请求，请在主集群上使用以下设置：
+  `aurora_fwd_master_idle_timeout`、`aurora_fwd_writer_idle_timeout`：主集群在关闭连接之前从辅助集群转发的连接上等待某个活动的秒数。如果会话在此期间之后仍处于空闲状态，则 Aurora 取消会话。
+  `aurora_fwd_master_max_connections_pct`、`aurora_fwd_writer_max_connections_pct`：可以在写入器数据库实例上用于处理从读取器转发的查询的数据库连接的上限。它表示为主集群中写入器数据库实例的 `max_connections` 设置的百分比。例如，如果 `max_connections` 是 800，而 `aurora_fwd_master_max_connections_pct` 或 `aurora_fwd_writer_max_connections_pct` 是 10，则写入器最多允许 80 个同时转发会话。这些连接来自由 `max_connections` 设置管理的同一连接池。

   当一个或多个辅助集群启用了写入转发时，此设置仅适用于主集群。如果减小该值，不会影响现有连接。Aurora 尝试从辅助集群创建新连接时，会考虑帐户设置的新值。默认值为 10，表示 `max_connections` 值的 10%。如果在任何辅助集群上启用查询转发，则此设置必须具有非零值才能成功地从辅助集群执行写入操作。如果值为零，则写入操作会收到错误代码 `ER_CON_COUNT_ERROR` 以及消息 `Not enough connections on writer to handle your request`。

`aurora_replica_read_consistency` 参数启用写入转发。每个会话中都需使用该参数。您可将读取一致性级别指定为 `EVENTUAL`、`SESSION` 或 `GLOBAL`。要了解有关一致性级别的更多信息，请参阅[Aurora MySQL 中写入转发的隔离和一致性](#aurora-global-database-write-forwarding-isolation-ams)。以下规则适用于此参数：
+  默认值是 ''（空）。
+ 仅当 `aurora_replica_read_consistency` 设置为 `EVENTUAL`、`SESSION` 或 `GLOBAL` 时，写入转发才可用。此参数仅适用于启用了写入转发且位于 Aurora Global Database 中的辅助集群的读取器实例。
+  您不能在多语句事务内部设置此变量（如果为空）或取消设置（如果已设置）。但是，在此类事务期间，您可以将其从一个有效值（`EVENTUAL`、`SESSION` 或 `GLOBAL`）更改为另一个有效值（`EVENTUAL`、`SESSION` 或 `GLOBAL`）。
+  当辅助集群上未启用写入转发时，变量不能为 `SET`。

## Aurora MySQL 中写入转发的 Amazon CloudWatch 指标
<a name="aurora-global-database-write-forwarding-cloudwatch-ams"></a>

 在一个或多个辅助集群上使用写入转发时，以下 Amazon CloudWatch 指标适用于主集群。这些指标均在主集群中的写入器数据库实例上进行测量。


| CloudWatch 指标 | 单位 | 描述 | 
| --- | --- | --- | 
|  `AuroraDMLRejectedMasterFull`  | 计数 |  由于写入器数据库实例上会话已满而遭拒绝的转发查询数。 对于 Aurora MySQL 版本 2。  | 
|  `AuroraDMLRejectedWriterFull`  | 计数 |  由于写入器数据库实例上会话已满而遭拒绝的转发查询数。 对于 Aurora MySQL 版本 3。  | 
|  `ForwardingMasterDMLLatency`  | 毫秒 |  在写入器数据库实例上处理每个转发的 DML 语句的平均时间。 它不包括辅助集群转发写入请求的时间，也不包括将更改复制回辅助集群的时间。 对于 Aurora MySQL 版本 2。  | 
|  `ForwardingMasterDMLThroughput`  | 每秒计数 |  此写入器数据库实例每秒处理的转发 DML 语句数。 对于 Aurora MySQL 版本 2。  | 
|  `ForwardingMasterOpenSessions`  | 计数 |  写入器数据库实例上的转发会话数。 对于 Aurora MySQL 版本 2。  | 
|  `ForwardingWriterDMLLatency`  | 毫秒 |  在写入器数据库实例上处理每个转发的 DML 语句的平均时间。 它不包括辅助集群转发写入请求的时间，也不包括将更改复制回辅助集群的时间。 对于 Aurora MySQL 版本 3。  | 
|  `ForwardingWriterDMLThroughput`  | 每秒计数 | 此写入器数据库实例每秒处理的转发 DML 语句数。对于 Aurora MySQL 版本 3。 | 
|  `ForwardingWriterOpenSessions`  | 计数 | 写入器数据库实例上的转发会话数。对于 Aurora MySQL 版本 3。 | 

 以下 CloudWatch 指标适用于每个辅助集群。这些指标在启用写入转发的辅助集群中的每个读取器数据库实例上进行测量。


| CloudWatch 指标 | 单位 | 描述 | 
| --- | --- | --- | 
|  `ForwardingReplicaDMLLatency`  | 毫秒 | 副本上转发 DML 的平均响应时间。 | 
|  `ForwardingReplicaDMLThroughput`  | 每秒计数 | 每秒处理的转发 DML 语句数。 | 
|  `ForwardingReplicaOpenSessions`  | 计数 | 在读取器数据库实例上使用写入转发的会话数。 | 
|  `ForwardingReplicaReadWaitLatency`  | 毫秒 |  读取器数据库实例上的 `SELECT` 语句等待赶上主集群的平均等待时间。 读取器数据库实例在处理查询之前等待的程度取决于 `aurora_replica_read_consistency` 设置。  | 
|  `ForwardingReplicaReadWaitThroughput`  | 每秒计数 | 转发写入的所有会话中每秒处理的 SELECT 语句总数。 | 
|   `ForwardingReplicaSelectLatency`  | 毫秒 | 已转发的 SELECT 延迟，监控期间内所有转发 SELECT 语句的平均值。 | 
|   `ForwardingReplicaSelectThroughput`  | 每秒计数 | 已转发 SELECT 吞吐量，监控期内每秒平均值。 | 

## 用于写入转发的 Aurora MySQL 状态变量
<a name="aurora-global-database-write-forwarding-status-ams"></a>

 当您在一个或多个辅助集群上使用写入转发时，以下 Aurora MySQL 状态变量适用于主集群。这些指标均在主集群中的写入器数据库实例上进行测量。


| Aurora MySQL 状态变量 | 单位 | 描述 | 
| --- | --- | --- | 
| Aurora\$1fwd\$1master\$1dml\$1stmt\$1count | 计数 | 转发到此写入器数据库实例的 DML 语句总数。对于 Aurora MySQL 版本 2。 | 
| Aurora\$1fwd\$1master\$1dml\$1stmt\$1duration | 微秒 |  转发到此写入器数据库实例的 DML 语句的总持续时间。 对于 Aurora MySQL 版本 2。  | 
| Aurora\$1fwd\$1master\$1open\$1sessions | 计数 |  写入器数据库实例上的转发会话数。 对于 Aurora MySQL 版本 2。  | 
| Aurora\$1fwd\$1master\$1select\$1stmt\$1count | 计数 |  转发到此写入器数据库实例的 `SELECT` 语句总数。 对于 Aurora MySQL 版本 2。  | 
| Aurora\$1fwd\$1master\$1select\$1stmt\$1duration | 微秒 |  转发到此写入器数据库实例的 `SELECT` 语句的总持续时间。 对于 Aurora MySQL 版本 2。  | 
| Aurora\$1fwd\$1writer\$1dml\$1stmt\$1count | 计数 | 转发到此写入器数据库实例的 DML 语句总数。对于 Aurora MySQL 版本 3。 | 
| Aurora\$1fwd\$1writer\$1dml\$1stmt\$1duration | 微秒 | 转发到此写入器数据库实例的 DML 语句的总持续时间。 | 
| Aurora\$1fwd\$1writer\$1open\$1sessions | 计数 | 写入器数据库实例上的转发会话数。对于 Aurora MySQL 版本 3。 | 
| Aurora\$1fwd\$1writer\$1select\$1stmt\$1count | 计数 | 转发到此写入器数据库实例的 `SELECT` 语句总数。对于 Aurora MySQL 版本 3。 | 
| Aurora\$1fwd\$1writer\$1select\$1stmt\$1duration | 微秒 |  转发到此写入器数据库实例的 `SELECT` 语句的总持续时间。 对于 Aurora MySQL 版本 3。  | 

 以下 Aurora MySQL 状态变量适用于每个辅助集群。这些指标在启用写入转发的辅助集群中的每个读取器数据库实例上进行测量。


| Aurora MySQL 状态变量 | 单位 | 描述 | 
| --- | --- | --- | 
| Aurora\$1fwd\$1replica\$1dml\$1stmt\$1count | 计数 | 从此读取器数据库实例转发的 DML 语句总数。 | 
| Aurora\$1fwd\$1replica\$1dml\$1stmt\$1duration | 微秒 | 从此读取器数据库实例转发的所有 DML 语句的总持续时间。 | 
| Aurora\$1fwd\$1replica\$1errors\$1session\$1limit | 计数 |  由于以下错误条件之一而被主集群拒绝的会话数。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-write-forwarding-ams.html)  | 
| Aurora\$1fwd\$1replica\$1open\$1sessions | 计数 | 在读取器数据库实例上使用写入转发的会话数。 | 
| Aurora\$1fwd\$1replica\$1read\$1wait\$1count | 计数 | 此读取器数据库实例上的写入后读取等待的总数。 | 
| Aurora\$1fwd\$1replica\$1read\$1wait\$1duration | 微秒 | 由于此读取器数据库实例上的读取一致性设置而导致的总等待持续时间。 | 
| Aurora\$1fwd\$1replica\$1select\$1stmt\$1count | 计数 | 从此读取器数据库实例转发的 SELECT 语句总数。 | 
| Aurora\$1fwd\$1replica\$1select\$1stmt\$1duration | 微秒 | 从此读取器数据库实例转发的 SELECT 语句的总持续时间。 | 