更新时间:2024-09-12 GMT+08:00
分享

GaussDB(for MySQL)标准版实例连接失败怎么办

问题分析

主要从八个方面考虑:

  1. 排除数据库实例异常

    例如:数据库系统故障,实例状态异常,实例或表被锁定。

  2. (常见)使用正确的客户端连接方式
    • 内网连接需要GaussDB(for MySQL)标准版与ECS实例必须在同一区域、VPC内。
    • 公网连接需要购买或使用已有EIP,并对实例绑定该EIP 。
  3. 使用正确的SSL方式安全连接

    界面SSL开关开启和关闭,分别对应不用的连接命令。例如:

    • 开关开启:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem
    • 开关关闭:mysql -h 172.16.0.31 -P 3306 -u root -p
  4. 排除连接命令错误

    例如:连接地址错误、端口参数配置错误、用户名和密码错误、SSL方式下命令错误。

  5. (常见)排除网络不通

    内网访问

    1. 确认ECS与GaussDB(for MySQL)标准版是否在同一个区域,VPC。
    2. 检查安全组规则。

      安全组外访问安全组内的GaussDB(for MySQL)标准版实例时,需要为安全组添加相应的入方向规则。

    3. 在ECS上测试是否可以正常连接到GaussDB(for MySQL)标准版实例地址的端口。

    公网访问

    1. 检查安全组规则。

      安全组外访问安全组内的GaussDB(for MySQL)标准版实例时,需要为安全组添加相应的入方向规则。

    2. 检查网络ACL规则。
    3. 相同区域主机进行ping测试。
  6. (常见)排除实例的连接数满的情况

    实例连接数过多,可能会导致业务侧无法正常连接。

  7. (常见)排除实例的磁盘满的情况

    当实例处于“磁盘空间满”状态时,影响数据的正常读写操作。

  8. 连接失败的常见报错

    包含连接失败的常见报错,以及相应的解决方法。

