news 2026/10/14 10:16:03

达梦数据库命令行建实例:dminit初始化与DmService注册指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
达梦数据库命令行建实例:dminit初始化与DmService注册指南

简介:面向需要在无图形界面环境下部署达梦数据库的 DBA 与运维人员,这份资料围绕纯命令行创建实例并初始化数据库的核心操作展开。内容以 dminit 工具为主线,既说明快速指定路径与库名的极简方式,也展开交互式模式下逐项配置数据库名、服务端口、页大小、字符集、时区、加密策略等参数的完整过程,并补充服务注册脚本的用法,帮助读者串起从实例创建到服务启动的完整链路。文档中还保留了命令行终端输出样例与关键参数中文对照说明,可在实际部署时直接参考排错。资源为单个 PDF 文件,体积约 44KB,轻量易存取,适合作为命令行部署场景下的速查手册。目前已有 6862 人学习下载,对于正在接触国产数据库落地配置的工程师而言,是一份能快速补全实战细节的轻量资料。

1. 没有图形界面时,达梦数据库的实例怎么建

交付达梦数据库的现场,十次有八次只有终端。服务器装好了,$DM_HOME/bin就在那里,下一个动作本该是“创建实例并初始化数据库”,可很多人被没有图形界面卡住。达梦其实给了一款命令行工具dminit,专门干这件事:把数据目录、控制文件、系统表空间和dm.ini一次性初始化好。它解决的是远程部署、自动化脚本交付、图形工具不可用时的建库刚需。适合三类人:只靠命令行交付的 DBA、写全自动部署脚本的运维、临时接手服务器只有 ssh 的现场工程师。但得先打个预防针——dminit只负责把库建出来,系统服务要另行注册,别指望一条命令全包。

2. dminit 的两种用法:一行命令快速建 vs 交互式逐项配置

2.1 带参数全自动创建:命令够短,默认值未必够用

dminit支持把参数直接挂在命令后面,最小集是三个:

[dmdba@dm ~]$ dminit PATH=/dm/dmdbms/data DB_NAME=DAMENG INSTANCE_NAME=DMSERVER

PATH是数据文件主目录,DB_NAME是数据库名,INSTANCE_NAME是实例名。命令执行十几秒后,指定目录下会生成一套包含dm.ini、控制文件、系统表空间和日志文件的完整初始化结构。这个写法本质上是把交互模式里的问答全部跳过了,剩下的页大小、字符集、大小写敏感、时区、加密开关全部走内置默认值。

参数作用生产建议
PATH数据文件根目录独立分区、预留足够空间
DB_NAME数据库名与业务名保持一致,默认 DAMENG
INSTANCE_NAME实例名与注册服务后缀区分开,默认 DMSERVER

为什么不推荐这种用法?我在交付项目里吃过一次亏,一行命令建完,应用联调时才发现默认字符集是 GB18030、默认标识符大小写敏感,Java 端全是 UTF-8 和小写表名,结果连库都切不过去。关键是这几个参数在建库那一刻就被固定进了控制文件,没有任何命令能事后改,重建就是推倒重来。所以这条快速命令我一般只在自己本机验证dminit是否存在时用,真正准备交付的库,全走下面的交互式配置。

2.2 交互式模式:图形工具里的选项被搬到终端

不带任何参数直接执行dminit,就会进入问答流程:

[dmdba@dm ~]$ dminit initdb V7.6.0.95-Build(2018.09.13-97108)ENT db version: 0x7000a file dm.key not found, use default license! License will expire on 2020-09-14 input system dir: input db name: input port num: input page size(4, 8, 16, 32): input extent size(16, 32): input time zone(-12:59,+14:00): +8 string case sensitive? ([Y]es, [N]o): N which charset to use? (0[GB18030], 1[UTF-8], 2[EUC-KR]): 1 length in char? ([Y]es, [N]o): Y enable database encrypt? ([Y]es, [N]o): N page check mode? (0/1/2): 0 input elog path: auto_overwrite mode? (0/1/2): 0 write to dir [/dm/dmdbms/data/DAMENG]. create dm database success. 2020-04-15 15:40:44

每一步回车都对应一个初始化决策。下面这张表是我每次建库都会对着核的参数清单,按提示顺序列:

