本文介绍函数计算访问数据库失败的常见原因。
常见原因排查
数据库连接偶现失败
如果您访问数据库偶现失败,可按照以下步骤进行原因排查。
数据库断开连接时,是否使用
destroy()
替换end()
使用。由于函数实例在空闲2~5分钟左右后,会自动销毁。使用
end()
方法时,需在数据库收到查询结果后,才能断开MySQL服务器的连接。如果数据库未正常断开连接,会导致下一次连接时超时。通过VPC访问数据库时,是否设置了安全组。
使用安全组方式访问数据库会导致函数连接不稳定,推荐您使用配置IP地址白名单的方式访问数据库。
参考数据库连接必现失败,逐一排查原因。
数据库连接必现失败
如果您访问数据库失败,可按照以下步骤排查原因。
在请求的数据库中查找连接记录,确认对应时间段内是否有来自函数计算的连接请求。
检查访问数据库的用户名和密码是否正确。
用户名和密码正确,请跳转步骤3。
用户名和密码不正确,重新输入正确的用户名或密码。
登录实例并尝试是否能使用
telnet
命令连接数据库。检查您的函数代码逻辑是否正确。
函数计算为您提供示例代码,您可以直接使用。更多信息,请参见访问其他服务。
如果按照以上步骤逐步排查之后,您的问题仍未解决,请加入钉钉用户群(钉钉群号:11721331),联系函数计算工程师即时沟通处理。
网络问题排查
通过VPC访问数据库
请确保创建的数据库实例与访问数据库的函数在同一地域。
如果报错
AccessDenied
,错误码为403,请确保提供对ENI的操作授权。如果报错
InvalidArgument
,错误码为400,请确保VPC、vSwitch和安全组配置正确。请检查数据库是否设置了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
命令连接数据库。如果可以连接,则可以排除数据库侧网络原因。