排查思路

  1. 排除数据库实例异常

    检查办法:请在控制台检查实例状态是否为“正常”。

    能原因:数据库系统故障,实例状态异常,实例或表被锁定等。

    解决方案:如果实例状态为“异常”,请尝试重启。

  2. 使用正确的客户端连接方式

    建议安装不低于数据库实例版本的引擎客户端。

    表1 客户端连接方式

    连接方式

    使用场景

    连接样例

    内网方式

    系统默认提供内网IP地址。

    当应用部署在ECS上,且该ECS与GaussDB(for MySQL)标准版实例处于同一区域,同一VPC时,建议单独使用内网IP连接ECS与GaussDB(for MySQL)标准版实例。

    mysql -h <内网地址> -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    公网方式

    不能通过内网IP地址访问GaussDB(for MySQL)标准版实例时,使用公网访问,建议单独绑定弹性公网IP连接ECS(或公网主机)与GaussDB(for MySQL)标准版实例。

    用户需要购买弹性公网IP,请参见弹性公网IP计费说明

    mysql -h <弹性公网IP> -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

  3. 使用正确的SSL方式安全连接
    • (推荐)SSL方式:实例连接管理页面的SSL开关开启,并且上传证书到ECS。

      mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 普通方式:实例基本信息页面的SSL开关关闭。

      mysql -h 172.16.0.31 -P 3306 -u root -p

  4. 排除连接命令错误

    请获取正确的连接地址、端口参数配置、用户名和密码、SSL方式下命令错误,并重试连接实例。

    SSL内网连接GaussDB(for MySQL)标准版实例示例:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 连接地址

      目标实例的“连接管理”页面,“内网连接”页签的“内网地址”

    • 数据库端口

      目标实例的“连接管理”页面,“内网连接”页签的“数据库端口”

    • 用户名和密码

      root管理员账号及其对应的密码。

    • 证书名称

      SSL证书文件名,该文件需放在执行该命令的路径下。

    SSL公网连接GaussDB(for MySQL)标准版实例示例:mysql -h 公网地址 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 连接地址

      目标实例的“连接管理”页面,“公网连接”页签的“弹性公网IP”

    • 数据库端口

      目标实例的“连接管理”页面,“公网连接”页签的“数据库端口”

    • 用户名和密码

      root管理员账号及其对应的密码。

    • 证书名称

      SSL证书文件名,该文件需放在执行该命令的路径下。

  5. 排除网络不通
    内网访问
    1. 检查ECS与GaussDB(for MySQL)标准版是否在同一个区域,VPC。
      • 不同区域的云服务之间内网互不相通,无法访问实例。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。
      • 不同VPC下,请参见测试网络连通性失败怎么办
    2. 检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将GaussDB(for MySQL)标准版实例的内网IP地址和端口添加到出方向规则。
      • 查看GaussDB(for MySQL)标准版实例的安全组的入方向规则,需要将ECS实例的IP地址和端口添加到入方向规则。
    3. 在ECS上测试是否可以正常连接到GaussDB(for MySQL)标准版实例地址的端口。
      telnet <连接地址> <端口号>
      • 可以通信,说明网络是正常的。
      • 无法通信,请联系客服协助解决。

    公网访问

    1. 检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将GaussDB(for MySQL)标准版实例的公网IP地址和端口添加到出方向规则。
      • 查看GaussDB(for MySQL)标准版实例的安全组的入方向规则,需要将ECS实例的IP地址和端口添加到入方向规则。
    2. 检查网络ACL规则。
      1. 进入虚拟私有云网络ACL列表。
      2. 检查EIP绑定的网卡是否在网络ACL关联的子网下。
      3. 查看网络ACL当前是“开启”状态还是“关闭”状态。

        若网络ACL为“开启”状态,需要添加ICMP放通规则进行流量放通

      注意:网络ACL的默认规则是丢弃所有出入方向的包,关闭“网络ACL”后,其默认规则仍然生效。

    3. 相同区域主机进行ping测试。

      如果在原ECS上没有ping通GaussDB(for MySQL)标准版实例绑定的EIP,请在相同区域的另一台ECS上去ping该EIP,如果可以正常ping通,说明虚拟网络正常,请联系客服协助解决。

  6. 排除实例的连接数满的情况

    检查办法

    1. 通过show variables like '%max%connections%';命令查看实例连接数,示例:

    2. 查看实例的连接数指标是否已达上限,可查看目标实例的“数据库总连接数”“当前活跃连接数”,判断是否需要释放连接。

    可能原因:数据库连接数过多,可能会导致业务侧无法正常连接,也会导致实例全量备份和增量备份失败,影响业务的正常使用。

    解决方案
    1. 请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。
    2. 如果设定值为default,可以对数据库进行规格扩容,用以提高max_connections的值,具体请参见变更数据库规格。
    3. 云监控服务目前可以监控数据库CPU、内存、磁盘、连接数等指标,并且设置告警策略,出现告警时可以提前识别风险。
  7. 排除实例的磁盘满的情况
    检查办法:磁盘空间使用率可通过管理控制台或云监控服务查看。
    • 通过管理控制台查看

      选择目标实例,单击实例名称,进入“基本信息”页面。在“存储空间”模块,查看磁盘使用率。

    • 通过云监控服务查看

      选择目标实例,单击“查看监控指标”,跳转到云监控页面,查看目标实例的磁盘使用率指标。

  8. 连接失败的常见报错

    通过命令连接数据库实例时,可能出现的报错信息和解决方案如下所示:

    • ERROR 2013:Lost connection to MySQL server during query

      连接超时参数“wait_timeout”和“interactive_timeout”设置过小时,GaussDB(for MySQL)标准版会自动断开超时的空连接。

    • ERROR 1045 (28000): Access denied for user 'root'@'192.168.0.30' (using password: YES)

      排除是否密码错误问题,确认该主机是否有连接数据库实例的权限,以及GaussDB(for MySQL)标准版客户端和实例VIP是否可以连通。

    • ERROR 1226 (42000): User 'test' has exceeded the 'max_user_connections' resource (current value:10)

      排查是否限制了实例的连接数,导致连接失败。

    • ERROR 1129 (HY000): Host '192.168.0.111' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

      排查是否由于GaussDB(for MySQL)标准版客户端连接数据库的失败次数(不包括密码错误),超过了max_connection_errors的值,导致连接失败。

    • [Warning] Access denied for user 'username'@'yourIp' (using password: NO)

      连接GaussDB(for MySQL)标准版实例时出现该报错,请检查用户名或密码是否正确。

    • [Warning] Access denied for user 'username'@'yourIp' (using password: YES)

      连接GaussDB(for MySQL)标准版实例时出现该报错,请检查用户名或密码是否正确。

  9. 如果上述方法均不能解决您的疑问,请联系客服为您解答。

相关文档