注册
启云数据库常见问题处理方法
培训园地/ 文章详情 /

启云数据库常见问题处理方法

江雪梅林 2025/08/04 237 2 0

本文是对启云数据库运维常见问题处理方法进行说明,主要包括启云数据库主备切换后应用连不上库处理方法、关键字导致备份失败处理方法、启云及达梦license到期更新步骤。

一、主备切换后应用连不上库处理方法

​ 通过移动云订购达梦启云库后,应用使用达梦主备集群主的ip和端口建立JDBC连接,当网络发生抖动或者主节点有异常触发主备切换时,应用就连不上数据库。
原因分析:
通过ip连接方式,只连接了主库ip及端口,当发生主备切换时,原备库切换为主库,所以连接不上。
处理方式:
(1)主库能正常提供服务,则手动恢复主库服务,然后进行主备切换,恢复到原主库的服务,使应用可以正常使用,详细步骤如下文(一) 段所示。
(2)若主库崩溃,不能正常启动,则手动进行备库接管主库,并将故障主库重建,还原故障主库,重置故障主库为备库,详细步骤如下文(二)段所示。应用需要修改连接方式,如果待主库重建、恢复后,检查数据一致后,再进行手动主备切换,详细步骤如上段所述。
(3)尽快改造应用程序使用服务方式进行数据库连接,详细部署如下文(三)段所示。

(一)、云数据库进行手动主备切换步骤
1.查看数据库实例

### 查看达梦实例 dm82701868265493
sudo kubectl get pod -n dmcp-instance -o wide|grep dm82701868265493

image.png
2.进入monitor实例

### 进入监视器pod
sudo kubectl -n dmcp-instance exec -it dm82701868265493-66554d7bd5-lns2l bash

image.png

### 到数据库安装目录
 cd /opt/dmdbms/

查看目录下文件,并查看dmmonitor.ini,检查是否存在MONDWCONFIRM=0配置。
image.png
3. 启动monitor

./dmmonitor /opt/dmdbms/dmmonitor.ini

image.png

4.登录监视器并检查状态

###窗口输入login回车
login
###输入数据库用户名SYSDBA

###输入数据库SYSDBA密码

image.png
5.查看集群

###查看集群,确认主备实例名
show

image.png

### tip 确认主备库LSN值一致
tip 

6.验证备库可切换性

choose swithcover GRP1
### 输出示例  XXXX can be switched to PRIMARY

image.png
7.执行主备切换

switchover GRP1_RT_1

image.png
image.png

### 查看集群状态,确认新主库状态为PRIMARY,原主库为STANDY
show
### tip 检查个节点状态是否正常 
tip
### 退出监视器
exit

(二)、主库崩溃, 备库接管主库, 故障主库重建、还原步骤(本节引用达梦知识库)

  1. 新主库生成备份集
###在新主库执行联机备份(避免停业务)
BACKUP DATABASE FULL BACKUPSET '/bak/newprimarybak' WITHOUT LOG;
  1. 还原故障主库
###将备份集拷贝至原主库服务器,原主库执行脱机还原
/dmrman CTLSTMT="RESTORE DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/bak/newprimarybak'"
### 更新magic  # 关键步骤
./dmrman CTLSTMT="RECOVER DATABASE '/data/DAMENG/dm.ini' UPDATE DB_MAGIC"  

3.重置故障主库为备库

###MOUNT模式启动
./dmserver /data/DAMENG/dm.ini mount  
###登录Disql执行
###开启配置修改模式
SP_SET_PARA_VALUE(1, 'ALTERMODE_STATUS', 1); 
###切换为备库模式
ALTER DATABASE STANDBY; 
###关闭配置修改模式
SP_SET_PARA_VALUE(1, 'ALTERMODE_STATUS', 0); 

4.数据一致性验证

###核心业务表;  -- 表数据校验
CHECK TABLE SYSDBA;
###系统表空间校验
SELECT COUNT(*) FROM V$TABLESPACE;  

(三) 、应用程序通过服务连接达梦主备集群,服务连接几种方式:

  1. 通过dm_svc.conf 配置的服务连接方式
