云服务器内容精选

  • 问题分析 主要从以下方面考虑: 排除数据库实例异常 例如:实例状态异常。 (常见)使用正确的客户端连接方式 内网连接需要 GaussDB (for MySQL)与E CS 实例在同一区域、VPC内。 公网连接需要购买或使用已有EIP,并对GaussDB(for MySQL)实例绑定该EIP 。 使用正确的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 排除连接命令错误 例如:连接地址错误、端口参数错误、用户名和密码错误、SSL方式连接时参数配置错误。 (常见)排除网络不通 内网访问 确认ECS与GaussDB(for MySQL)是否在同一区域、VPC内。 检查安全组规则。 在ECS上测试是否可以正常连接到GaussDB(for MySQL)实例地址的端口。 公网访问 检查安全组规则。 检查网络ACL规则。 相同区域主机进行ping测试。 (常见)排除实例的连接数满的情况 实例连接数过多,可能会导致业务侧无法正常连接。 连接失败的常见报错 包含连接失败的常见报错,以及相应的解决方法。
  • 如何查看云数据库 RDS for MySQL数据库的连接情况 您可以通过以下任意一种方式查看RDS for MySQL数据库的连接情况: 在RDS for MySQL实例上以管理员账户root执行以下命令,查看当前实例上正在运行的线程。 show full processlist; Id:线程ID标识,可通过kill id终止语句。 User:当前连接用户。 Host:显示这个连接从哪个IP的哪个端口上发出。 db:数据库名。 Command:连接状态,一般是sleep(休眠),query(查询),connect(连接)。 Time:连接持续时间,单位是秒。 State:显示当前SQL语句的状态。 Info:显示这个SQL语句。 Memory_used:当前连接的内存使用量。 Memory_used_by_query:当前Query的内存使用量。 CPU_time:显示当前连接已经建立的时间(针对最新小版本,5.6版本此列信息有实际的取值,5.7和8.0版本此列信息未采集)。 Trx_executed_time:显示当前事务的执行时间。 在实例管理页面单击“查看监控指标”,进入指标信息页面。 查看“数据库总连接数”指标,一般情况下,主备实例会占用2个连接,除此之外的连接为当前实例有用户在连接使用。 父主题: 数据库连接
  • 问题分析 主要从以下几个方面考虑: 排除数据库实例异常 例如:数据库系统故障,实例状态异常,实例或表被锁定。 (常见)使用正确的客户端连接方式 内网连接需要GaussDB与ECS实例必须在同一区域、VPC。 公网连接需要购买或使用已有EIP,并对GaussDB实例绑定该EIP 。 排除连接命令错误 例如:连接地址错误、端口参数配置错误、用户名和密码错误。 (常见)排除网络不通 内网访问 确认ECS与GaussDB是否在同一个区域,VPC。 检查安全组规则。 安全组外访问安全组内的GaussDB实例时,需要为安全组添加相应的入方向规则。 在ECS上测试是否可以正常连接到GaussDB实例地址的端口。 公网访问 检查安全组规则。 安全组外访问安全组内的GaussDB实例时,需要为安全组添加相应的入方向规则。 检查网络ACL规则。 相同区域主机进行ping测试。 (常见)排除实例的磁盘满的情况 当实例处于“磁盘空间满”状态时,影响数据的正常读写操作。 连接失败的常见报错 包含连接失败的常见报错,以及相应的解决方法。
  • 问题现象 连接GaussDB(DWS) 数据库时报错,提示客户端连接数太多。 使用gsql等SQL客户端工具连接数据库时,出现如下所示的报错信息: 1 FATAL: Already too many clients, active/non-active/reserved: 5/508/3. 使用客户端并发连接数据库时,出现如下所示的报错信息: 1 2 [2019/12/25 08:30:35] [ERROR] ERROR: pooler: failed to create connections in parallel mode for thread 140530192938752, Error Message: FATAL: dn_6001_6002: Too many clients already, active/non-active: 468/63. FATAL: dn_6001_6002: Too many clients already, active/non-active: 468/63.
  • 处理方法 可优先通过如下方法进行应急处理: 临时将所有non-active的连接释放掉。 1 SELECT PG_TERMINATE_BACKEND(pid) from pg_stat_activity WHERE state='idle'; 在GaussDB(DWS) 控制台设置会话闲置超时时长session_timeout,在闲置会话超过所设定的时间后服务端将主动关闭连接。 session_timeout默认值为600秒,设置为0表示关闭超时限制,一般不建议设置为0。 session_timeout设置方法如下: 登录GaussDB(DWS) 管理控制台。 在左侧导航栏中,单击“集群管理”。 在集群列表中找到所需要的集群,单击集群名称,进入集群“基本信息”页面。 单击“参数修改”页签,修改参数“session_timeout”,然后单击“保存”。 在“修改预览”窗口,确认修改无误后,单击“保存”。 如果上述方式未能满足业务需求,可继续参考以下方式进行处理: 当前数据库连接已经超过了最大连接数场景处理方式: 查看CN上的连接来自哪里,总数量以及是否超过当前max_connections(默认值CN节点为800,DN节点为5000)。 1 SELECT coorname, client_addr, count(1) FROM pgxc_stat_activity group by coorname, client_addr order by coorname; 判断是否可以调大max_connections。调整策略如下: 调大CN的max_connections会造成并发连接到DN的查询变多,所以需要同步调大DN的max_connections和comm_max_stream。 CN/DN的max_connections一般按照原来的2倍调大,原值比较小的集群可以调节到4倍。 为避免在准备步骤失败,max_prepared_transactions的值不能小于max_connections,建议至少将其设置为等于max_connections,这样每个会话都可以有一个等待中的预备事务。 若上一步中判断可以调整max_connections,则可通过管理控制台调整最大连接数max_connections。 在管理控制台上,集群“基本信息”页面,单击“参数修改”页签,修改参数“max_connections”为合适的值,然后单击“保存”。 针对设置了用户最大连接数的场景处理方式: 在创建用户时由CREATE ROLE命令的CONNECTION LIMIT connlimit子句直接设定,也可以在设定以后用ALTER ROLE的CONNECTION LIMIT connlimit子句修改。 使用PG_ROLES视图查看指定用户的最大连接数。 1 2 3 4 5 SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='role1'; rolname | rolconnlimit ---------+-------------- role1 | 10 (1 row) 修改用户的最大连接数。 1 ALTER ROLE role1 connection limit 20;
  • GaussDB(DWS)是否支持第三方客户端以及JDBC和ODBC驱动程序? 推荐使用GaussDB(DWS)客户端和驱动程序。与开源的PostgreSQL客户端和驱动程序相比,有两个主要的优点: 安全强化:PostgreSQL驱动程序只支持MD5认证,但GaussDB(DWS)驱动程序支持SHA256和MD5。 数据类型增强:GaussDB(DWS)驱动程序支持新的数据类型smalldatetime和tinyint。 GaussDB(DWS)支持开源PostgreSQL客户端和JDBC和ODBC驱动程序。 兼容的客户端和驱动程序版本如下: PostgreSQL的psql 9.2.4或更高版本 PostgreSQL JDBC驱动程序9.3-1103或更高版本 PSQL ODBC 09.01.0200或更高版本 使用JDBC/ODBC连接GaussDB(DWS),可参见开发指南的教程:使用JDBC或ODBC开发。 父主题: 数据库连接
  • 补充解释 PQbackendPID函数返回值在GaussDB中表示后台线程的槽位ID (SlotID),而并非后台线程的BackendPid。由于存在上述差异,不建议按照PostgreSQL同名函数的语义执行。若希望获取该连接的后台PID,可以通过执行系统函数pg_backend_pid获取。同时,依赖libpq的其他驱动程序的同名接口(如Python连接驱动psycopg2的get_backend_pid函数)也遵循上述规则。
  • 返回值 ConnStatusType:连接状态的枚举,包括: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CONNECTION_STARTED 等待进行连接。 CONNECTION_MADE 连接成功;等待发送。 CONNECTION_AWAITING_RESPONSE 等待来自服务器的响应。 CONNECTION_AUTH_OK 已收到认证;等待后端启动结束。 CONNECTION_SSL_STARTUP 协商SSL加密。 CONNECTION_SETENV 协商环境驱动的参数设置。 CONNECTION_OK 连接正常。 CONNECTION_BAD 连接故障。
  • 注意事项 状态可以是多个值之一。但是,在异步连接过程之外只能看到其中两个:CONNECTION_OK和CONNECTION_BAD。与数据库的良好连接状态为CONNECTION_OK,与数据库连接失败状态为CONNECTION_BAD。通常,“正常”状态将一直保持到PQfinish,但通信失败可能会导致状态CONNECTION_BAD过早变为。在这种情况下,应用程序可以尝试通过调用进行恢复PQreset。
  • 参数 表1 PQsetdbLogin参数 关键字 参数说明 pghost 要连接的主机名,详见连接参数描述的host字段。 pgport 主机服务器的端口号,详见连接参数描述的port字段。 pgoptions 添加命令行选项以在运行时发送到服务器,详见连接参数描述的options字段。 pgtty 忽略(以前该选项声明服务器日志的输出方向)。 dbName 要连接的数据库名,详见连接参数描述的dbname字段。 login 要连接的用户名,详见连接参数描述的user字段。 pwd 如果服务器要求口令认证,所用的口令,详见连接参数描述的password字段。
  • 参数 表1 PQsetdbLogin参数 关键字 参数说明 pghost 要连接的主机名,详见连接参数描述的host字段。 pgport 主机服务器的端口号,详见连接参数描述的port字段。 pgoptions 添加命令行选项以在运行时发送到服务器,详见连接参数描述的options字段。 pgtty 忽略(以前该选项声明服务器日志的输出方向) dbName 要连接的数据库名,详见连接参数描述的dbname字段。 login 要连接的用户名,详见连接参数描述的user字段。 pwd 如果服务器要求口令认证,所用的口令,详见连接参数描述的password字段。
  • 注意事项 状态可以是多个值之一。但是,在异步连接过程之外只能看到其中两个:CONNECTION_OK和CONNECTION_BAD。与数据库的良好连接状态为CONNECTION_OK,与数据库连接失败状态为CONNECTION_BAD。通常,“正常”状态将一直保持到PQfinish,但通信失败可能会导致状态CONNECTION_BAD过早变为。在这种情况下,应用程序可以尝试通过调用进行恢复PQreset。
  • 返回值 ConnStatusType:连接状态的枚举,包括: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CONNECTION_STARTED 等待进行连接。 CONNECTION_MADE 连接成功;等待发送。 CONNECTION_AWAITING_RESPONSE 等待来自服务器的响应。 CONNECTION_AUTH_OK 已收到认证;等待后端启动结束。 CONNECTION_SSL_STARTUP 协商SSL加密。 CONNECTION_SETENV 协商环境驱动的参数设置。 CONNECTION_OK 连接正常。 CONNECTION_BAD 连接故障。
  • Oracle为源 以具有创建数据库权限的用户登录 GaussDB数据库 。 执行以下命令,创建兼容Oracle模式GaussDB数据库。 主备版: create database databasename dbcompatibility = 'A'; 分布式: create database databasename dbcompatibility = 'ORA'; 执行以下命令,查看是否创建成功。 select * from pg_database where datname = 'databasename'; 主备版:若datcompatibility兼容性一列为A,则Oracle兼容数据库创建成功。 分布式:若datcompatibility兼容性一列为ORA,则Oracle兼容数据库创建成功。
  • MySQL为源 以具有创建数据库权限的用户登录GaussDB数据库。 执行以下命令,创建兼容MySQL模式GaussDB数据库。 主备版: create database databasename dbcompatibility = 'B'; 分布式: create database databasename dbcompatibility = 'MySQL'; 执行以下命令,查看是否创建成功。 select * from pg_database where datname = 'databasename'; 主备版:若datcompatibility兼容性一列为B,则MySQL兼容数据库创建成功。 分布式:若datcompatibility兼容性一列为MySQL,则MySQL兼容数据库创建成功。