提示符含义取值我的建议
input system dir数据文件存放路径绝对路径单独分区,预留增长空间
input db name数据库名字母开头与业务名一致
input port num实例服务端口默认 5236确认端口占用后定
input page size页大小4 / 8 / 16 / 32OLTP 选 8,分析型选 16
input extent size扩展大小16 / 32默认 16 够用
input sec priv mode安全特权模式0 / 1无等保要求选 0
input time zone时区-12:59 ~ +14:00国内填 +8:00
string case sensitive标识符是否区分大小写Y / N生产多数选 N
which charset字符集0=GB18030, 1=UTF-8, 2=EUC-KR新应用选 1
length in char长度按字符还是按字节Y / N选 Y 最稳妥
enable database encrypt数据库加密Y / N无强制要求选 N
page check mode页检查模式0 / 1 / 2常规选 0
input elog path超长日志路径可留空留空走默认目录
auto_overwrite mode自动覆盖模式0 / 1 / 2默认 0,防手滑覆盖

这里挑几个最容易看走眼的展开说。

页大小对应其他数据库里的 block size。它决定一页能存多少行、一个行能大到什么程度,而且建库后就锁死。OLTP 场景行短、并发高,8KB 是主流;如果业务里有大字段、大行或者分析类语句多,16KB 起步更稳。拿不准时选 16 是相对安全的选择,代价是单页缓存占用变大。大小写敏感是个很隐蔽的坑:选 Y 之后,create table Test和create table test是两个对象,应用里只要大小写拼写不统一,就会冷不丁报“无效的表名”。绝大多数接达梦的业务都是老应用迁过来,SQL 水平参差不齐,选 N 能省掉一整类故障。

字符集和长度计算方式经常被合在一起说,其实是两回事。charset 决定数据落盘的编码,0 是 GB18030,1 是 UTF-8;length in char 决定你建CHAR(20)时,20 是按字符算还是按字节算。UTF-8 下一个汉字占三个字节,length in char 选 N 的话,CHAR(20)实际只能存 6 个汉字,业务一填就报超长。我一般固定 charset=1、length in char=Y,配合客户端的 UTF-8 连接串,一整条链路下来中文不会乱。

确认全部参数后,dminit会先把数据目录建出来、写入dm.ini,再创建控制文件和系统表空间,最终打出create dm database success。如果你不想在终端前一条条敲,可以把回答按顺序预写成一个文件,每行一个值,逐行贴进去:

/ups/app/dmdb/dmdata dmdb 5336 8 16 0 +8:00 N 1 Y N 0 0

注意上面文件里有一个空行,对应input elog path直接回车取默认值。最后一行 0 是auto_overwrite,这个值放 0 意味着目标目录下已有同名数据库文件时报错退出,不会覆盖,比默认一路回车要安全。

提示:页大小、大小写敏感、字符集这三个参数建库后不可修改,初始化前一定要定稿。

3. 建完实例不等于有服务:注册 DmService 与启动前检查

3.1 dminit 只建库,不注册服务

用dminit成功初始化后,目录里有数据文件、有dm.ini,但你去/etc/init.d下翻,找不到任何DmService开头的脚本;service --status-all里也没有达梦。这是正常现象,因为dminit的本职是“初始化数据库文件”,而服务注册是另一个动作。用图形工具建库时,向导程序在最后顺手调用了服务安装脚本,所以看起来是一条龙;纯命令行下这步要自己做。理解了这点,就不会在刚建完库时对着ps -ef找不到dmserver进程而怀疑建库失败。此时实例确实没有在运行——不是错了,是还差一个注册动作。

3.2 用 dm_service_installer.sh 把实例注册成系统服务

注册脚本固定在$DM_HOME/script/root目录下,且必须用 root 执行。以我们前面建的 DAMENG 实例为例:

cd $DM_HOME/script/root ./dm_service_installer.sh -t dmserver -i /dm/dmdbms/data/DAMENG/dm.ini -p DMSERVER

三个参数各管一件事:-t指定服务类型,达梦实例服务就是dmserver;-i指向实例的dm.ini文件,必须是绝对路径;-p是服务名后缀,脚本会把它拼成完整的服务名DmServiceDMSERVER。注册成功后再看/etc/init.d,DmServiceDMSERVER脚本已经躺在那里了。

这里最容易犯的错是把-i误写成数据目录/dm/dmdbms/data/DAMENG,脚本会直接报找不到 ini 文件。记忆点就一条:-i后面永远跟着dm.ini,不是目录。另外执行前确认当前用户是 root,dmdba用户没有/etc/init.d的写权限,会以 permission denied 收场。

