华为云用户手册

  • 删除账号 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的开启了安全认证的ServiceComb引擎。 单击“系统管理”。 在弹出的“安全认证”对话框输入该ServiceComb引擎下关联了admin角色权限的账号名及其密码,单击“确定”。 首次连接ServiceComb引擎,请输入root账号名及创建ServiceComb引擎时输入的密码。 创建账号请参考新增账号。 在“账号管理”页签,单击待删除账号“操作”列的“删除”。 在弹出的对话框中输入“DELETE”,单击“确定”。
  • 修改密码 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的开启了安全认证的ServiceComb引擎。 单击“系统管理”。 在弹出的“安全认证”对话框输入账号名及其密码,单击“确定”。 首次连接ServiceComb引擎,请输入root账号名及创建ServiceComb引擎时输入的密码。 连接ServiceComb引擎的账号未关联admin角色权限,仅可修改当前登录账号的密码。 连接ServiceComb引擎的账号关联了admin角色权限,可修改该ServiceComb引擎下所有账号的密码。 创建账号请参考新增账号。 在“账号管理”页签,选择登录该ServiceComb引擎的账号名,单击“操作”列的“修改密码”。 输入“原密码”、“新密码”和“确认密码”。 查看提示信息确认需要修改密码后,勾选“我已确认知晓”。 也可单击“系统管理”页面右上角的“修改密码”,修改当前登录账号的密码。 单击“保存”,完成密码修改。
  • 新增账号 创建新账号前,可先根据实际业务需要创建角色。 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的开启了安全认证的ServiceComb引擎。 单击“系统管理”。 在弹出的“安全认证”对话框输入该ServiceComb引擎下关联了admin角色权限的账号名及其密码,单击“确定”。 首次连接ServiceComb引擎,请输入root账号名及创建ServiceComb引擎时输入的密码。 在“账号管理”页签,单击“新增账号”,参考下表设置账号参数。 参数名称 参数说明 账号名称 输入新账号名称。 说明: 账号创建后,账号名称不可修改。 账号角色 根据实际业务需求,选择账号角色。 说明: 一个账号下最多可关联5个角色。 密码 输入账号密码。 确认密码 再次输入账号密码。 单击“确定”,完成新账号创建。
  • 查看账号角色权限 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的开启了安全认证的ServiceComb引擎。 单击“系统管理”。 在弹出的“安全认证”对话框输入该ServiceComb引擎下关联了admin角色权限的账号名及其密码,单击“确定”。 首次连接ServiceComb引擎,请输入root账号名及创建ServiceComb引擎时输入的密码。 创建账号请参考新增账号。 单击账号列表中待查看账号“角色”列的角色名称,在弹出页面可以查看账号关联的角色名称及权限配置情况。
  • 编辑账号 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的开启了安全认证的ServiceComb引擎。 单击“系统管理”。 在弹出的“安全认证”对话框输入该ServiceComb引擎下关联了admin角色权限的账号名及其密码,单击“确定”。 首次连接ServiceComb引擎,请输入root账号名及创建ServiceComb引擎时输入的密码。 创建账号请参考新增账号。 在“账号管理”页签,单击待编辑账号“操作”列的“编辑账号”。 根据实际业务需求,选择“账号角色”。 一个账号下最多可关联5个角色。 单击“保存”,完成账号编辑。
  • 操作步骤 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版 ”。 单击待操作的实例的名称,进入该实例的基本信息页面。 在“基础信息”区域的“标签”参数处,您可以根据实际需要,执行以下操作: 新增标签 新增标签会影响网关业务十秒左右,请在业务低峰期时增加。 单击“标签管理”,弹出“编辑标签”窗口。 单击“ 新增标签”,您可在“标签键”和“标签值”中输入标签信息。 单击“确定”,为实例添加标签成功。 修改标签 修改标签会影响网关业务十秒左右,请在业务低峰期时修改。 单击“标签管理”,弹出“编辑标签”窗口。 您可在原有的“标签键”和“标签值”输入框中修改标签键与标签值信息。 单击“确定”,标签修改成功。 删除标签 单击标签所在行的,删除该标签。
  • 开启安全认证 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的引擎。 在“网络配置 & 安全”区域,单击“开启安全认证”。 如果引擎版本低于1.2.0,执行5。 如果引擎版本为1.2.0及以上版本,执行6。 升级引擎至1.2.0或以上版本。 单击“升级”。 选择“升级后版本”,查看版本说明,根据需要决定是否升级到该版本后,单击“确定”。 在刚升级成功的ServiceComb引擎的“网络配置 & 安全”区域,单击“开启安全认证”。 在“系统管理”页面开启安全认证。 首次开启安全认证,单击“去开启安全认证”。 需先创建root账号。输入root账号的“密码”和“确认密码”,单击“立即创建”。 再次开启安全认证,输入引擎中已关联了admin角色的账号名称及其密码。 (可选)参考角色管理,根据业务需要,创建角色。 (可选)参考账号管理,根据业务需要,创建账号。 在“系统管理”页面单击“设置安全认证”,根据实际业务需要设置安全配置。 选择开启“控制台安全认证”,请执行11。 开启控制台安全认证后,进入微服务引擎控制台界面,需要使用账号、密码登录。登录账号用户只能查看、配置有权限的服务。 选择开启“编程接口安全认证”,请执行10。 开启编程接口安全认证,会自动同步开启“控制台安全认证”。 开启编程接口安全认证后,需要在微服务的配置文件中添加对应用户的账号密码,否则服务无法注册到引擎。 关闭编程接口安全认证,微服务的配置文件中无需配置账号密码即可将服务注册到引擎,效率性能更高,建议用于VPC内访问时使用。 配置SDK,对于已部署但未配置安全认证参数的微服务组件,请参考配置微服务安全认证的账号名和密码 先为组件配置微服务安全认证的账号名和密码,再升级组件。 单击“确定”。 等待ServiceComb引擎更新完成,引擎状态由“配置中”变为“可用”,开启安全认证成功。
  • 操作步骤 登录微服务引擎控制台。 在左侧导航栏选择“应用网关 ”。 单击待查看的实例的名称,进入该实例的基本信息页面。 在“基础信息”区域的“标签”参数处,您可以根据实际需要,执行以下操作: 新增标签 新增标签会影响网关业务十秒左右,请在业务低峰期时增加。 单击“标签管理”,弹出“编辑标签”窗口。 单击“ 新增标签”,您可在输入框中分别输入标签键和标签值。 单击“确定”,为实例添加标签成功。 修改标签 修改标签会影响网关业务十秒左右,请在业务低峰期时修改。 单击“标签管理”,弹出“编辑标签”窗口。 您可在原有的标签键和标签值输入框中修改标签键与标签值信息。 单击“确定”,标签修改成功。 删除标签 单击标签所在行的,删除该标签。
  • 环境要求 Web SDK运行环境要求,如表1所示。 表1 环境要求 环境项 使用限制 开发工具 Microsoft Visual Studio Code、WebStorm或其他Web IDE开发工具。 语言 Javascript或Typescript。 编译环境 建议Node 17+。 浏览器 浏览器使用限制,请参见表2。 由于浏览器的安全策略限制,仅支持通过“https://域名”方式访问,否则无法获取麦克风权限。 表2 浏览器适配详情 操作系统类型 浏览器类型 浏览器版本 Windows Chrome浏览器 91+ Edge浏览器 80+ Android 微信内嵌浏览器(TBS内核) - 微信内嵌浏览器(XWEB内核) - 企业微信内嵌浏览器 - 移动版Chrome浏览器 91+ iOS 微信内嵌浏览器 iOS 14.3+ 微信6.5+版本 移动版Safari浏览器 -
  • 删除Pod 删除pod时,Kubernetes终止Pod中所有容器。 Kubernetes向进程发送SIGTERM信号并等待一定的秒数(默认为30)让容器正常关闭。 如果它没有在这个时间内关闭,Kubernetes会发送一个SIGKILL信号杀死该进程。 Pod的停止与删除有多种方法,比如按名称删除,如下所示。 $ kubectl delete po nginx -n $namespace_name pod "nginx" deleted 同时删除多个Pod。 $ kubectl delete po pod1 pod2 -n $namespace_name 删除所有Pod。 $ kubectl delete po --all -n $namespace_name pod "nginx" deleted 根据Label删除Pod,Label详细内容将会在下一个章节介绍。 $ kubectl delete po -l app=nginx -n $namespace_name pod "nginx" deleted
  • 创建Pod kubernetes资源可以使用YAML描述(如果您对YAML格式不了解,可以参考YAML语法),也可以使用JSON,如下示例描述了一个名为nginx的Pod,这个Pod中包含一个名为container-0的容器,使用nginx:alpine镜像,使用的资源为0.5核CPU、1024M内存。 apiVersion: v1 # Kubernetes的API Version kind: Pod # Kubernetes的资源类型 metadata: name: nginx # Pod的名称 spec: # Pod的具体规格(specification) containers: - image: nginx:alpine # 使用的镜像为 nginx:alpine name: container-0 # 容器的名称 resources: # 申请容器所需的资源,云容器实例中limits与requests的值必须相同 limits: cpu: 500m # 0.5核 memory: 1024Mi requests: cpu: 500m # 0.5核 memory: 1024Mi imagePullSecrets: # 拉取镜像使用的证书,必须为imagepull-secret - name: imagepull-secret 如上面YAML的注释,YAML描述文件主要为如下部分: metadata:一些名称/标签/namespace等信息 spec:Pod实际的配置信息,包括使用什么镜像,volume等 如果去查询Kubernetes的资源,您会看到还有一个status字段,status描述kubernetes资源的实际状态,创建时不需要配置。这个示例是一个最小集,其他参数定义后面会逐步介绍。 kubernetes资源的参数定义的解释,您可以通过具体资源的API参考查询对应的解释。 Pod定义好后就可以使用kubectl创建,如果上面YAML文件名称为nginx.yaml,则创建命令如下所示,-f 表示使用文件方式创建。 $ kubectl create -f nginx.yaml -n $namespace_name pod/nginx created
  • 什么是Pod Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项。 Pod使用主要分为两种方式: Pod中运行一个容器。这是Kubernetes最常见的用法,您可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。 Pod中运行多个需要耦合在一起工作、需要共享资源的容器。通常这种场景下是应用包含一个主容器和几个辅助容器(SideCar Container),如图1所示,例如主容器为一个web服务器,从一个固定目录下对外提供文件服务,而辅助的容器周期性的从外部下载文件存到这个固定目录下。 图1 Pod 实际使用中很少直接创建Pod,而是使用Kubernetes中称为Controller的抽象层来管理Pod实例,例如Deployment和Job。Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力。通常,Controller会使用Pod Template来创建相应的Pod。
  • 使用GPU 云容器实例支持使用GPU(必须在GPU类型命名空间下),申请GPU资源的方法非常简单,只需要在容器定制中申请GPU字段即可。 具体的规格信息请参考约束与限制中的“Pod规格”。 您需要设置Pod的metadata.annotations中添加cri.cci.io/gpu-driver字段,指定使用哪个版本显卡驱动,取值如下: gpu-460.106 gpu-418.126 如下示例创建一个容器规格为NVIDIA V100 16G x 1,CPU 4核,内存32GiB的Pod。 apiVersion: v1 kind: Pod metadata: name: gpu-test annotations: cri.cci.io/gpu-driver: gpu-418.126 # 指定GPU显卡的驱动版本 spec: containers: - image: tensorflow:latest name: container-0 resources: limits: cpu: 4000m # 4核 memory: 32Gi nvidia.com/gpu-tesla-v100-16GB: 1 # 申请GPU资源,支持 1、2、4、8,代表几块显卡 requests: cpu: 4000m # 4核 memory: 32Gi nvidia.com/gpu-tesla-v100-16GB: 1 imagePullSecrets: - name: imagepull-secret
  • 查询Pod详情 Pod创建完成后,可以使用kubectl get pods命令查询Pod的状态,如下所示。 $ kubectl get pods -n $namespace_name NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 40s 可以看到此处nginx这个Pod的状态为Running,表示正在运行;READY为1/1,表示这个Pod中有1个容器,其中1个容器的状态为Ready。 可以使用kubectl get命令查询具体Pod的配置信息,如下所示,-o yaml表示以YAML格式返回,还可以使用 -o json,以JSON格式返回。 $ kubectl get pod nginx -o yaml -n $namespace_name 您还可以使用kubectl describe命令查看Pod的详情。 $ kubectl describe pod nginx -n $namespace_name
  • 处理方法 方法一 该处理方法仅8.1.3及以上集群版本支持。 登录GaussDB(DWS) 管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,切换至“智能运维”页签。 在运维详情部分切换至运维计划模块。单击“添加运维任务”按钮。 弹出添加运维任务边栏。 运维任务选择“Vacuum”。 调度模式选择“指定目标”,智能运维将在指定时间窗内,自动下发表级Vacuum任务。 用户可配置需要Vacuum的列存表,其中一行对应一张表,每张表以数据库名、模式名、表名表示,以空格进行分割。 单击“下一步:定时配置”,配置Vacuum类型,推荐选择“周期型任务”,GaussDB(DWS)将自动在自定义时间窗内执行Vacuum。 确认无误后,单击“下一步:配置确认”,完成配置。 方法二 对列存表更新操作后,需要进行VACUUM FULL清理,更多用法请参见VACUUM的“VACUUM”章节的“VACUUM”章节。 1 VACUUM FULL table_name;
  • 原因分析 SQL运行慢可从以下几方面进行分析: 使用EXPLAIN命令查看SQL执行计划,根据执行计划判断是否需要进行SQL调优。 分析查询是否被阻塞,导致语句运行时间过长,可以强制结束有问题的会话。 审视和修改表定义。选择合适的分布列,避免数据倾斜。 分析SQL语句是否使用了不下推的函数,建议更换为支持下推的语法或函数。 对表定期执行vacuum full和analyze操作,可回收已更新或已删除的数据所占据的磁盘空间。 检查表有无索引支撑,建议例行重建索引。 数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。 对业务进行优化,分析能否将大表进行分表设计。
  • 排查方法 查看相关表CU中数据分布情况,以下操作在DN执行 查看列存表对应的cudesc表 针对非分区表: 1 SELECT 'cstore.'||relname FROM pg_class where oid = (SELECT relcudescrelid FROM pg_class c inner join pg_namespace n on c.relnamespace = n.oid where relname = 'table name' and nspname = 'schema name'); 针对分区表: 1 SELECT 'cstore.'||relname FROM pg_class where oid in (SELECT p.relcudescrelid FROM pg_partition p,pg_class c,pg_namespace n where c.relnamespace = n.oid and p.parentid = c.oid and c.relname = 'table name' and n.nspname = 'schema name' and p.relcudescrelid != 0); 查看cudesc中各CU的rowcount情况 查询步骤一返回的cudesc表信息,查询结果类似如下,主要关注row_count过小(远小于6w)的CU数量,如果此数量较大,说明当前小CU多,CU膨胀问题严重,影响存储效率和查询访问效率。
  • 原因分析 两个不同的事务对同一个表中的同一行数据进行并发更新/操作,导致后操作的事务发生了回滚。 举例说明: 打开一个连接Session A,使用普通用户u1连接GaussDB(DWS)数据库,在u1的同名SCHEMA u1下创建测试表u1.test,并插入数据。 1 2 CREATE TABLE test (id int, name varchar(50)); INSERT INTO test VALUES (1, 'lily'); 打开一个新的连接会话Session B,使用系统管理员dbadmin连接GaussDB(DWS)数据库,开启事物1,执行UPDATE操作,UPDATE语句执行成功。 1 2 3 4 START TRANSACTION; UPDATE u1.test SET id = 3 WHERE name = 'lily'; UPDATE 1 在会话Session A中开启事务2,执行相同的UPDATE语句,执行报错。 1 2 3 4 START TRANSACTION; UPDATE test SET id = 3 WHERE name = 'lily'; ERROR: dn_6003_6004: abort transaction due to concurrent update test 289502. 针对上述案例,两个不同的事务并发更新了同一条记录,而并发更新同一条记录发生冲突不会等待锁,直接报错:abort transaction due to concurrent update。 在实际业务中,并不是只有并发UPDATE同一条记录会报错,select、delete等其他SQL并发操作,也有可能报错:abort transaction due to concurrent update。
  • 原因分析 上述问题中撤销user3对表t1的访问权限未生效是因为:之前执行过GRANT SELECT ON table t1 TO public;这条SQL语句,该语句中关键字public表示该权限要赋予给所有角色,包括之后新创建的角色,所以新用户user3对该表也有访问权限。public可以看做是一个隐含定义好的组,它包含所有角色。 因此,执行完REVOKE SELECT ON table t1 FROM user3;之后,虽然user3用户没有了表t1的访问权限(通过系统表pg_class的relacl字段可查看t1表的权限),但是他仍然有public的权限,所以仍能访问该表。
  • 调用存储过程报错 ERROR: cached plan must not change result type 问题分析:由于JDBC中使用了PreparedStatement,默认重复执行5次就会缓存plan,在此之后有如果重建表操作(例如修改表定义),再次执行就会报错ERROR: cached plan must not change result type。 处理方法:在JDBC连接字串中指定prepareThreshold=0,不再cache plan。例如: 1 String url = "jdbc:postgresql:// 192.168.0.10:2000/postgres?prepareThreshold=0";
  • Broken pipe, connection reset by peer 问题分析:网络故障,数据库连接超时。 处理方法:检查网络状态,修复网络故障,影响数据库连接超时的因素,例如数据库参数session_timeout。 登录控制台单击指定集群名称。 在左侧导航栏选择“参数修改”,搜索参数“session_timeout”查看超时时间参数。 将session_timeout的CN、DN参数值设置为0,详情可参见修改数据库参数。
  • 使用JDBC执行create table as 语句报错 ERROR: relation "xx" already exists 问题分析:JDBC调用preparedStatement.getParameterMetaData()时会发送P报文,该报文会在数据库中创建表,导致execute执行时报表已存在。 处理方法:使用preparedStatement时,建议将CREATE TABLE AS拆开执行或者使用resultSet.getMetaData()。
  • 处理方法 方式一:通过控制台修改statement_timeout参数。 登录GaussDB(DWS) 管理控制台。 在左侧导航栏中,单击“集群管理”。 在集群列表中找到所需要的集群,单击集群名称,进入集群“基本信息”页面。 单击“参数修改”页签,根据需要修改参数“statement_timeout”默认值,然后单击“保存”。 GaussDB(DWS)默认不限制SQL超时,即statement_timeout默认值为0。如用户手动修改过该参数,建议恢复原默认值0,或者根据需要调整SQL超时时间,避免设置的SQL超时时间对其它任务产生影响。 在“修改预览”窗口,确认修改无误后,单击“保存”。 参数“statement_timeout”所在行“是否重启”列显示为“否”,表示该参数修改后无需进行重启操作,即修改后立即生效。 图1 修改参数statement_timeout 方式二:成功连接集群后,通过SQL命令修改statement_timeout参数。 使用SET语句修改(会话级别): 1 SET statement_timeout TO 0; 使用ALTER ROLE语句修改(用户级别): 1 ALTER USER username SET statement_timeout TO 600000; 其中,username为要设置SQL语句超时时间的数据库用户名。
  • 操作步骤 构造锁等待场景: 打开一个新的连接会话,使用普通用户u1连接GaussDB(DWS)数据库,在自己的同名SCHEMA u1下创建测试表u1.test。 1 CREATE TABLE test (id int, name varchar(50)); 开启事务1,进行INSERT操作。 1 2 START TRANSACTION; INSERT INTO test VALUES (1, 'lily'); 打开一个新的连接会话,使用系统管理员dbadmin连接GaussDB(DWS)数据库,执行VACUUM FULL操作,发现语句阻塞。 1 VACUUM FULL u1.test; 锁等待检测(8.1.x及以上版本) 打开一个新的连接会话,使用系统管理员dbadmin连接GaussDB(DWS)数据库,通过pgxc_lock_conflicts视图查看锁冲突情况。 如下图,回显中查看granted字段为“f”,表示VACUUM FULL语句正在等待其他锁。granted字段为“t”,表示INSERT语句是持有锁。nodename,表示锁产生在的位置,即CN或DN位置,例如cn_5001。 1 SELECT * FROM pgxc_lock_conflicts; 据语句内容确认是否中止持锁语句。如果终止,则执行以下语句。pid从1获取,cn_5001为上面查询到的nodename。 1 execute direct on (cn_5001) 'SELECT PG_TERMINATE_BACKEND(pid)'; 锁等待检测(8.0.x及以前版本) 在数据库中执行以下语句,获取VACUUM FULL操作对应的query_id。 1 SELECT * FROM pgxc_stat_activity WHERE query LIKE '%vacuum%'AND waiting = 't'; 根据获取的query_id,执行以下语句查看是否存在锁等待,并获取对应的tid。其中,{query_id}从1获取。 1 SELECT * FROM pgxc_thread_wait_status WHERE query_id = {query_id}; 回显中“wait_status”存在“acquire lock”表示存在锁等待。同时查看“node_name”显示在对应的CN或DN上存在锁等待,记录相应的CN或DN名称,例如cn_5001或dn_600x_600y。 执行以下语句,到等锁的对应CN或DN上通过查询pg_locks系统表查看VACUUM FULL操作在等待哪个锁。以下以cn_5001为例,如果在DN上等锁,则改为相应的DN名称。pid为2获取的tid。 回显中记录relation的值。 1 execute direct on (cn_5001) 'SELECT * FROM pg_locks WHERE pid = {tid} AND granted = ''f'''; 根据获取的relation,通过查询pg_locks系统表查看当前持有锁的pid。{relation}从3获取。 1 execute direct on (cn_5001) 'SELECT * FROM pg_locks WHERE relation = {relation} AND granted = ''t'''; 根据pid,执行以下语句,查到对应的SQL语句。{pid}从4获取。 1 execute direct on (cn_5001) 'SELECT query FROM pg_stat_activity WHERE pid={pid}'; 根据语句内容确认是中止持锁语句还是待持锁语句结束再重新执行VACUUM FULL。如果终止,则执行以下语句。pid从4获取。 中止结束后,再尝试重新执行VACUUM FULL。 1 execute direct on (cn_5001) 'SELECT PG_TERMINATE_BACKEND(pid)';
  • 操作场景 在日常作业开发中,数据库事务管理中的锁一般指的是表级锁,GaussDB(DWS)中支持的锁模式有8种,按排他级别分别为1~8。每种锁模式都有与之相冲突的锁模式,由锁冲突表定义相关的信息,锁冲突表如表1所示。 举例:用户u1对某张表test执行INSERT事务时,此时持有RowExclusiveLock锁;此时用户u2也对test表进行VACUUM FULL事务,则该事务与INSERT事务产生锁冲突,处于锁等待状态。 常用的锁等待检测主要通过查询视图pgxc_lock_conflicts、pgxc_stat_activity、pgxc_thread_wait_status、pg_locks进行。其中pgxc_lock_conflicts视图在8.1.x版本后支持,根据集群版本号不同,检测方式不同。
  • 在modifyJdbcCall和createParameterizedQuery阶段耗时 问题分析:如果主要耗时在modifyJdbcCall阶段(校验传入的SQL是否符合规范)和createParameterizedQuery阶段(将传入的SQL解析为preparedQuery,以获取由simplequery组成的subqueries),则需要确认是否传入的SQL过长导致。 处理方法:JDBC本身没办法优化这部分耗时,可在应用端查看是否可优化传入的SQL语句,详情可参见SQL语句改写规则。
  • 处理方法 使用SQL客户端工具连接数据库。 执行如下命令查看当前会话。 1 SELECT * FROM pg_stat_activity; 查询结果中的关键字段,说明如下: datname:用户会话所连接的数据库名称。 usename:连接数据库的用户名。 client_addr:连接数据库的客户端主机的IP地址。 在查询结果中,找出待删除的数据库名称及对应的客户端主机IP地址。 请根据客户端主机的IP地址排查连接数据库的机器及应用,并停止相关的连接。 1 CLEAN CONNECTION TO ALL FOR DATABASE xxx; 重新执行删除数据库的命令。 1 DROP DATABASE [ IF EXISTS ] database_name;
  • 处理方法 使用系统管理员dbadmin用户连接数据库,执行以下SQL语句查看系统时间。 1 SELECT now(); 查询结果显示当前DWS默认显示的系统时间是UTC时间,即北京时间-8H。 执行以下SQL语句查询客户端连接情况。其中, username请替换为实际被锁的用户名。 时间段,请根据实际时间修改。例如要查北京时间当天上午9点到10点这个时间段的连接情况,需由北京时间转为UTC时间,即-8H,则UTC时间为当天上午1点到2点的时间段。 1 SELECT * FROM pgxc_query_audit('2022-10-27 01:00:00','2022-10-27 02:00:00') where username='username'; 查询结果显示:IP地址为x.x.x.x的客户端一直使用错误的密码进行连接。 根据实际业务情况选择以下对应的处理办法: 如果确认步骤2查询到的IP地址是某个作业,可以先停止该作业连接,再通过系统管理员dbadmin连接数据库后,使用以下SQL语句解锁该用户,再调整该作业设置,使用正确的密码进行连接。 1 ALTER USER username ACCOUNT UNLOCK; 如果不确认该IP地址是哪个作业,可以先参见设置尝试登录失败次数将参数failed_login_attempts修改为0,然后使用以下SQL语句重置一个新密码,此时正在连接的其他作业即使再次输错10次密码也不会被锁定。 ALTER USER username IDENTIFIED BY '{Password}'; failed_login_attempts修改为0的方式仅为临时解决方案,为保证数据库安全,不建议failed_login_attempts设置为0。建议后续定位到对应作业后,尽快将作业的连接设置调整为正确密码,然后将failed_login_attempts设置为10。
  • 原因分析 DWS数据库默认情况下,在连续输入错误密码10次后会锁定该用户(允许输入的错误次数由GUC参数failed_login_attempts(默认值为为10)控制,可以参见设置尝试登录失败次数登录DWS管理控制台进行修改)。 当用户重置密码后,重试还是被锁,说明在重置后,有其用户或者应用又用错误的密码再次尝试连接了10次或failed_login_attempts的设置值,再次导致了用户被锁。
  • 设置尝试登录失败次数 输错密码的次数上限可以在集群的“参数修改”页面通过参数failed_login_attempts进行设置,当failed_login_attempts配置为0时表示不限制密码输入错误的次数,为保证数据库安全,不推荐设置为0。 您可以通过如下步骤修改参数: 登录GaussDB(DWS) 管理控制台。 在左侧导航树,单击“集群管理”。 在集群列表中找到所需要的集群,然后单击集群名称。 进入集群的“参数修改”页面,找到“failed_login_attempts”参数,修改其参数值,然后单击“保存”,确认无误后再单击“保存”。
共100000条