

# 查找 Aurora MySQL 主要版本升级失败的原因
<a name="AuroraMySQL.Upgrading.failure-events"></a>

在[教程](AuroraMySQL.Upgrading.Tutorial.md)中，从 Aurora MySQL 版本 2 升级到版本 3 已获成功。但是，如果升级失败，您会想知道原因。

您可以首先使用 `describe-events` Amazon CLI 命令来查看数据库集群事件。此示例显示过去 10 小时 `mydbcluster` 的事件。

```
aws rds describe-events \
    --source-type db-cluster \
    --source-identifier mydbcluster \
    --duration 600
```

在本例中，我们遇到了升级预检查失败。

```
{
    "Events": [
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster engine version upgrade started.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:22.846000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        },
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster is in a state that cannot be upgraded: Upgrade prechecks failed. For more details, see the  
             upgrade-prechecks.log file. For more information on troubleshooting the cause of the upgrade failure, see 
             https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:24.373000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        }
    ]
}
```

要诊断问题的确切原因，请检查写入器数据库实例的数据库日志。如果升级到 Aurora MySQL 版本 3 失败，写入器实例将包含一个名为 `upgrade-prechecks.log` 的日志文件。此示例说明了如何检测该日志是否存在，然后将其下载到本地文件以供检查。

```
aws rds describe-db-log-files --db-instance-identifier mydbcluster-instance \
    --query '*[].[LogFileName]' --output text

error/mysql-error-running.log
error/mysql-error-running.log.2024-04-11.20
error/mysql-error-running.log.2024-04-11.21
error/mysql-error.log
external/mysql-external.log
upgrade-prechecks.log

aws rds download-db-log-file-portion --db-instance-identifier mydbcluster-instance \
    --log-file-name upgrade-prechecks.log \
    --starting-token 0 \
    --output text >upgrade_prechecks.log
```

`upgrade-prechecks.log` 文件为 JSON 格式。我们使用 `--output text` 选项下载该文件，避免在另一个 JSON 包装器中对 JSON 输出进行编码。对于 Aurora MySQL 版本 3 升级，此日志始终包含某些信息和警告消息。如果升级失败，日志仅包含错误消息。如果升级成功，则根本不会生成日志文件。

要汇总所有错误并显示关联的对象和描述字段，您可以对 `upgrade-prechecks.log` 文件的内容运行命令 `grep -A 2 '"level": "Error"'`。这样做会显示每个错误行及其后两行。其中包含相应数据库对象的名称以及有关如何解决问题的指导。

```
$ cat upgrade-prechecks.log | grep -A 2 '"level": "Error"'

"level": "Error",
"dbObject": "problematic_upgrade.dangling_fulltext_index",
"description": "Table `problematic_upgrade.dangling_fulltext_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
```

在此示例中，您可以对有问题的表运行以下 SQL 命令来尝试修复问题，也可以重新创建没有悬挂索引的表。

```
OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;
```

然后重试升级。