注意:-i参数后面必须跟 dm.ini 文件路径,不是数据目录。

3.3 启动、停止和状态检查

注册完的服务可以这样管理:

/etc/init.d/DmServiceDMSERVER start /etc/init.d/DmServiceDMSERVER stop /etc/init.d/DmServiceDMSERVER status

等效的写法是换成 service 命令:

service DmServiceDMSERVER status

start 之后不要立刻觉得万事大吉。实例进程起来后还要做恢复,日志里出现类似SYSTEM IS READY的标识才代表可以接受连接。确认开机自启是否生效,在 SysV 环境用chkconfig:

chkconfig --list | grep DmService

能看到DmServiceDMSERVER在运行级别 3 和 5 上是开,就说明重启后会自动拉起。如果是 systemd 管理的机器,看/etc/systemd/system下有没有对应的服务单元,或者干脆重启一次验证。我不建议自己在rc.local里硬加启动命令——注册脚本已经把这步做完了,重复添加反而可能造成实例被拉起两次。

4. 避坑:初始化与注册阶段最常翻车的 5 个点

4.1 初始化阶段:输入格式、固化参数、字符集三连坑

坑 1:input err, input again无限循环

现象:交互式建库时,明明按提示输入了 8 或者 16,终端却回一句input err, input again,连输几次都进不去下一步。

原因:dminit对输入格式要求很死:页大小、扩展大小只接受纯数字,不能带 “8K”、“16KB” 这类单位;终端粘贴内容时如果带上行尾空格或不可见字符,也会被判格式错误。原回显里那一串input err基本都出在这一步。

解决:数字直接敲,不带任何单位;从文件贴答案时,确认每行末尾没有空格,最好用cat先看一遍文件有没有空行错位。实在搞不定就直接回车取默认值,后面再想办法。

坑 2:页大小和大小写敏感建完就改不了

现象:库已经用起来,应用报字段超长或表名找不到,DBA 想调整页大小或大小写敏感参数,翻遍文档找不到修改命令。

原因:这两个参数在建库写入控制文件的那一刻就固化了,系统表空间的格式化也是基于该值做的,dminit没有提供事后变更入口。

解决:初始化前定死。页大小按业务选:偏 OLTP 用 8,含大字段或分析型用 16;大小写敏感除非业务明确依赖大小写区分,否则一律 N。这是我在生产环境吃过亏后定下的规矩,没有例外条款。

坑 3:字符集和 length in char 配错,中文入库变问号

现象:初始化一切正常,导入数据后中文字段全是??或乱码,SELECT 出来根本没法看。

原因:字符集、长度计算方式、客户端连接编码三者必须一致。常见组合错误是库建成了 GB18030,客户端却用 UTF-8 连接串;或者 length in char 选 N,字段按字节算容量,中文被截断成半个字。

解决:建库时 charset 选 1(UTF-8)、length in char 选 Y,客户端连接参数也用 UTF-8。字符集在dminit里同样建库后不可改,所以这一步的优先级要提到和页大小一样高。

4.2 注册与连接阶段:权限、路径和防火墙

坑 4:注册脚本因权限或路径报错

现象:执行./dm_service_installer.sh时报 permission denied,或者提示can not open .../dm.ini。

原因:脚本要往/etc/init.d写文件,dmdba用户没有写权限;-i参数写错指向,比如写成了数据目录而不是dm.ini文件本体。

解决:先su - root切换,再确认-i的路径精确到/dm/dmdbms/data/DAMENG/dm.ini。这两个问题几乎覆盖了该脚本 90% 的报错,剩下的再看文件是否真的存在。

坑 5:服务起来了,远程客户端还是连不上

现象:服务器本机disql能连,用 navicat、IDE 或业务应用从外部连,要么超时要么直接拒绝。

原因:一半是操作系统防火墙没放行实例端口,一半是客户端驱动用的不对。达梦实例默认端口 5236,如果你初始化时改成了 5336,放行时又漏了改,本地自然能通、外部全断。

解决:先在本机确认监听,再放行防火墙,最后检查驱动:

ss -tlnp | grep 5336 firewall-cmd --add-port=5336/tcp --permanent firewall-cmd --reload

需要提醒的是,navicat、IDEA 这类工具连达梦要选达梦专用驱动,拿 MySQL 驱动或通用 JDBC 路径硬填,连上也会在协议层报各种奇怪错误。驱动连接串里的端口、字符集参数要和建库时保持同一套。