配置步骤
 (1)文件位置(需部署在应用服务器上):
   Linux:`/etc/dm_svc.conf`
   Windows:`C:\Windows\system32\dm_svc.conf` 或达梦安装目录的 `bin` 文件夹下
 (2)配置示例:
   ```ini
   TIME_ZONE=(480)
   LANGUAGE=(cn)
   DM=(192.168.1.101:5236,192.168.1.102:5236)  # 主备集群所有节点IP和端口
   LOGIN_MODE=(1)      # 只连接主库
   SWITCH_TIME=(3)      # 连接超时切换时间(秒)
   SWITCH_INTERVAL=(1000) # 重试间隔(毫秒)
 (3)关键参数说明:
`LOGIN_MODE=1`:强制应用只连接主库节点。
   `DM`:列出集群所有节点IP,驱动自动识别主库。
   `SWITCH_TIME`:超时后自动尝试下一个节点(建议3-5秒)。
 (4)应用连接串调整
Java (JDBC):
String url = "jdbc:dm://DM?schema=SYSDBA"; // 使用服务名"DM"
Python (pydm):
conn = pydm.connect(host="DM", user="SYSDBA", password="SYSDBA")

其他语言:连接串中主机名改为服务名(如DM),避免直接写IP。
2.JDBC连接配置服务方式

无法修改`/etc/dm_svc.conf`时(如云环境)
在JDBC URL中直接指定服务名和节点列表:
###java连接示例
jdbc:dm://test?test=(192.168.1.10:5236,192.168.1.11:5236)&LOGIN_MODE=(1)

3.Docker容器环境配置方式

挂载配置文件到容器内:
docker run -v /宿主机路径/dmsvc.conf:/etc/dmsvc.conf 应用镜像

**注意事项:**

   这个LOGIN_MODE参数一定要配置,不然连接报错。

   LOGIN_MODE=(1)      # 只连接主库

二、因关键字导致备份失败处理方法

当从其他库迁移数据到达梦,比如Mysql,有可能会在表字段中使用到达梦的关键字,为了保证原程序、sql语句不用改,会在dm.ini中加EXCLUDE_RESERVED_WORDS配置,有可能将达梦的核心关键字配置到了EXCLUDE_RESERVED_WORDS中,这时备份就可能报错,本节对因配置了排除关键字导致备份失败的处理方法。
(一)、备份报错

-2007: 语法分析出错 [TYPE]附近出现错误

解决方法:

1.取消关键字屏蔽

##步骤:

(1)检查当前屏蔽的关键字:

SELECT * FROM V$DM_INI WHERE PARA_NAME = 'EXCLUDE_RESERVED_WORDS';
(2)移除敏感关键字(如TYPE);
修改dm.ini文件,删除或调整EXCLUDE_RESERVED_WORDS参数值:
EXCLUDE_RESERVED_WORDS= TYPE,PERCENT,OTHER_KEYWORD  # 移除TYPE

#重启数据库:

systemctl restart DmServiceXXX
2. 验证备份功能

BACKUP DATABASE FULL BACKUPSET '/bak/full_bak';

若成功,表明问题已解决。
(二)、关键注意事项

禁止屏蔽核心保留字:
`V$RESERVED_WORDS`视图中`RES_FIXED=Y`的保留字(如`ORDER`, `IDENTITY`)不可屏蔽,否则会导致系统功能异常。
可通过以下查询确认:

```sql
  SELECT * FROM V$RESERVED_WORDS WHERE RES_FIXED = 'Y';

替代方案(若必须使用关键字):
方案一(推荐):SQL语句中为关键字添加双引号:

CREATE TABLE "SYSDBA"."TEST"("TYPE" VARCHAR(20));  -- 创建表示例

方案二:通过dm_svc.conf客户端配置局部屏蔽(仅影响当前连接):

 [DMHA]
  KEYWORDS = PERCENT  # 仅屏蔽非核心关键字

三、license到期更新步骤

本章说明启云平台自身license到期更新方法、启云使用的元数据库license到期更新方法、启云发放的存量达梦实例license到期更新方法以及元数据库表CDB_PORTAL.CDB_LICENSE值更新方法。

(一)、获取达梦和启云license

1.获取达梦的key的值
cat dm.key|base64 -w0;
2.获取启云license的值 
cat license.lic|base64 w0;

(二)、更新启云license

cd ecloud-yaml/dm-operator/yaml/
####执行删除secret
kubectl delete -f cdb-secret.yaml
###修改cdb-secret.yaml中license配置
###重新创建secret
kubectl apply -f cdb-secret.yaml
重启operator,重启cdb-controller-manager
###查看pod
kubectl -n cdb get pod
###删除pod,重新构建pod
sudo kubectl -n dmcp-system delete pod <podName>;
###查看pod
sudo kubelet get pods -n cdb
###查看pod日志
sudo kubelet -n cdb logs -f cdb-controller-manager**

(三)、更新metadata本身dm key

kubectl -n dmcp-system get dm
kubectl -n dmcp-system edit dm metadata
#####  修改spec.database.license为dm key值
spec.database.license
####退出保存
:wq!
##### 进行元数据库pod
sudo kubectl -n dmcp-system exec -it metadata-0 bash
###登录数据库,输入用户名及密码信息
cdb disql
####查看更新的key是否生效
select * from v$license

(四)、更新存量实例dm key

### 查看dm 实例
kubectl -n dmcp-instance get dm
### 修改实例配置文件
kubectl -n dmcp-instance edit dm ***
### 修改spec.database.license值为更新的key
###退出 保存
:wq
#####
sudo kubectl -n dmcp-instance exec -it **-0 bash
cd /opt/dmdbms/bin
./disql
SYSBDA
select * from v$license

(五)、更新元数据库表CDB_PORTAL.CDB_LICENSE的dm key

###查看 pod
sudo kubectl -n dmcp-system get pod
###进入容器
sudo kubectl -n dmcp-system exec -it metadata-0 bash
cd /opt/dmdbms/bin
###打开sql命令窗口
./disql  输入SYSDBA及密码
###执行update 语句,更新license
元数据库中"CDB_PORTAL"."CDB_LICENSE"表里的DATA字段内容值替换成转换的字符串。license模板数据替换后,新订购的实例是正常的,但存量数据还需处理。          
###重启cdb-portal组件
###查看pod
sudo kubectl get pods -n dmcp-system
### 重启pod
sudo kubectl -n dmcp-system delete pod <podName>;
### 查看pod状态
sudo kubectl get pods -n dmcp-system
###查看pod日志
sudo kubectl -ndmcp-system logs -f cdb-portal**
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服