数据库访问失败的常见原因

本文介绍函数计算访问数据库失败的常见原因。

常见原因排查

数据库连接偶现失败

如果您访问数据库偶现失败,可按照以下步骤进行原因排查。

  1. 数据库断开连接时,是否使用destroy()替换end()使用。

    由于函数实例在空闲2~5分钟左右后,会自动销毁。使用end()方法时,需在数据库收到查询结果后,才能断开MySQL服务器的连接。如果数据库未正常断开连接,会导致下一次连接时超时。

  2. 通过VPC访问数据库时,是否设置了安全组。

    使用安全组方式访问数据库会导致函数连接不稳定,推荐您使用配置IP地址白名单的方式访问数据库。

  3. 参考数据库连接必现失败,逐一排查原因。

数据库连接必现失败

如果您访问数据库必现失败,可按照以下步骤排查原因。

  1. 在请求的数据库中查找连接记录,确认对应时间段内是否有来自函数计算的连接请求。

    • 数据库中无函数计算连接请求,请跳转步骤2

    • 数据库中有函数计算连接请求,请跳转步骤4

  2. 检查访问数据库的用户名和密码是否正确。

    • 用户名和密码正确,请跳转步骤3

    • 用户名和密码不正确,请重新输入正确的用户名或密码。

  3. 登录实例并尝试是否能使用telnet命令连接数据库。

    • 可以连接,请跳转步骤4

    • 无法连接,请检查网络问题。具体操作,请参见网络问题排查

  4. 检查您的函数代码逻辑是否正确。

如果按照以上步骤逐步排查之后,您的问题仍为解决,请加入钉钉用户群(钉钉群号:64970014484),联系函数计算工程师即时沟通处理。

网络问题排查

  • 通过VPC访问数据库

    • 请确保创建的数据库实例与访问数据库的函数在同一地域。

    • 如果报错AccessDenied,错误码为403,请确保提供对ENI的操作授权。

    • 如果报错InvalidArgument,错误码为400,请确保VPCvSwitch安全组配置正确。

    • 请检查数据库是否设置了IP地址白名单。如果设置了白名单,则需要设置相应的VPC内网IP地址段和交换机内网IP地址段。您可以将白名单设置为0.0.0.0/0,允许所有IP地址访问。更多信息,请参见配置数据库访问IP地址白名单

    • 请确保安全组出口方向放行数据库的端口和内网IP地址段。

    • 如果报错ResourceExhausted,错误码为429,请检查交换机的IP网段内是否可用IP地址数量不足。自动配置提供的网络前缀长度为24,可用IP地址总数量为252个。如果实例数量过多,有可能会超出限制。需手动调整交换机IP地址网段,以及对应的安全组。

  • 通过公网访问数据库

    • 请确保服务的网络配置中已开启公网访问。更多信息,请参见配置网络

    • 如果数据库设置了固定IP地址白名单,请确保为函数计算配置固定公网IP地址。函数计算中,运行函数的实例由函数计算动态分配,IP地址不固定。使用公网访问数据库,需要配置固定公网IP地址

  • 数据库侧网络原因

    您可以在其他服务侧配置与函数计算类似的网络环境,并尝试是否能使用telnet命令连接数据库。如果可以连接,则可以排除数据库侧网络原因。