为什么 RDS 数据库实例上的数据库连接断开了?

上次更新日期:2022 年 7 月 19 日

我的 Amazon Relational Database Service (Amazon RDS) 数据库连接突然断开,导致意外停机。为什么数据库连接断开了?

解决方法

Amazon RDS 数据库连接断开的原因很多。要了解数据库连接断开的原因,请确定数据库连接是在 RDS 数据库实例的维护时段期间还是之外断开。

如果数据库连接在 RDS 维护时段期间断开

在数据库实例维护时段期间,AWS 执行的维护活动会导致数据库连接断开。

次要版本自动升级(如已在 Amazon RDS 上启用)

当 Amazon RDS 指定新的首选次要引擎版本并且您的数据库实例正在运行较早版本时,如果您启用了次要版本自动升级功能,则 Amazon RDS 会在计划维护时段期间执行升级。这会导致在次要版本升级期间数据库连接断开,因为任何引擎级版本升级都涉及 RDS 停机。

硬件维护

当数据库实例的底层主机在降级硬件上运行时,Amazon RDS 会计划进行硬件维护。硬件维护在为数据库实例配置的维护时段期间执行。在计划维护之前,您将收到关于计划硬件维护时段的电子邮件通知,其中包括维护时间和受影响的可用区。

操作系统维护

在为数据库实例配置的维护时段期间,Amazon RDS 会定期更新底层操作系统。如果操作系统更新涉及停机,Amazon RDS 会将维护计划到下一个维护时段。如果操作系统更新不是必需的维护,则可以通过调整首选维护时段来推迟维护时段。如果是必需的维护,则无法推迟操作系统更新,更新将在随后的维护时段期间应用。

通过选择“在下一个维护时段应用”对 Amazon RDS 执行修改

对 RDS 配置执行任何修改时,您可以选择是要立即应用修改,还是要在下一个维护时段应用修改。如果您选择在下一个维护时段执行修改,则不会立即停机。在下一个维护时段期间应用以下修改可能导致停机:

  • 重命名数据库实例标识符
  • 修改数据库实例类
  • 更改备份保留期
  • 修改数据库端口
  • 更改数据库引擎版本
  • 附加新的子网组

请参阅数据库实例设置信息,了解可供修改的详细设置以及对数据库实例的影响和数据库实例的停机时间。

如果数据库连接在 RDS 维护时段之外断开

如果数据库连接达到客户端/服务器端超时,数据库连接可能会断开。

在应用程序端配置的客户端超时参数

在应用程序端配置的客户端超时参数可能会导致数据库连接断开。如果查询的处理时间过长,则会话可能会从客户端错误终止。要解决此问题,请延长客户端的超时设置。

在附加到 Amazon RDS 的自定义参数组中配置的服务器超时参数

主动设置 TCP keepalives 会导致客户端连接超时。当客户端的空闲时间达到 tcp_keepalives_idle 中设置的时间tcp_keepalives_count 中设置的消息数时,会发生超时。当连接正在等待服务器响应,然而数据库实例上正在运行长时间运行的查询时,也可能会发生超时。

如果 idle_in_transaction_session_timeout 的设置值低于默认值 24 小时,则任何空闲时间超过配置值的会话都将结束。如果您主动设置此值,即使运行的查询需要更长时间才能从服务器获得响应,则当会话的空闲时间超过配置的超时值时,连接会断开。

意外数据库重启/失效转移

底层硬件的暂时性问题可能导致与数据库实例的通信中断。硬件问题可能在多可用区部署中启动失效转移,以及通过替换底层主机在单可用区部署中启动恢复。此问题可能导致数据库实例运行不正常,因为 RDS 监控系统无法与 RDS 实例通信以执行运行状况检查。

暂时性网络问题会影响数据库实例的底层主机。内部监控系统会检测到此问题,并主动为单可用区部署启动恢复,为多可用区部署启动失效转移。

当较高的数据库负载导致数据库内存紧张,进而阻止 RDS 监控系统与底层主机联系时,数据库实例会变为无响应。为避免由于数据库过载而导致数据库实例失效转移和重启,请在数据库实例上适当配置内存参数。

底层存储子系统的暂时性问题能够导致 Amazon Elastic Block Store(Amazon EBS)卷的延迟增加,该延迟由内部监控系统识别。作为一项主动措施,监控系统会为单可用区部署启动恢复。在多可用区部署中,将执行到辅助可用区的失效转移。