我最早装达梦DM8的时候,差不多是2020年底。那时候手上一台CentOS 7.6的服务器,装的是DM8的2020版本安装包,前后折腾了快三天,中间卡在最容易让人崩溃的几个点上:图形界面弹不出来、dminit初始化完不知道SYSDBA口令去哪了、systemctl启动之后实例一直起不来。后来把整个流程梳理清楚才发现,其实步骤并不多,坑都集中在系统准备和参数理解上。这篇文章就把我从“拿到安装包”到“建库成功、服务注册、备份可用”的完整过程写出来,命令都给全,参数逐个解释,遇到的坑也一并说明。适合刚开始接触达梦数据库、准备在CentOS 7上部署DM8的运维和开发同学参考。
1. 装之前要定死的事:安装包版本、机器配置和目录规划
1.1 版本选择:为什么是2020年这版
达梦DM8是达梦数据库的8系列版本,2020年的版本算是信创项目里出镜率很高的一代。很多人下载到的安装包命名类似 dm8_2020xxx_x86_rh6_64_ent.iso,其中 rh6 是给 Red Hat 6/7 系系统用的,CentOS 7 可以直接用。这个版本的安装流程和后面2021、2022版本核心步骤基本一致,所以你如果手里是其他年份的DM8安装包,这篇笔记的参考价值也一样成立。
有一点要特别提醒:安装包最好从达梦官方试用申请页或者可信渠道获取,拿到的ISO文件先做一下MD5校验,再上传服务器。网上流传的网盘资源很多,但不排除有被改动过的风险。我见过群里有人用了一个被压缩多次的包,结果安装到一半报文件损坏,最后重新下载才解决。
1.2 硬件与系统环境的基本要求
DM8对硬件的要求并不夸张,官方文档写最小内存1GB,但我建议至少2GB以上,推荐4GB。我踩过的一个坑是:在一台只有1GB内存的虚拟机上装DM8,dminit初始化倒是成功了,但systemd启动实例时直接OOM,日志里全是内存申请失败。后来加了swap才好一些,所以如果你手上机器内存小,先把swap准备出来会省很多事情。
磁盘方面,安装完成后DM8软件目录大概占1GB左右,数据文件按业务量另算。我建议给 /dm8 这个根目录规划出至少20GB空间,避免以后备份、归档日志把磁盘塞满。CPU型号影响的是安装包选择,x86_64选x86包,ARM环境(比如鲲鹏、飞腾)要下对应的aarch64包,别拿x86包硬装,会直接报架构不支持。
系统版本方面,CentOS 7.2以上基本都能装,我这边用的是7.6和7.9,都顺利跑通。另外如果你是麒麟V10这类国产系统,环境准备思路和CentOS 7非常像,用户创建、资源限制、防火墙处理那一套可以照搬。
1.3 目录规划:软件目录和数据目录分开,后面少折腾
很多新手装数据库喜欢一路下一步,结果软件装到默认路径 /opt/dmdbms,数据也随手放在安装目录下,后期运维的时候越用越乱。我的习惯是:
- 软件安装目录:
/dm8/dmdbms - 数据文件目录:
/dm8/data - 备份文件目录:
/dm8/backup
软装和数据分开的好处有三点:第一,备份策略可以只针对data目录做快照,不用连带一大堆二进制文件;第二,后续升级软件版本时,数据目录不动,风险小;第三,权限管理更清晰——dmdba 用户对data和backup目录有完整读写权限,软件目录只读即可,避免误操作。
在开始安装前,先把磁盘空间确认一遍:
bash复制df -h /dm8
如果 /dm8 不存在,可以用 df -h / 看根分区剩余空间。空间不够就先用LVM扩容或者找别的分区,别等安装程序跑了一半才提示磁盘不足。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统准备:dmdba用户、资源限制和防火墙一次配好
2.1 创建专用用户dmdba并加入dinstall组
达梦数据库强烈不建议用root直接跑数据库服务,安装和运行都用专用用户 dmdba,这是标准的守护进程运行方式。创建用户组和用户的命令很简单:
bash复制groupadd dinstall
useradd -g dinstall -m -d /home/dmdba dmdba
passwd dmdba
这里有个小细节:dmdba 的home目录我放到了 /home/dmdba,如果你在云服务器上习惯用root操作的,要记得后续切换时用 su - dmdba,带横杠会把环境变量一起切换过去,否则很多命令会在PATH里找不到。
2.2 资源限制配置,不配后面并发一高就报错
CentOS 7 对普通用户的进程数和文件句柄数有默认限制,如果不调高,数据库在高并发连接时很容易报 too many open files 或者线程数不足。我是直接在 /etc/security/limits.conf 末尾加两行:
bash复制dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
同时还要检查 /etc/security/limits.d/20-nproc.conf,CentOS 7里这个文件会覆盖limits.conf中的nproc设置,建议把里面的 * soft nproc 4096 改成 dmdba soft nproc 65536,或者直接把用户加进去,否则你会看到明明limits.conf里配了65536,但ulimit -u查出来还是4096。
配置完成后,重新登录dmdba用户,用下面两条命令验证:
bash复制ulimit -n
ulimit -u
都显示65536就说明配置生效了。这一步没做好,后面并发测试压测时一定会回来找你麻烦,属于典型的“装的时候省事,用的时候遭罪”的坑。
2.3 防火墙与SELinux处理
CentOS 7默认开firewalld,默认端口5236是不放行的。如果服务器就在内网测试环境,我建议直接把防火墙关掉,省得排查连接问题时还要多一层干扰:
bash复制systemctl stop firewalld
systemctl disable firewalld
如果出于安全要求不能关防火墙,那就单独放行数据库端口:
bash复制firewall-cmd --permanent --add-port=5236/tcp
firewall-cmd --reload
SELinux也建议设成disabled。DM8的进程和文件读写逻辑比较复杂,SELinux的avc拒绝日志会让人排查到怀疑人生。修改 /etc/selinux/config:
bash复制SELINUX=disabled
然后重启系统生效。注意这个文件是 SELINUX 不是 SELINUXTYPE,别改错了。不想重启的话可以临时 setenforce 0,但下次重启后必须确认配置文件已经改对。
2.4 图形界面依赖组件,最小化系统尤其注意
如果你准备走图形化安装路线(下面第3章会讲),CentOS 7最小化安装的系统通常缺少X11相关的运行库,执行 ./DMInstall.bin 时会报无法启动图形界面。提前把依赖装好:
bash复制yum install -y libX11 libXext libXtst libXrender fontconfig
如果你是通过Xshell或者其他SSH工具做X11转发,还需要 xorg-x11-xauth。不要等到安装程序报错再回来补,图形界面的坑就是挂在这里。
3. 图形化安装DM8:从挂载ISO到root脚本执行
3.1 挂载ISO并启动安装程序
拿到ISO安装包后,先挂载到本地目录:
bash复制mkdir -p /mnt/dm8
mount -o loop dm8_2020.iso /mnt/dm8
cd /mnt/dm8
ls
如果你下载的是tar压缩包,就解压后再进去:
bash复制tar -zxvf dm8_setup_xxx.tar.gz
然后启动安装程序:
bash复制./DMInstall.bin
这一步如果弹不出图形界面,先检查DISPLAY环境和X11依赖。这里我建议用root执行安装程序,因为安装过程要创建系统目录、写环境变量,root权限最省事。但后面创建实例时一定要切回 dmdba,这个我在第4章会细说。
3.2 安装模式选择:典型安装还是自定义安装
DM8的安装界面会询问安装模式,常见的有“典型安装”和“自定义安装”。典型安装会顺带帮你初始化数据库、创建实例,看起来方便,但实际有一个隐患:它创建实例时弹出的口令管理页很多人直接点了跳过,结果后面SYSDBA口令变成了一个不确定的默认值,登录时一脸懵。
我的建议很明确:选“自定义安装”,只装数据库软件,不勾选“创建数据库实例”。实例后面用 dminit 自己建,整个过程完全可控,口令也能在命令行里一次性指定清楚。
组件选择上,如果你只是做数据库服务端,服务器组件必须选,客户端工具(比如disql、dimp/dexp)建议也装上,这些是命令行运维刚需。JDBC驱动是默认带的,在安装目录的 drivers/jdbc 下面,后面用DBeaver连库会用到。
3.3 key文件与安装路径
安装过程中会询问key文件路径。如果你有达梦官方提供的试用key,选上;没有就直接跳过。跳过key不会导致安装失败,装完后数据库会处于试用版本状态,参数上有些限制,但功能基本完整,学习测试完全够用。
安装路径直接设置成我们规划好的 /dm8/dmdbms。这里注意,在图形界面里创建目录时可能需要手动输入,它不会自己帮你猜你想要的路径。
3.4 别忘了最后的root脚本
安装进度条走完后,界面一般会提示“请以root用户执行以下脚本”。这个脚本是:
bash复制/dm8/dmdbms/script/root/root_installer.sh
不要忽略这一步,它负责创建达梦运行时的系统级软链接、dmetl用户环境等。我第一次安装时觉得它可有可无,结果后面注册systemd服务时总提示环境不对,回来补跑脚本后一切正常。
跑完脚本,再回到安装界面点完成。到这里,DM8软件部分就算装好了,接下来就是建库。
4. 没有图形界面怎么办:命令行dminit建库全流程
4.1 dminit不是装软件,而是初始化数据库
很多第一次接触达梦的人搞混一件事:DMInstall.bin 是安装数据库软件,dminit 才是真正帮你创建数据库实例、生成数据文件的工具。类比一下,前者是安装了Oracle的软件,后者相当于 dbca 建库。
在无图形界面的服务器上,dminit 是最可靠的建库方式。第一步,切到dmdba用户:
bash复制su - dmdba
mkdir -p /dm8/data
注意 dminit 千万不要用root跑,达梦的程序会检测当前用户,用root初始化会直接拒绝或者生成权限混乱的文件。数据目录建议先手动创建好,并确保dmdba对它有写权限。
4.2 核心参数逐个解释
执行初始化命令的完整格式如下:
bash复制cd /dm8/dmdbms/bin
./dminit PATH=/dm8/data DB_NAME=DMDB INSTANCE_NAME=DMSERVER PORT_NUM=5236 PAGE_SIZE=16 CHARSET=1 CASE_SENSITIVE=N SYSDBA_PWD='Dm_123456'
这条命令是我实际用过、能一把跑通的配置。各参数含义如下表:
| 参数 | 说明 | 我的推荐 |
|---|---|---|
| PATH | 数据文件存放目录 | /dm8/data |
| DB_NAME | 数据库名 | DMDB |
| INSTANCE_NAME | 实例名 | DMSERVER |
| PORT_NUM | 数据库服务端口 | 5236 |
| PAGE_SIZE | 数据页大小,可选4/8/16/32K | 16 |
| CHARSET | 字符集,0=GB18030,1=UTF-8 | 1 |
| CASE_SENSITIVE | 标识符大小写敏感,Y/N | N |
| SYSDBA_PWD | 系统管理员SYSDBA的密码 | 自定义强密码 |
PATH 只指定到 /dm8/data 这层,实际数据文件会生成在 /dm8/data/DMDB/ 目录下,因为 DB_NAME=DMDB。这个目录里你会看到 dm.ini、SYSTEM.DBF、ROLL.DBF 等核心文件,其中 dm.ini 是实例配置文件,后面所有服务注册、启动都离不开它,路径要记牢:/dm8/data/DMDB/dm.ini。
4.3 初始化实例并验证目录结构
初始化命令执行成功后会打印一段信息,告诉你“数据库模式”、“system path”、“db version”等等。看到类似:
bash复制init db success.
就说明建库成功。此时验证一下目录结构:
bash复制ls -l /dm8/data/DMDB/
如果看到 dm.ini 和 .dbf 文件都生成好了,并且属主是dmdba,那么建库这一步就漂亮地完成了。
需要特别说明的是,dminit 完成后数据库还没有启动,你需要在第6章里注册服务或手动启动。经常有人在dminit成功后直接用disql连接,结果报“connection refused”,以为建库失败,其实只是实例还没起来。
5. 初始化实例时最容易卡住的“口令管理”与建库参数
5.1 口令管理界面为什么让人犯迷糊
在第3章提到过,图形化安装向导里如果你勾选了“创建数据库实例”,走到某一步会弹出一个“口令管理”页面,让你设置SYSDBA、SYSSSO、SYSAUDITOR三个系统用户的密码,页面角落里有个“跳过”按钮。
很多新手在这里直接点了跳过,原因无非是赶时间,或者觉得密码后面还能改。问题是:跳过后系统不会明确告诉你默认口令是什么,等你想用disql登录的时候,会发现 SYSDBA/任意密码 都不对,然后陷入“是不是我记错了密码”的自我怀疑。
我用命令行 dminit 建库就没这个问题,因为 SYSDBA_PWD 参数把口令在初始化阶段就直接固化进去了。所以如果你有条件,强烈不建议走图形化向导里的口令管理页,直接命令行建库是最稳的路线。
5.2 页大小、字符集、大小写敏感的权衡
这三个参数是初始化前必须想清楚的,因为它们以后基本改不了,改的话相当于重建库。
页大小(PAGE_SIZE)影响的是单行数据能容纳的最大长度。常规业务选8K也不是不能用,但我推荐16K。原因是:如果以后要存比较大的文本字段,或者从Oracle迁移数据,16K的兼容性更好;32K虽然容量更大,但会浪费空间且部分场景下性能反而下降,不是所有业务都需要。
字符集(CHARSET)建议直接选1,也就是UTF-8。国内项目从开发到运维,UTF-8是默认事实标准,源程序里的中文、表情符号都能正确存储。GB18030在纯国内老业务里可能遇到,但新项目没必要给自己埋编码不一致的坑。
大小写敏感(CASE_SENSITIVE)是最容易被忽视的参数。如果设成Y,那么 user_table 和 USER_TABLE 是两个不同的标识符;设成N,达梦会自动统一处理大小写。我的建议是设N,尤其当应用是用Hibernate、JPA这类ORM框架开发的,生成的SQL经常带引号,大小写敏感很容易出现“表或视图不存在”的怪问题。如果你是从Oracle迁移过来,Oracle默认大小写不敏感,这里更要设成N。
5.3 如果跳过了口令管理,怎么补救
如果你已经用图形化向导建过实例并且跳过了口令管理,现在SYSDBA登录不进去,怎么处理?
最稳妥也最符合软件使用规范的做法是:当前测试环境数据不重要的话,直接用 dminit 重建一个实例,然后把服务指向新实例。生产环境遇到这种情况,建议先做数据文件备份,然后联系达梦官方技术支持,在指导下重置口令,千万不要自己尝试绕过密码校验这类危险操作。
我在第2章就强调过自定义安装而不选创建实例,原因就在这——把不确定的口令管理环节整个绕开,从源头规避“口令丢失”这种尴尬局面。
6. 服务注册、启停和开机自启配置
6.1 注册systemd服务
dminit建完库后,实例还是一个“裸”状态,没有以服务方式托管。达梦提供了现成的注册脚本,用root执行:
bash复制/dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMDB -dm_ini /dm8/data/DMDB/dm.ini
这里 -t dmserver 表示服务类型是数据库实例服务,-p DMDB 是服务名后缀,生成的服务名会是 DmServiceDMDB,-dm_ini 指定实例配置文件路径。
执行完不会有太多输出,但系统里已经多了一个systemd服务。接着做标准操作:
bash复制systemctl daemon-reload
systemctl start DmServiceDMDB
systemctl enable DmServiceDMDB
systemctl status DmServiceDMDB
6.2 手动启动与日志排查
如果systemctl启动后状态不是active,先别急着反复重启。我一般在确认服务注册是否有问题时,会手动前台启动一次,把数据库进程拉到前台看输出:
bash复制su - dmdba -c "/dm8/dmdbms/bin/dmserver /dm8/data/DMDB/dm.ini"
前台模式下,达梦会打印详细的启动日志。如果看到类似 SYSTEM IS READY 或者 database is ready 的字样,说明数据库本身没问题,问题出在服务注册或权限上。如果前台都起不来,重点看它报的什么错。最干净的做法是直接去看运行日志:
bash复制tail -f /dm8/data/DMDB/log/dm_DMDB_$(date +%Y%m%d).log
日志在 /dm8/data/DMDB/log/ 下面,按日期命名,错误信息基本都会写清楚。
6.3 开机自启与端口占用检查
systemctl enable 已经保证开机自启。需要确认一下端口有没有正常监听,服务启动后执行:
bash复制ss -lntp | grep 5236
能看到 dmserver 监听在5236端口就说明服务正常。如果端口不是5236,检查自己dminit时是不是改了PORT_NUM,或者有没有被其他进程占用。
还有一个容易忽略的点:注册服务后,如果以后用 dminit 又新建了其他实例,旧服务的enable状态不会自动变,要记得重新注册和启用新实例对应的服务。多个实例同时跑的时候,端口必须不同,不然启动会失败。
7. 装完后的验证与翻车现场排查
7.1 disql连接验证,五条SQL确认实例正常
服务起来后,第一件事就是用disql连接。
bash复制su - dmdba
cd /dm8/dmdbms/bin
./disql SYSDBA/你的密码@localhost:5236
能进入 SQL> 提示符就说明连接成功。接着跑几条SQL,确认数据库整体状态:
sql复制select name, create_time from v$database;
select status$ from v$instance;
select user() from dual;
v$database 返回数据库名和创建时间,v$instance 的 status$ 显示OPEN就说明实例正常,user() 返回当前用户。
远程连接的话,用DBeaver这类工具时选达梦驱动,驱动包在安装目录的 /dm8/dmdbms/drivers/jdbc/DmJdbcDriver18.jar,URL填:
text复制jdbc:dm://服务器IP:5236
7.2 常见报错对照表
我把安装和启动过程中最常见的几个问题整理成了一张表,基本覆盖了90%的翻车现场:
| 现象 | 直接原因 | 解决办法 |
|---|---|---|
| 图形界面弹不出 | 缺少X11相关依赖 | yum安装libX11、libXext、libXtst |
| 提示“无法连接” | 端口被防火墙拦截或服务未启动 | 放行5236端口;检查systemctl状态 |
| 启动报database not initialized | dm.ini路径不对或没建库 | 确认 /dm8/data/DMDB/dm.ini 是否存在 |
| 内存OOM | 虚拟机内存过小 | 加swap或调小dm.ini中相关buffer参数 |
| root运行dminit失败 | 达梦禁止root直接初始化 | 切换到dmdba用户 |
这几个坑我在文章里基本都踩过一遍,尤其是防火墙那个,云服务器如果连不上,除了服务器内部防火墙,还要记得看云安全组是否放行5236端口。很多时候你本地 ss -lntp 明明看到监听,但外部就是连不上,八成就是安全组没放端口。
7.3 顺手给两个备份命令
安装完数据库,第二件事就是把备份先跑一遍,验证备份体系可用。达梦的逻辑备份工具是 dexp,类似Oracle的exp,命令如下:
bash复制mkdir -p /dm8/backup
chown dmdba:dinstall /dm8/backup
cd /dm8/dmdbms/bin
./dexp SYSDBA/你的密码@localhost:5236 FILE=/dm8/backup/full.dmp LOG=/dm8/backup/full.log FULL=Y
物理备份用 dmrman:
bash复制cd /dm8/dmdbms/bin
./dmrman
RMAN> BACKUP DATABASE '/dm8/data/DMDB/dm.ini' FULL BACKUPSET '/dm8/backup/full_20250101';
备份目录先建好并 chown 给dmdba,不然备份文件写到一半会失败。我刚装完就做了一次全库备份,后面调参数、做测试恢复都心里有底。这一步别省略,数据库环境搭好不等于备份方案生效,真正验证过能恢复的备份才叫备份。
最后再分享一个小经验:装完达梦后,我习惯把 dminit 那条初始化命令和各个参数写进一个 init_note.txt 放到 ~dmdba 目录里。别高估自己的记忆力,过半年再看这套环境时,这条记录会帮你省很多回忆时间。