5. 建完实例别急着交付:端口、日志、客户端三连查

我现在的交付习惯,实例建完、服务注册完,不急着走,按下面三步各查一遍,十分钟内能确认“这个库真的能用”。

5.1 服务和端口都在吗

service DmServiceDMSERVER status ss -tlnp | grep 5336 ps -ef | grep dmserver

service 返回 running、ss 能看到监听端口、ps 里有dmserver进程,三样齐了说明实例进程是活的。如果服务 running 但没有端口,大概率实例还在做恢复,等几十秒再查一次。

5.2 日志里有没有 READY

tail -n 50 $DM_HOME/log/instance_*/dm_*.log

实际日志路径以初始化时elog参数为准,没指定就在数据目录同级的 log 目录下。看到类似SYSTEM IS READY的关键字才可以认为实例真正可用。只看进程不看日志,是我见过的最多的一种“假成功”。

5.3 客户端真正走一遍连接

disql SYSDBA/SYSDBA@localhost:5336

能进 SQL 提示符就说明服务、端口、认证三层全通。达梦初始化的默认账号是 SYSDBA,初始密码也是 SYSDBA,这一步验证完之后第一件事就是改密码,别让默认口令留在生产环境里。外部客户端这一端,用 navicat 连的时候确认驱动选的是达梦,连接串的 IP、端口、字符集三项和初始化参数对齐,这样交付到应用侧才不会被“能连上但乱码”这种问题找回来。

我自己的教训是这样的:有一年给客户做交付,图省事用了最快速的那条dminit单行命令,忘了大小写敏感默认是 Y,客户业务模块全是驼峰表名,上线第三周就要求重装。从那以后我每次初始化都强制走一遍参数清单和这三步验证,哪怕是测试环境也照做,这个习惯救了我好几次。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 10:15:50

数据分析笔试核心考点拆解:题型权重、SQL技巧与Case答题框架

每年校招和暑期实习的这个时间节点,数据分析笔试都是淘汰率最高的一环。很多同学刷了几百道SQL,背了一堆统计公式,结果打开某大厂的笔试链接,还是被一道不按套路出的业务Case题或者ACL配置题卡了半小时。我自己经历过多个大厂数分…

作者头像 李华
网站建设 2026/10/14 10:15:39

Apache Axis1.4 官网备份实战:wget 整站镜像与离线校验指南

简介:Apache Axis1.4 官网备份是一份面向 Java Web 服务开发者与教学研究者的历史版本资源包,用于在官方停止维护后仍能搭建 SOAP 服务端与客户端环境,适合需要复现早期 JAX-RPC、WSDL 自动代码生成等经典技术栈的读者。压缩包共 187 个文件&…

作者头像 李华
网站建设 2026/10/14 10:15:32

商标因 “缺乏显著性” 被驳回?根源都在这几条

商标注册的审查规则里,除了基础的禁用标志条款,针对三维标识、驰名商标保护、地理标志、涉外注册等特殊场景,还设有一系列专门的准入限制与裁判规则。很多企业在品牌设计、跨品类布局或是涉外申请时,往往因为不熟悉这些专项规则导…

作者头像 李华
网站建设 2026/10/14 10:15:24

金融科技校招面试全攻略:计算机基础与工程思维突破

1. 校招面试的整体定位与岗位画像拆解1.1 这个岗位到底在招什么样的人聊到金融科技方向的校招软件开发岗,很多同学第一反应是“是不是要懂很多金融知识”。我面过也带过不少校招新人,可以很明确地说:金融业务知识在面试环节的权重远没有想象中…

作者头像 李华
网站建设 2026/10/14 10:14:43

Spring注解机制解析:内置与自定义注解开发指南

1. 注解的本质与Spring生态中的角色 在Java开发领域,注解(Annotation)早已从JDK 1.5时代的新鲜事物演变为现代编程的基础设施。Spring框架作为企业级开发的标杆,其设计哲学中大量运用了注解这一元数据编程手段。理解注解的运作机制…

作者头像 李华
网站建设 2026/10/14 10:14:26

AI时代个人量化实战:从策略设计到回测避坑全指南

先说一个判断:AI时代给个人投资者带来的最大红利,不在AI替你下单,而在于AI把原本需要三年才能补齐的“写代码、查数据、做回测”基本功,压缩成三周的调研与验证。你可能连Python的类都还没完全看懂,但只要会用一句话把…

作者头像 李华