为什么我的 Amazon RDS for MySQL 数据库实例停留在“重启”状态?
我正在尝试重启适用于 MySQL 数据库实例的 Amazon Relational Database Service (Amazon RDS)。但是,我的数据库实例停留在“重启”状态,或者重启时间比预期更长。为什么会出现这种情况,我该如何解决呢?
简短描述
在执行重启之前,请确保停止数据库实例中的任何传入或正在进行的事务。正在进行的事务将被停止,任何未提交的事务都将被回滚。
**注意:**回滚未提交的事务可能是一项代价极高的操作。在您Amazon RDS for MySQL可再次可用之前,未提交的事务也可能需要很长时间才能完成。
重新启动开始后,该过程将无法取消,重新启动将一直持续到完成。如果重启时间比预期长,请调查根本原因,然后考虑以下故障排除方法:
- 检查正在进行的查询。
- 检查是否有任何未清除的事务处理。
- 查看 MySQL 错误日志文件。
解决方法
检查正在进行的查询
使用 SHOW FULL PROCESSLIST(显示完整进程列表)命令检查您的Amazon RDS for MySQL 实例上是否有任何活动查询:
mysql> SHOW FULL PROCESSLIST;
以下是一个示例输出,表明 UPDATE 查询仍在进行中:
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----+---------------+---------------------+------+---------+------+----------+-----------------------+ | 2 | rdsadmin | localhost:30662 | NULL | Sleep | 4 | | NULL | | 101 | admin | 172.31.28.252:58288 | NULL | Query | 111 | updating |UPDATE tutorials SET tu| +-----+---------------+---------------------+------+---------+------+----------+-----------------------+
输出提供有关在数据库上运行的 MySQL 线程的信息。如果有查询仍在运行,则在执行重新启动之前允许查询完成。
注意:请以主用户身份运行 SHOW FULL PROCESSLIST(显示完整进程列表)查询。如果您不是主用户,则必须具有 MySQL 服务器管理权限才能查看 MySQL 实例上的所有活动线程。否则,输出仅显示用户的 MySQL 帐户中的活动线程 ID。有关更多信息,请参阅 MySQL 网站上的 SHOW PROCESSLIST(显示进程列表)语句和 MySQL 服务器管理。
检查是否有任何未清除的事务处理
MySQL InnoDB 引擎使用多版本并发控制 (MVCC),它在事务期间维护已更改行的旧版本的列表。如果必须回滚事务,则 InnoDB 可以在此过程中执行任何撤消操作。在撤消空间内捕获旧版本的行。在事务期间不再调用这些旧版本时,它们将被清除。如果由于事务仍然引用捕获的更改而未清除这些更改,则历史记录列表的长度可能会增加。有关更多信息,请参阅 MySQL 网站上的 InnoDB 多版本控制。
未清除的事务处理表示为历史记录列表长度值。此值可以在 SHOW ENGINE INNODB STATUS(显示引擎 INNODB 状态)命令输出中的“事务处理”下找到。请注意,历史记录列表长度通常是一个较低的值,尽管写入量大的工作负载或长时间运行的事务可能会导致值增加。有关历史记录列表长度值的更多信息,请参阅 MySQL 网站上的清除配置。
要检查历史记录列表长度内是否有任何未清除的事务,请使用 SHOW ENGINE INNODB STATUS(显示引擎 INNODB 状态)命令。此命令的输出还允许您查看历史记录列表长度的大小以及“事务处理”部分下列出的任何正在进行的事务处理的大小。有关查看列出的事务处理的更多信息,请参阅 MySQL 网站上的 InnoDB 标准监控和锁定监控输出。
例如:
------------ TRANSACTIONS ------------ Trx id counter 105746959 Purge done for trx's n:o < 105746958 undo n:o < 0 state: running but idle History list length 32 LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 328605240396520, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 328605240395600, not started 0 lock struct(s), heap size 1136, 0 row lock(s)
**注意:**如果历史记录列表长度很高且存在活动的事务处理,那么重新启动不是最佳做法。
有关更多信息,请参阅 MySQL 网站上的 SHOW ENGINE INNODB STATUS(显示引擎 INNODB 状态)。
查看 MySQL 错误日志文件
在 Amazon RDS 中,默认情况下会启用 MySQL 错误日志文件。如果您怀疑 RDS 实例需要太长时间才能重新可用,请查看 MySQL 错误日志文件的内容。MySQL 在启动、关闭或遇到任何错误时写入错误日志文件。
例如,作为 InnoDB 崩溃恢复过程的一部分,InnoDB 可能必须回滚任何未提交的事务。如果回滚了任何未提交的事务,则 MySQL 错误日志会记录此事件。有关更多信息,请参阅 MySQL 网站上的 InnoDB 崩溃恢复。
其他问题排查
注意:如果您选择执行时间点恢复 (PITR) 或从快照还原,则新的 Amazon RDS 实例可能无法立即可用。有关更多信息,请参阅以下文章:
如果您Amazon RDS for MySQL数据库实例重启了一段时间,请尝试以下其他故障排除提示:
- 如果您的数据库实例启用了自动备份,则执行 PITR 以在指定时间内还原到新的 Amazon RDS 实例。您可以恢复到备份保留期内的任意时间点。
**注意:**默认情况下,还原的数据库实例与默认数据库参数和选项组关联。但是,您可以通过在还原期间指定自定义参数组和选项组来使用它们。 - 通过创建新的数据库实例,从最新的数据库快照还原数据库实例。一旦恢复的数据库实例状态可用,您就可以立即使用该实例。
- 如果数据库实例有只读副本,则将该只读副本提升为独立数据库实例。提升只读副本时,数据库实例会在可用之前自动重新启动。
定期监控数据库活动也是一种最佳实践。您可以使用以下工具监控Amazon RDS for MySQL数据库实例:
- Amazon CloudWatch:借助 Amazon CloudWatch,您可以监控任何正在进行的数据库工作负载。如果您观察到数据库连接、CPU 使用率或写/读 IOPS 值较高,则数据库实例中可能存在持续活动。
- 增强监控:增强监控需要获得向 CloudWatch Logs 发送操作系统指标信息的权限。您可以使用 AWS Identity and Access Management (IAM) 角色授予增强监控权限。在启用增强监控之前,您必须首先创建一个 IAM 角色。
- 性能详情:性能架构适用于 Amazon RDS for MySQL(或 MariaDB)使用的可选性能工具。如果启用或禁用性能详情,则无需重启数据库实例。您也不会遇到任何停机或故障转移。
相关内容
- 已提问 7 个月前lg...
- AWS 官方已更新 4 年前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前