文档首页> 云数据库 GaussDB(for MySQL)> 常见问题> 数据库连接> GaussDB(for MySQL)实例连接失败怎么办
更新时间:2024-04-01 GMT+08:00

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

问题分析

主要从以下方面考虑:

  1. 排除数据库实例异常

    例如:实例状态异常。

  2. (常见)使用正确的客户端连接方式
    • 内网连接需要GaussDB(for MySQL)与ECS实例在同一区域、VPC内。
    • 公网连接需要购买或使用已有EIP,并对GaussDB(for MySQL)实例绑定该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. 检查安全组规则。
      3. 在ECS上测试是否可以正常连接到GaussDB(for MySQL)实例地址的端口。
    • 公网访问
      1. 检查安全组规则。
      2. 检查网络ACL规则。
      3. 相同区域主机进行ping测试。
  6. (常见)排除实例的连接数满的情况

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

  7. 连接失败的常见报错

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

排查思路

图1 连接失败的排查思路
  1. 排除数据库实例异常

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

    能原因:云数据库 GaussDB(for MySQL)实例状态异常。

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

    图2 检查实例状态
  2. 使用正确的客户端连接方式

    安装MySQL 8.0的数据库实例版本的客户端

    内网和公网连接实例的具体操作步骤,请参见外部服务器能否访问GaussDB(for MySQL)数据库

    表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

    弹性公网IP:目标实例的“基本信息”页面,“网络信息”模块的“读写公网地址”

  3. 使用正确的SSL方式安全连接
    • (推荐)SSL方式:实例基本信息页面的SSL开关开启,下载解压后获取根证书(ca.pem)并且上传证书到ECS的“/tmp”目录下。

      例如:

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

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

      例如:

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

  4. 排除连接命令错误

    请获取正确的连接地址、端口参数配置、用户名和密码、SSL证书,并重试连接实例。

    • SSL内网连接GaussDB(for MySQL)
      • 连接命令

        mysql -h 连接地址 -P 数据库端口 -u 用户名 -p --ssl-ca=SSL证书

        示例:

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

      • 连接地址

        目标实例的“基本信息”页面,“网络信息”模块的“读写内网地址”

        图4 内网地址

      • 数据库端口

        目标实例的“基本信息”页面,“网络信息”模块的“数据库端口”

      • 用户名和密码

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

      • SSL证书

        SSL证书文件名,路径和文件名需要与命令中的保持一致。

    • SSL公网连接GaussDB(for MySQL)
      • 连接命令

        mysql -h 连接地址 -P 数据库端口 -u 用户名 -p --ssl-ca=SSL证书名称

        示例:

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

      • 连接地址

        目标实例的“基本信息”页面,“网络信息”模块的“读写公网地址”

        图5 读写公网地址

      • 数据库端口

        目标实例的“基本信息”页面,“网络信息”模块的“数据库端口”

      • 用户名和密码

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

      • 证书名称

        SSL证书文件名,路径和文件名需要与命令中的保持一致。

  5. 排除网络不通
    内网访问
    1. 检查ECS与GaussDB(for MySQL)是否在同一个区域,VPC。
      图6 查看ECS的VPC
      图7 查看GaussDB(for MySQL)的VPC
    2. 检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要使用添加规则或快速添加规则功能将GaussDB(for MySQL)实例的读写内网地址和端口添加到出方向规则。
        图8 ECS的安全组
        图9 快速添加出方向规则(读写内网地址)
        图10 添加出方向规则(读写内网地址)
      • 查看GaussDB(for MySQL)的安全组的入方向规则,需要使用添加规则或快速添加规则功能将ECS实例的私有IP地址和端口添加到入方向规则
        图11 快速添加入方向规则(ECS的私有IP地址)
        图12 添加入方向规则(ECS的私有IP地址)

    3. 在ECS上测试是否可以正常连接到GaussDB(for MySQL)实例的读写内网地址。

      telnet 读写内网地址 端口

      示例:

      telnet 192.168.0.153 3306
      • 可以通信,说明网络是正常的。
      • 无法通信,请提交工单联系华为云客服协助解决。

    公网访问

    1. 检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要使用添加规则或快速添加规则功能将GaussDB(for MySQL)实例的读写公网地址和端口添加到出方向规则。
        图13 ECS的安全组
        图14 快速添加出方向规则(读写公网地址)
        图15 添加出方向规则(读写公网地址)
      • 查看GaussDB(for MySQL)的安全组的入方向规则,需要使用添加规则或快速添加规则功能将ECS实例的弹性公网IP地址和端口添加到入方向规则
        图16 快速添加入方向规则(ECS的弹性公网IP地址)
        图17 添加入方向规则(ECS的弹性公网IP地址)

    2. 检查网络ACL规则。
      1. 进入虚拟私有云网络ACL列表。
      2. 检查GaussDB(for MySQL)和ECS绑定的弹性公网IP绑定的网卡是否在网络ACL关联的子网下。
      3. 查看网络ACL当前是“开启”状态还是“关闭”状态。

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

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

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

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

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

    检查办法

    1. 登录管理控制台
    2. 单击管理控制台左上角的,选择区域和项目。
    3. 在页面左上角单击,选择数据库 > 云数据库 GaussDB(for MySQL)
    4. 在“实例管理”页面,选择目标实例,单击操作列的“登录”。
    5. 输入密码,单击“测试连接”,连接成功后单击“登录”,进入数据管理服务。
    6. 选择SQL操作 > SQL查询,打开新的SQL窗口。
    7. 输入命令并单击“执行SQL”,查看实例连接数,示例:

      show variables like '%max%connections%';

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

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

    解决方案
    1. 请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。
    2. 如果设定值为default,可以对数据库进行规格扩容,用以提高max_connections的值,具体请参见变更数据库规格
    3. 云监控服务目前可以监控数据库CPU、内存、磁盘、连接数等指标,并且设置告警策略,出现告警时可以提前识别风险。支持的监控指标请参见支持的监控指标
  7. 连接失败的常见报错

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

    • ERROR 2013:Lost connection to MySQL server during query

      连接超时参数“wait_timeout”和“interactive_timeout”设置过小,GaussDB(for MySQL)会自动断开超时的空连接。具体请参见客户端连接实例后会自动断开

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

      排除是否密码错误问题,确认该主机是否有连接数据库实例的权限,具体请参见连接数据库报错Access denied

    • 报错 SSL routines:tls_early_post_process_client_hello:unsupported protocol

      从报错信息可以看出,可能和TLS版本相关,查看GaussDB(for MySQL)TLS版本,升级客户端TLS版本,具体请参见客户端TLS版本不一致导致SSL连接失败

    • 使用JDBC连接数据库报错:unable to find certification path to requested target

      可能使用的是mariadb的jar包,而非MySQL的官方驱动包,而mariadb与官方的使用方法略有区别,具体请参见mariadb-connector SSL方式连接数据库失败

  8. 如果上述方法均不能解决您的疑问,请提交工单联系华为云客服为您解答。

数据库连接 所有常见问题

more