注册
在启动数据库或搭建主备集群遇到的常见报错
培训园地/ 文章详情 /

在启动数据库或搭建主备集群遇到的常见报错

zggzcgy 2025/06/03 28 0 0

在搭建主备集群时可能会遇到下面的错误,这里分享一下我遇到错误和解决方法,

当然如果你有更好的解决方法,也欢迎分享。或则有描述不对的地方也感谢批评指正,我们共同探讨和学习。

环境信息

系统信息: kylin v10(麒麟V10)
数据库版本:Dameng v8(达梦V8)
CPU架构: X86
许可类型: 开发版

可能的错误

错误1:缺少dmmal.ini配置[code: -140]

> dmserver dm.ini file dm.key not found, use default license! Can not open ini file /var/lib/dameng/DMDB/dmmal.ini! MAL sys initialization failed! dmserver startup failed, code = -140 [Can not access INI file] nsvr_ini_file_read failed, [code: -140]

解决方法:

当数据库配置文件dm.ini中配置了 MAL_INI = 1 数据库在启动时会在同目录读取dmmal_.ini配置,所以需要将该配置文件

创建处理,按下面格式编写配置文件。如果不配置集群也可以禁用mal服务。

# 修改dm.ini配置,禁用dml服务:即将MAL_INI=1改为0 sed /mal_ini/Is/1/0/ -i .bak dm.ini # 修改后再次启动数据库即可

主备配置示例

# dmmal.ini mal_check_interval = 5 # mal链路检测时间间隔 mal_conn_fail_interval = 5 # 判定mal链路断开的时间 [mal_inst1] mal_inst_name = GRP1_RT_01 # 实例名,和dm.ini中的instance_name一致 mal_host = IP1 # mal系统监听tcp连接的ip地址 mal_port = 5237 # mal系统监听tcp连接的端口 #mal_inst_host = IPA1 # 实例的对外服务ip地址 mal_inst_port = 5236 # 实例的对外服务端口,和dm.ini中的port_num一致 mal_dw_port = 5240 # 实例本地的守护进程监听tcp连接的端口 mal_inst_dw_port= 5238 # 实例监听守护进程tcp连接的端口 [mal_inst2] mal_inst_name = GRP1_RT_02 # 实例名,和dm.ini中的instance_name一致 mal_host = IP2 # mal系统监听tcp连接的ip地址 mal_port = 5237 # mal系统监听tcp连接的端口 #mal_inst_host = IPA2 # 实例的对外服务ip地址 mal_inst_port = 5236 # 实例的对外服务端口,和dm.ini中的port_num一致 mal_dw_port = 5240 # 实例本地的守护进程监听tcp连接的端口 mal_inst_dw_port= 5238 # 实例监听守护进程tcp连接的端口

配置完后再次启动数据库服务即可

错误2:数据库启动报dmmal.ini未配置[code: -9501]

> dmserver dm.ini file dm.key not found, use default license! self instance(INSTANCE01) not found in /var/lib/dameng/DMDB/dmmal.ini Read /var/lib/dameng/DMDB/dmmal.ini error. MAL sys initialization failed! dmserver startup failed, code = -9501 [MAL sys has not configured or server is not enterprise version] nsvr_ini_file_read failed, [code: -9501]

当配置dmmal.ini文件后,再次启动数据库会报错dmmal未配置或不是企业版

这是因为当前数据库实例名没有在dmmal配置文件中进行注册及对应起来,需要重新检查实例名是否填写正确

只需要将对于实例名填写到dmmal.ini,实例名在报错第3行括号内

提示:
请在数据库实例存储目录执行下面命令!

# 将dm.ini配置的实例名填写到dmmal.ini sed -rn '/INSTANCE_NAME/s/.+=\s(\S+).*/3,\/name\/s\/(name).+\/\\1\\t= \1\//p' dm.ini | sed -rf - -i .bak dmmal.ini

完整的配置示例请参考 错误2 中的 主备配置示例 配置示例

错误3:本地归档配置不存在[code: -811]

> dmserver dm.ini file dm.key not found, use default license! Validate dmarch.ini error, code=-811 dmserver startup failed, code = -811 [Local archive config not exist] nsvr_ini_file_read failed, [code: -811]

当在dm.ini配置了 ARCH_INI = 1 时,数据库启动时会检查dmarch.ini配置文件,若未配置本地归档或配置不正确,会出报本

地归档配置不存在,可根据自身需求关闭归档或更正配置

禁用本地归档方法

提示:
请在数据库实例存储目录执行下面命令!

# 修改dm.ini配置:当arch_ini配置为1时修改成0 sed /arch_ini/Is/1/0/ -i .bak dm.ini # 禁用后再次启动数据库则不在检查dmarch.ini配置文件

归档配置示例:

# 若需求配置主备,取消注释并补充缺失值 #[archive_realtime] #arch_type = realtime # 实时归档类型 #arch_dest = <目标实例名> # 实时归档目标实例名 # 本地归档配置 [archive_local] arch_type = local # 本地归档类型 arch_dest = <归档存放路径> # 本地归档文件存放路径 arch_file_size = 128 # 单位mb,本地单个归档文件最大值 arch_space_limit = 0 # 单位mb,0表示无限制,范围1024~2147483647m

