

# Aurora 重启操作示例
<a name="USER_Reboot.Examples"></a>

 以下 Aurora MySQL 示例显示了 Aurora 数据库集群中读取器和写入器数据库实例的多种重启操作组合。每次重启后，SQL 查询会显示集群中各实例的正常运行时间。

**Topics**
+ [查找 Aurora 集群的写入器实例和读取器实例](#USER_Reboot.Examples.IsClusterWriter)
+ [重启单个读取器实例](#USER_Reboot.Examples.RebootReader)
+ [重启写入器实例](#USER_Reboot.Examples.RebootWriter)
+ [独立重启写入器和读取器](#USER_Reboot.Examples.RebootAsynch)
+ [将集群参数更改应用于 Aurora MySQL 2.10 版集群](#USER_Reboot.Examples.ParamChangeNewStyle)

## 查找 Aurora 集群的写入器实例和读取器实例
<a name="USER_Reboot.Examples.IsClusterWriter"></a>

 在具有多个数据库实例的 Aurora MySQL 集群中，重要的是要知道哪个是写入器实例，哪些是读取器实例。在发生故障转移操作时，写入器实例和读取器实例还可以切换角色。因此，最好在执行任何需要写入器或读取器实例的操作之前执行如下检查。在这种情况下，`False` 的 `IsClusterWriter` 值识别读取器实例 `instance-6305` 和 `instance-7448`。`True` 值识别写入器实例 `instance-1234`。

```
$ aws rds describe-db-clusters --db-cluster-id tpch100g \
  --query "*[].['Cluster:',DBClusterIdentifier,DBClusterMembers[*].['Instance:',DBInstanceIdentifier,IsClusterWriter]]" \
  --output text
Cluster:     tpch100g
Instance:    instance-6305    False
Instance:    instance-7448    False
Instance:    instance-1234    True
```

 在我们开始重启示例之前，写入器实例的正常运行时间约为一周。此示例中的 SQL 查询显示了一种特定于 MySQL 的正常运行时间检查方法。您可以在数据库应用程序中使用此技术。有关使用 AWS CLI 并适用于两个 Aurora 引擎的另一种技术，请参阅[检查 Aurora 集群和实例的正常运行时间](USER_Reboot.Uptime.md)。

```
$ mysql -h instance-7448.a12345.us-east-1.rds.amazonaws.com -P 3306 -u my-user -p
...
mysql> select date_sub(now(), interval variable_value second) "Last Startup",
    -> time_format(sec_to_time(variable_value),'%Hh %im') as "Uptime"
    -> from performance_schema.global_status
    -> where variable_name='Uptime';
+----------------------------+---------+
| Last Startup               | Uptime  |
+----------------------------+---------+
| 2021-03-08 17:49:06.000000 | 174h 42m|
+----------------------------+---------+
```

## 重启单个读取器实例
<a name="USER_Reboot.Examples.RebootReader"></a>

 此示例重启其中一个读取器数据库实例。也许是此实例被一个巨大查询或许多并发连接过载了。或者它可能由于网络问题落后于写入器实例。开始重启操作后，示例使用 `wait` 命令暂停，直至实例变为可用。届时，该实例的正常运行时间为几分钟。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-6305
{
    "DBInstance": {
        "DBInstanceIdentifier": "instance-6305",
        "DBInstanceStatus": "rebooting",
...
    }
}
$ aws rds wait db-instance-available --db-instance-id instance-6305
$ mysql -h instance-6305.a12345.us-east-1.rds.amazonaws.com -P 3306 -u my-user -p
...
mysql> select date_sub(now(), interval variable_value second) "Last Startup",
    -> time_format(sec_to_time(variable_value),'%Hh %im') as "Uptime"
    -> from performance_schema.global_status
    -> where variable_name='Uptime';
+----------------------------+---------+
| Last Startup               | Uptime  |
+----------------------------+---------+
| 2021-03-16 00:35:02.000000 | 00h 03m |
+----------------------------+---------+
```

 重启读取器实例不会影响写入器实例的正常运行时间。它的正常运行时间仍为大约一周。

```
$ mysql -h instance-7448.a12345.us-east-1.rds.amazonaws.com -P 3306 -u my-user -p
...
mysql> select date_sub(now(), interval variable_value second) "Last Startup",
    -> time_format(sec_to_time(variable_value),'%Hh %im') as "Uptime"
    -> from performance_schema.global_status where variable_name='Uptime';
+----------------------------+----------+
| Last Startup               | Uptime   |
+----------------------------+----------+
| 2021-03-08 17:49:06.000000 | 174h 49m |
+----------------------------+----------+
```

## 重启写入器实例
<a name="USER_Reboot.Examples.RebootWriter"></a>

 此示例将重启写入器实例。此集群正在运行 Aurora MySQL 2.09 版。由于 Aurora MySQL 版本低于 2.10，因此重启写入器实例也会重启集群中的所有读取器实例。

 `wait` 命令会暂停，直至重启完成。现在，该实例的正常运行时间重置为零。写入器数据库实例和读取器数据库实例的重启操作所需的时间可能大不相同。写入器数据库实例和读取器数据库实例根据其角色执行不同类型的清理操作。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-1234
{
    "DBInstance": {
        "DBInstanceIdentifier": "instance-1234",
        "DBInstanceStatus": "rebooting",
...
    }
}
$ aws rds wait db-instance-available --db-instance-id instance-1234
$ mysql -h instance-1234.a12345.us-east-1.rds.amazonaws.com -P 3306 -u my-user -p
...
mysql> select date_sub(now(), interval variable_value second) "Last Startup",
    -> time_format(sec_to_time(variable_value),'%Hh %im') as "Uptime"
    -> from performance_schema.global_status where variable_name='Uptime';
+----------------------------+---------+
| Last Startup               | Uptime  |
+----------------------------+---------+
| 2021-03-16 00:40:27.000000 | 00h 00m |
+----------------------------+---------+
```

 在写入器数据库实例重启后，两个读取器数据库实例也会重置其正常运行时间。重启写入器实例也会导致读取器实例重启。此行为适用于 Aurora PostgreSQL 集群和低于 2.10 版的 Aurora MySQL 集群。

```
$ mysql -h instance-7448.a12345.us-east-1.rds.amazonaws.com -P 3306 -u my-user -p
...
mysql> select date_sub(now(), interval variable_value second) "Last Startup",
    -> time_format(sec_to_time(variable_value),'%Hh %im') as "Uptime"
    -> from performance_schema.global_status where variable_name='Uptime';
+----------------------------+---------+
| Last Startup               | Uptime  |
+----------------------------+---------+
| 2021-03-16 00:40:35.000000 | 00h 00m |
+----------------------------+---------+

$ mysql -h instance-6305.a12345.us-east-1.rds.amazonaws.com -P 3306 -u my-user -p
...
mysql> select date_sub(now(), interval variable_value second) "Last Startup",
    -> time_format(sec_to_time(variable_value),'%Hh %im') as "Uptime"
    -> from performance_schema.global_status where variable_name='Uptime';
+----------------------------+---------+
| Last Startup               | Uptime  |
+----------------------------+---------+
| 2021-03-16 00:40:33.000000 | 00h 01m |
+----------------------------+---------+
```

## 独立重启写入器和读取器
<a name="USER_Reboot.Examples.RebootAsynch"></a>

 接下来的几个示例显示了运行 Aurora MySQL 2.10 版的集群。在此 Aurora MySQL 版本及更高版本中，您可以重启写入器实例，而不会导致所有读取器实例重启。这样一来，当您重启写入器实例时，查询密集型应用程序不会出现任何中断。您可以稍后重启读取器实例。可以在查询流量偏低时重启这些实例。也可以一次重启一个读取器实例。这样一来，至少有一个读取器实例始终可供您的应用程序的查询流量使用。

 以下示例使用名为 `cluster-2393` 且运行 Aurora MySQL `5.7.mysql_aurora.2.10.0` 版的集群。此集群有一个写入器实例 (`instance-9404`) 和三个读取器实例（`instance-6772`、`instance-2470` 和 `instance-5138`）。

```
$ aws rds describe-db-clusters --db-cluster-id cluster-2393 \
  --query "*[].['Cluster:',DBClusterIdentifier,DBClusterMembers[*].['Instance:',DBInstanceIdentifier,IsClusterWriter]]" \
  --output text
Cluster:        cluster-2393
Instance:       instance-5138        False
Instance:       instance-2470        False
Instance:       instance-6772        False
Instance:       instance-9404        True
```

 通过 `uptime` 命令检查每个数据库实例的 `mysql` 值表明，每个数据库实例的正常运行时间大致相同。例如，这是 `instance-5138` 的正常运行时间。

```
mysql> SHOW GLOBAL STATUS LIKE 'uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 3866  |
+---------------+-------+
```

 通过使用 CloudWatch，我们可以获得相应的正常运行时间信息，而无需实际登录实例。这样，管理员可以监控数据库，但无法查看或更改任何表数据。在这种情况下，我们指定一个五分钟时间段，然后每分钟检查一次正常运行时间值。不断增加的正常运行时间值表明，这些实例在此期间没有重启。

```
$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-9404 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	4648.0	2021-03-17T23:42:00+00:00	Seconds
DATAPOINTS	4708.0	2021-03-17T23:43:00+00:00	Seconds
DATAPOINTS	4768.0	2021-03-17T23:44:00+00:00	Seconds
DATAPOINTS	4828.0	2021-03-17T23:45:00+00:00	Seconds
DATAPOINTS	4888.0	2021-03-17T23:46:00+00:00	Seconds

$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-6772 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	4315.0	2021-03-17T23:42:00+00:00	Seconds
DATAPOINTS	4375.0	2021-03-17T23:43:00+00:00	Seconds
DATAPOINTS	4435.0	2021-03-17T23:44:00+00:00	Seconds
DATAPOINTS	4495.0	2021-03-17T23:45:00+00:00	Seconds
DATAPOINTS	4555.0	2021-03-17T23:46:00+00:00	Seconds
```

 现在重启其中一个读取器实例 `instance-5138`。等待实例在重启后再次可用。现在监控五分钟内的正常运行时间，可以看到正常运行时间在此期间已重置为零。最近的正常运行时间值是在重启完成后 5 秒钟测得的。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-5138
{
  "DBInstanceIdentifier": "instance-5138",
  "DBInstanceStatus": "rebooting"
}
$ aws rds wait db-instance-available --db-instance-id instance-5138

$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-5138 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	4500.0	2021-03-17T23:46:00+00:00	Seconds
DATAPOINTS	4560.0	2021-03-17T23:47:00+00:00	Seconds
DATAPOINTS	4620.0	2021-03-17T23:48:00+00:00	Seconds
DATAPOINTS	4680.0	2021-03-17T23:49:00+00:00	Seconds
DATAPOINTS  5.0 2021-03-17T23:50:00+00:00 Seconds
```

 接下来，对写入器实例 `instance-9404` 执行重启。比较写入器实例和其中一个读取器实例的正常运行时间值。借此，我们可以看到重启写入器并没有导致读取器重启。在 Aurora MySQL 2.10 之前的版本中，所有读取器的正常运行时间值将与写入器同时重置。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-9404
{
  "DBInstanceIdentifier": "instance-9404",
  "DBInstanceStatus": "rebooting"
}
$ aws rds wait db-instance-available --db-instance-id instance-9404

$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-9404 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	371.0	2021-03-17T23:57:00+00:00	Seconds
DATAPOINTS	431.0	2021-03-17T23:58:00+00:00	Seconds
DATAPOINTS	491.0	2021-03-17T23:59:00+00:00	Seconds
DATAPOINTS	551.0	2021-03-18T00:00:00+00:00	Seconds
DATAPOINTS  37.0  2021-03-18T00:01:00+00:00 Seconds

$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-6772 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	5215.0	2021-03-17T23:57:00+00:00	Seconds
DATAPOINTS	5275.0	2021-03-17T23:58:00+00:00	Seconds
DATAPOINTS	5335.0	2021-03-17T23:59:00+00:00	Seconds
DATAPOINTS	5395.0	2021-03-18T00:00:00+00:00	Seconds
DATAPOINTS	5455.0	2021-03-18T00:01:00+00:00	Seconds
```

 为确保所有读取器实例对配置参数的更改与写入器实例所做的更改相同，请在重启写入器实例之后重启所有读取器实例。此示例将重启所有读取器，然后等到所有读取器都可用后再继续操作。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-6772
{
  "DBInstanceIdentifier": "instance-6772",
  "DBInstanceStatus": "rebooting"
}

$ aws rds reboot-db-instance --db-instance-identifier instance-2470
{
  "DBInstanceIdentifier": "instance-2470",
  "DBInstanceStatus": "rebooting"
}

$ aws rds reboot-db-instance --db-instance-identifier instance-5138
{
  "DBInstanceIdentifier": "instance-5138",
  "DBInstanceStatus": "rebooting"
}

$ aws rds wait db-instance-available --db-instance-id instance-6772
$ aws rds wait db-instance-available --db-instance-id instance-2470
$ aws rds wait db-instance-available --db-instance-id instance-5138
```

 现在可以看到，写入器数据库实例的正常运行时间最长。该实例的正常运行时间值在整个监控期内稳步增加。读取器数据库实例都在读取器之后重启。我们可以看到监控期内每个读取器重启且其正常运行时间重置为零的时间点。

```
$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-9404 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	457.0	2021-03-18T00:08:00+00:00	Seconds
DATAPOINTS	517.0	2021-03-18T00:09:00+00:00	Seconds
DATAPOINTS	577.0	2021-03-18T00:10:00+00:00	Seconds
DATAPOINTS	637.0	2021-03-18T00:11:00+00:00	Seconds
DATAPOINTS  697.0 2021-03-18T00:12:00+00:00 Seconds

$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-2470 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	5819.0	2021-03-18T00:08:00+00:00	Seconds
DATAPOINTS  35.0  2021-03-18T00:09:00+00:00 Seconds
DATAPOINTS	95.0	2021-03-18T00:10:00+00:00	Seconds
DATAPOINTS	155.0	2021-03-18T00:11:00+00:00	Seconds
DATAPOINTS	215.0	2021-03-18T00:12:00+00:00	Seconds

$ aws cloudwatch get-metric-statistics --metric-name "EngineUptime" \
  --start-time "$(date -d '5 minutes ago')" --end-time "$(date -d 'now')" --period 60 \
  --namespace "AWS/RDS" --statistics Minimum --dimensions Name=DBInstanceIdentifier,Value=instance-5138 \
  --output text | sort -k 3
EngineUptime
DATAPOINTS	1085.0	2021-03-18T00:08:00+00:00	Seconds
DATAPOINTS	1145.0	2021-03-18T00:09:00+00:00	Seconds
DATAPOINTS	1205.0	2021-03-18T00:10:00+00:00	Seconds
DATAPOINTS  49.0  2021-03-18T00:11:00+00:00 Seconds
DATAPOINTS	109.0	2021-03-18T00:12:00+00:00	Seconds
```

## 将集群参数更改应用于 Aurora MySQL 2.10 版集群
<a name="USER_Reboot.Examples.ParamChangeNewStyle"></a>

 以下示例演示了如何将参数更改应用于 Aurora MySQL 2.10 集群中的所有数据库实例。使用此 Aurora MySQL 版本，您可以独立重启写入器实例和所有读取器实例。

 该示例使用 MySQL 配置参数 `lower_case_table_names` 进行说明。当写入器数据库实例和读取器数据库实例的此参数设置不同时，查询可能无法访问使用大写字母或混合大小写名称声明的表。或者，如果两个表名仅在字母大小写方面有所不同，则查询可能会访问错误的表。

 此示例显示如何通过检查每个实例的 `IsClusterWriter` 属性来确定集群中的写入器实例和读取器实例。该集群名为 `cluster-2393`。集群有一个名为 `instance-9404` 的写入器实例。集群中的读取器实例名为 `instance-5138` 和 `instance-2470`。

```
$ aws rds describe-db-clusters --db-cluster-id cluster-2393 \
  --query '*[].[DBClusterIdentifier,DBClusterMembers[*].[DBInstanceIdentifier,IsClusterWriter]]' \
  --output text
cluster-2393
instance-5138        False
instance-2470        False
instance-9404        True
```

 为了展示更改 `lower_case_table_names` 参数的影响，我们设置了两个数据库集群参数组。`lower-case-table-names-0` 参数组将此参数设置为 0。`lower-case-table-names-1` 参数组将此参数组设置为 1。

```
$ aws rds create-db-cluster-parameter-group --description 'lower-case-table-names-0' \
  --db-parameter-group-family aurora-mysql5.7 \
  --db-cluster-parameter-group-name lower-case-table-names-0
{
    "DBClusterParameterGroup": {
        "DBClusterParameterGroupName": "lower-case-table-names-0",
        "DBParameterGroupFamily": "aurora-mysql5.7",
        "Description": "lower-case-table-names-0"
    }
}

$ aws rds create-db-cluster-parameter-group --description 'lower-case-table-names-1' \
  --db-parameter-group-family aurora-mysql5.7 \
  --db-cluster-parameter-group-name lower-case-table-names-1
{
    "DBClusterParameterGroup": {
        "DBClusterParameterGroupName": "lower-case-table-names-1",
        "DBParameterGroupFamily": "aurora-mysql5.7",
        "Description": "lower-case-table-names-1"
    }
}

$ aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name lower-case-table-names-0 \
  --parameters ParameterName=lower_case_table_names,ParameterValue=0,ApplyMethod=pending-reboot
{
    "DBClusterParameterGroupName": "lower-case-table-names-0"
}

$ aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name lower-case-table-names-1 \
    --parameters ParameterName=lower_case_table_names,ParameterValue=1,ApplyMethod=pending-reboot
{
    "DBClusterParameterGroupName": "lower-case-table-names-1"
}
```

 `lower_case_table_names` 的默认值为 0。使用此参数设置时，表 `foo` 与表 `FOO` 不相同。此示例验证参数是否仍使用默认设置。之后，该示例创建了三个表，区别仅在于其名称中字母的大小写。

```
mysql> create database lctn;
Query OK, 1 row affected (0.07 sec)

mysql> use lctn;
Database changed
mysql> select @@lower_case_table_names;
+--------------------------+
| @@lower_case_table_names |
+--------------------------+
|                        0 |
+--------------------------+

mysql> create table foo (s varchar(128));
mysql> insert into foo values ('Lowercase table name foo');

mysql> create table Foo (s varchar(128));
mysql> insert into Foo values ('Mixed-case table name Foo');

mysql> create table FOO (s varchar(128));
mysql> insert into FOO values ('Uppercase table name FOO');

mysql> select * from foo;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+

mysql> select * from Foo;
+---------------------------+
| s                         |
+---------------------------+
| Mixed-case table name Foo |
+---------------------------+

mysql> select * from FOO;
+--------------------------+
| s                        |
+--------------------------+
| Uppercase table name FOO |
+--------------------------+
```

 接下来，将数据库参数组与集群关联以将 `lower_case_table_names` 参数设置为 1。此更改仅在每个数据库实例重启后生效。

```
$ aws rds modify-db-cluster --db-cluster-identifier cluster-2393 \
  --db-cluster-parameter-group-name lower-case-table-names-1
{
  "DBClusterIdentifier": "cluster-2393",
  "DBClusterParameterGroup": "lower-case-table-names-1",
  "Engine": "aurora-mysql",
  "EngineVersion": "5.7.mysql_aurora.2.10.0"
}
```

 首先重启写入器数据库实例。然后等待该实例再次可用。届时，连接到写入器终端节点并验证写入器实例的参数值是否已更改。`SHOW TABLES` 命令确认数据库包含三个不同的表。但是，引用名为 `foo`、`Foo` 或 `FOO` 的表的查询都会访问名称全小写的表。`foo`

```
# Rebooting the writer instance
$ aws rds reboot-db-instance --db-instance-identifier instance-9404
$ aws rds wait db-instance-available --db-instance-id instance-9404
```

 现在，使用集群终端节点的查询显示了参数更改的影响。无论查询中的表名是大写、小写还是混合大小写，SQL 语句都会访问名称全小写的表。

```
mysql> select @@lower_case_table_names;
+--------------------------+
| @@lower_case_table_names |
+--------------------------+
|                        1 |
+--------------------------+

mysql> use lctn;
mysql> show tables;
+----------------+
| Tables_in_lctn |
+----------------+
| FOO            |
| Foo            |
| foo            |
+----------------+

mysql> select * from foo;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+

mysql> select * from Foo;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+

mysql> select * from FOO;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+
```

 下一个示例显示的查询与前一个示例相同。在这种情况下，查询使用读取器终端节点并在其中一个读取器数据库实例上运行。这些实例尚未重启。因此，他们仍然使用 `lower_case_table_names` 参数的原始设置。这意味着查询可以访问 `foo`、`Foo` 和 `FOO` 表中的每一个。

```
mysql> select @@lower_case_table_names;
+--------------------------+
| @@lower_case_table_names |
+--------------------------+
|                        0 |
+--------------------------+

mysql> use lctn;

mysql> select * from foo;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+

mysql> select * from Foo;
+---------------------------+
| s                         |
+---------------------------+
| Mixed-case table name Foo |
+---------------------------+

mysql> select * from FOO;
+--------------------------+
| s                        |
+--------------------------+
| Uppercase table name FOO |
+--------------------------+
```

 接下来，重启其中一个读取器实例，然后等待它再次可用。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-2470
{
  "DBInstanceIdentifier": "instance-2470",
  "DBInstanceStatus": "rebooting"
}
$ aws rds wait db-instance-available --db-instance-id instance-2470
```

 在连接到 `instance-2470` 的实例终端节点时，查询显示新参数已生效。

```
mysql> select @@lower_case_table_names;
+--------------------------+
| @@lower_case_table_names |
+--------------------------+
|                        1 |
+--------------------------+
```

 此时，集群中的两个读取器实例以不同的 `lower_case_table_names` 设置运行。因此，与集群读取器终端节点的任何连接都会对此设置使用一个不可预测的值。务必立即重启另一个读取器实例，以便它们使用一致的设置。

```
$ aws rds reboot-db-instance --db-instance-identifier instance-5138
{
  "DBInstanceIdentifier": "instance-5138",
  "DBInstanceStatus": "rebooting"
}
$ aws rds wait db-instance-available --db-instance-id instance-5138
```

 以下示例确认所有读取器实例具有相同的 `lower_case_table_names` 参数设置。这些命令会检查每个读取器实例的 `lower_case_table_names` 设置值。使用读取器终端节点的同一命令表明，与读取器终端节点的每个连接都使用其中一个读取器实例，但该实例不可预测。

```
# Check lower_case_table_names setting on each reader instance.

$ mysql -h instance-5138.a12345.us-east-1.rds.amazonaws.com \
  -u my-user -p -e 'select @@aurora_server_id, @@lower_case_table_names'
+--------------------------+--------------------------+
| @@aurora_server_id       | @@lower_case_table_names |
+--------------------------+--------------------------+
| instance-5138            |                        1 |
+--------------------------+--------------------------+

$ mysql -h instance-2470.a12345.us-east-1.rds.amazonaws.com \
  -u my-user -p -e 'select @@aurora_server_id, @@lower_case_table_names'
+--------------------------+--------------------------+
| @@aurora_server_id       | @@lower_case_table_names |
+--------------------------+--------------------------+
| instance-2470            |                        1 |
+--------------------------+--------------------------+

# Check lower_case_table_names setting on the reader endpoint of the cluster.

$ mysql -h cluster-2393.cluster-ro-a12345.us-east-1.rds.amazonaws.com \
  -u my-user -p -e 'select @@aurora_server_id, @@lower_case_table_names'
+--------------------------+--------------------------+
| @@aurora_server_id       | @@lower_case_table_names |
+--------------------------+--------------------------+
| instance-5138            |                        1 |
+--------------------------+--------------------------+

# Run query on writer instance

$ mysql -h cluster-2393.cluster-a12345.us-east-1.rds.amazonaws.com \
  -u my-user -p -e 'select @@aurora_server_id, @@lower_case_table_names'
+--------------------------+--------------------------+
| @@aurora_server_id       | @@lower_case_table_names |
+--------------------------+--------------------------+
| instance-9404            |                        1 |
+--------------------------+--------------------------+
```

 随着参数更改应用到各处，我们可以看到设置 `lower_case_table_names=1` 的影响。无论表名是 `foo`、`Foo` 还是 `FOO`，查询都会将名称转换为 `foo`，并在各种情况下都访问同一个表。

```
mysql> use lctn;

mysql> select * from foo;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+

mysql> select * from Foo;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+

mysql> select * from FOO;
+--------------------------+
| s                        |
+--------------------------+
| Lowercase table name foo |
+--------------------------+
```