错误4:未知的目的归档配置[code: -808]

> dmserver dm.ini file dm.key not found, use default license! Instance GRP1_RT_02 cannot find in dmmal.ini Validate dmarch.ini error, code=-808 dmserver startup failed, code = -808 [Invalid archive config destination] nsvr_ini_file_read failed, [code: -808]

当配置实时归档时,需要指定目的归档的实例名,并且该实例名需要在dmmal.ini配置文件中存在,否则会报此错误

解决办法,先根据规划检查dmmal.ini配置的实例名是否正确,再依据dmmal.ini内的实例名来更正dmarch.ini配置

配置前请先确认dmmal.ini配置与实际情况一致,也根据情况按照错误3的禁用归档方式进行停用归档。

提示:
请在数据库实例存储目录执行下面命令!

# 运行下面命令将获取到目标实例名列表 grep -oP 'name\s*=\s*\K[A-Z0-9_-]+' dmmal.ini | grep -v $(awk '/INSTANCE_NAME/{print $3}' dm.ini) # 根据实际情况替换dmarch.ini中的arch_dest值 # 示例命令: sed /arch_dest/Is/错误实例名/目标实例名/ -i dmarch.ini # 如:报错第3行 `Instance GRP1_RT_02 cannot find in dmmal.ini` 中的 GRP1_RT_02 为错误实例名, # 运行上面命令打印 INSTANCE02 ,则可执行下面命令 sed /arch_dest/Is/GRP1_RT_02/INSTANCE02/ -i .bak dmarch.ini # 执行完命令后再次启动数据库服务器即可

错误5:客户端连接服务报错[code: -70028]

disql SYSDBA/Dameng123@dm01.vm.lan. [-70028]:创建SOCKET连接失败. disql V8 用户名:

先检查客户端与服务端的网络,按照下面步骤进行排查,首选在客户端上进行排查。

提示:
请在数据库实例存储目录执行下面命令!

# 在客户端上检查与服务器的网络是否可达 ping dm01.vm.lan -c 4 # 在客户端上检查服务器端口是否可用 telent dm01.vm.lan 5236

在服务器上检查数据库运行情况

# 检查数据库进程是否在运: 若没有则没有运行,重新启动一下数据库就可以了 ps aux | grep dmserver # 检查数据库端口是否监听: 若没监听则可是数据库还在启动过程中,可以检查一下运行日志,有些情况则是客户端连接时端口和服务器端口不一致导致 sudo netstat -tnlp | grep dmserver sudo ss -tnlp | grep dmserver # 检查防火墙是否开启: 若防火墙开启要检查相应端口是否放通,也可关停防火墙 sudo systemd status firewalld.service sudo firewall-cmd --list-all # 检查数据库运行实例,确保日志输出`SYSTEM IS READY.`,只有当运行打印该日志,才能确保数据库实例启动成功 > dmserver dm.ini ...运行打印省略... systables desc init success. ndct_db_load_info finished, code:0. nsvr_process_before_open begin. nsvr_process_before_open success. SYSTEM IS READY. # 查看日志文件:根据实际情况调整下列中文,根据数据库启动时间查看是否存在该行日志,若存在才能确定数据库启动完毕。 > grep "SYSTEM IS READY." /数据库安装目录/log/dm_实例名_20250101.log 2025-01-01 00:01:00.554 [INFO] database P0000007536 T0000000000000007536 SYSTEM IS READY. 2025-01-01 00:01:00.554 [INFO] database P0000007536 T0000000000000007536 [for dem]SYSTEM IS READY.

若防火墙拦截,可以关闭防火墙或添加规则解决这个问题

# 禁用并关闭防火墙 sudo systemctl disable --now firewalld.service # 或者添加放通规则:这里使用默认端口5236 sudo firewall-cmd --add-port=5236/tcp # 永久规则:重启服务器后也生效 sudo firewall-cmd --add-port=5236/tcp --permanent

错误5:数据库启动时报错第一次启动失败

> dmserver dm.ini ...省略输出... DM Database Server 64 V8 03134284294-20241225-255012-20119 startup... Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL Database mode = 0, oguid = 0 License will expire on 2025-12-25 Database first startup failed, reinitialize database please! Floating point exception (core dumped)

当数据库首次启动时若未完全初始化完毕进程被结束,则会发生该错误,若是新环境重新初始化实例就可以了,

如果是已有实例,只能重新通过备份还原方式修复数据库。

错误6:数据库首次初始化未完成尝试进入mount状态

> dmserver dm.ini mount DM Database Server 64 V8 03134284294-20241225-255012-20119 startup... Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL Database mode = 0, oguid = 0 License will expire on 2025-12-25 dmserver startup in mount status with not initialized database

当数据库未初始化完成,尝试进入启动mount状态时会报此错误,只需将去除mount参数,启动后再进入mount即可。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服