上周刚帮客户在CentOS 7.9上完成了一套达梦8单机部署,整个过程走下来,我觉得有几个细节值得单独拎出来写一篇。达梦8这两年遇到的频次越来越高,很多单位从Oracle、SQL Server往国产数据库迁移,第一步都是先在Linux 7上落地一套单机环境做验证。虽然官方文档写得很全,但真正上手时还是会遇到各种依赖、权限、初始化参数的问题,本文就按照实际部署流程,把这套操作完整梳理一遍。
文章面向的主要是刚接触达梦8的运维和DBA,也适合准备做国产化替代评估的开发同学。整个操作我以CentOS 7.9为例,理论上RHEL 7、麒麟V10等兼容CentOS 7体系的系统都适用。内容覆盖环境准备、安装、实例初始化、服务注册、问题排查,照着一步步来,大约半小时就能把一套可用的单机环境跑起来。
1. 安装前的准备工作
1.1 先确认机器配置与操作系统版本
很多人在部署达梦8时最容易忽略的就是系统兼容性检查。下载安装包之前,建议先确认CPU架构和操作系统版本,这一步直接决定后面安装包选型是否匹配。可以用以下命令快速检查:
bash复制uname -m
cat /etc/redhat-release
nproc
free -g
df -h /dm8
从实际部署经验来看,达梦8在x86_64架构的Linux 7上支持得最好,ARM架构虽然也有对应的aarch64安装包,但部分版本的依赖库会不同。内存方面,如果是跑测试环境,建议至少2GB;生产环境单机建议不低于16GB,具体根据业务并发调整。磁盘则是两个维度:一是安装程序本身占用,约1GB左右;二是数据文件存放目录,这个要按照业务数据量预留空间,不要等初始化完实例才发现磁盘不够。
1.2 操作系统级参数调整
达梦8在Linux 7上运行,核心依赖是libaio、glibc、ncurses等基础库。最小化安装的服务器尤其容易出现缺库问题,建议安装前先检查:
bash复制rpm -qa | grep libaio
rpm -qa | grep glibc
如果缺少libaio,直接使用yum安装:
bash复制yum install -y libaio libaio-devel ncurses-devel
然后是SELinux和防火墙。生产环境单机部署如果不需要额外的安全加固策略,建议将SELinux设置为disabled状态,或者至少设为permissive。否则达梦8运行时某些文件访问会被SELinux拦截,表现出的现象非常隐蔽,比如数据库启动后无法创建临时文件、日志文件写不进去等。防火墙可以先关闭或仅放行达梦的数据库端口:
bash复制setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
注意setenforce 0只对当前会话生效,重启后仍会回到enforcing,所以需要配合修改/etc/selinux/config持久化。
文件句柄和进程数限制也建议在安装前调整。达梦8运行时需要创建大量文件句柄,默认的ulimit值往往不够用。很多人在数据库并发连接数上来后遇到“Too many open files”,就是这一步没做。在/etc/security/limits.conf中追加以下内容:
text复制dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 20480
dmdba hard nproc 20480
dmdba soft stack 10240
dmdba hard stack 10240
这些参数会在dmdba用户登录时生效,后面创建用户后重新su切换即可。
1.3 目录规划与安装包选型
达梦8的安装目录我建议和数据目录分开规划。比如安装目录放在/dm8,数据目录放在/dm8/data或者独立的数据盘,这样后续备份、扩容、重装时不会互相影响。
需要准备的安装包一般是类似dm8_setup_xxx_x86_64_rh7.tar.gz 或 iso 文件。拿到安装包后先确认压缩包里的DMInstall.bin文件具有可执行权限。官方文档建议使用dmdba用户安装,不要用root用户直接装,这既是为了安全,也是避免后续启动数据库时文件权限过于宽泛的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建用户与安装达梦8
2.1 创建dmdba用户并配置环境
达梦官方推荐的安装用户是dmdba,所属组为dinstall。如果系统中还没有这个用户,需要先创建:
bash复制groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
创建完成后,给安装目录授权。这里有个容易踩的坑:如果/dm8目录是root创建的,默认权限是755,dmdba用户没有写入权限,安装时会一直提示目录不可写。我习惯先把目录所有者直接变更:
bash复制mkdir -p /dm8
chown -R dmdba:dinstall /dm8
如果你后面把数据文件也放在/dm8/data下,同样保持这个所有者关系即可。
2.2 图形安装与命令行安装的选择
达梦8提供了图形化的安装向导和命令行安装两种模式。如果你是带图形界面的Linux桌面环境或通过Xmanager、VNC等工具远程显示图形,可以执行./DMInstall.bin后按界面提示操作。但实际生产服务器基本都是最小化安装,没有图形环境,所以更推荐使用命令行安装模式。
命令行安装的好处是可以完全在SSH终端内完成,不依赖X11转发,也不会遇到中文乱码和界面卡死的问题。执行方式很简单:
bash复制su - dmdba
cd /opt/dm8_setup
chmod +x DMInstall.bin
./DMInstall.bin -i
接下来会有一系列交互提示,按照实际情况选择即可。需要注意几个选择点:
- 语言选择:输入1选择中文
- 是否输入key文件路径:如果有正式授权文件,输入完整路径;如果只是测试环境,直接跳过
- 时区选择:选择中国标准时间
- 安装类型:输入1选择典型安装,包含数据库服务器、客户端工具等
- 安装目录:输入/dm8
等进度条走完后,安装程序会提示需要以root身份执行一个脚本。这个脚本位置一般是/dm8/script/root/root_installer.sh,它会创建dinstall组、设置环境变量文件、注册相关依赖。别忘了切回root执行:
bash复制/dm8/script/root/root_installer.sh
实际部署中,如果不小心跳过了这个脚本,后续启动数据库服务时可能会提示缺少某些系统配置,所以这个步骤建议不要略过。
3. 初始化实例与服务注册
3.1 理解dminit关键初始化参数
安装完达梦8只是完成了第一步,真正核心的环节是初始化实例。这个阶段与Oracle建库类似,但达梦8提供的参数更多,而且有些参数在初始化后就不能修改了。我先列一张关键参数表,方便对照:
| 参数名 | 取值示例 | 含义与影响 |
|---|---|---|
| PATH | /dm8/data | 数据文件存放路径 |
| DB_NAME | DMTEST | 数据库名称 |
| INSTANCE_NAME | DMTEST | 实例名称 |
| PORT_NUM | 5236 | 数据库服务监听端口,默认5236 |
| PAGE_SIZE | 8/16/32 | 数据页大小,单位KB,初始化后不可更改 |
| CHARSET | 0/1 | 字符集,0为GB18030,1为UTF-8 |
| CASE_SENSITIVE | Y/N | 标识符是否区分大小写 |
| LENGTH_IN_CHAR | Y/N | VARCHAR类型长度是否以字符为单位 |
PAGE_SIZE参数是很多初学者最先踩坑的地方。达梦8的页大小支持4KB、8KB、16KB、32KB,默认是8KB。从实际运维角度来说,如果业务以OLTP事务为主、字段长度较短,8KB足够;但如果以后要存大字段、做分析类查询,建议直接设置16KB或32KB。这个参数一旦写入控制文件,后续不能修改,所以在初始化前一定要结合业务形态想清楚。
CHARSET字符集参数同样需要提前规划。达梦8的字符集默认是GB18030,这套字符集对中文支持不错,但如果你在迁移外部数据或对接异构系统时字符串编码不统一,就会出现乱码。我的建议是,只要是新搭建的环境,统一使用UTF-8,也就是将CHARSET设置为1,避免后期编码转换的麻烦。这里提醒一点:如果需要从Oracle迁移数据到达梦8,且原库字符集是AL32UTF8,保持UTF-8会省事很多。
3.2 使用dminit创建数据库实例
在初始化实例前,先切换到dmdba用户并加载环境变量。达梦8安装完成后并不会自动把bin目录加入PATH,需要手动配置。编辑~/.bash_profile,追加以下内容:
bash复制export DM_HOME=/dm8
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
然后执行source ~/.bash_profile使其生效。
接下来使用dminit工具初始化实例。这里我用一个相对稳妥的参数组合作为参考:
bash复制su - dmdba
mkdir -p /dm8/data
dminit PATH=/dm8/data DB_NAME=DMTEST INSTANCE_NAME=DMTEST PORT_NUM=5236 PAGE_SIZE=16 CHARSET=1 CASE_SENSITIVE=Y LENGTH_IN_CHAR=1
这个命令会在/dm8/data目录下创建一个名为DMTEST的数据库,监听端口5236,页大小16KB,字符集UTF-8。关于LENGTH_IN_CHAR参数,如果业务系统大量使用中文,建议设置为1,这样建表时定义VARCHAR(100)实际可以存储100个字符,而不是100字节,避免出现“字段长度不足”的报错。
如果在初始化过程中出现以下错误:
text复制invalid path or permission denied
绝大多数情况是dmdba用户没有/dm8/data目录的写权限,检查一下目录所有者再做chown即可。
3.3 注册达梦服务并通过systemctl管理
初始化完成后,达梦8会生成dm.ini配置文件,位置在/dm8/data/DMTEST/dm.ini。此时还不能直接用systemctl管理数据库,需要通过达梦自带的服务注册脚本把实例注册成系统服务。以root用户执行:
bash复制/dm8/script/root/dm_service_installer.sh -t dmserver -p DMTEST -dm_ini /dm8/data/DMTEST/dm.ini
其中-p参数指定实例名,服务名会生成DmServiceDMTEST。注册完成后就可以用systemctl命令启停了:
bash复制systemctl enable DmServiceDMTEST
systemctl start DmServiceDMTEST
systemctl status DmServiceDMTEST
如果启动失败,先去排查日志,日志文件通常位于/dm8/data/DMTEST/log下。达梦8在启动阶段最容易出问题的不是数据库本身配置,而是系统参数限制,比如/etc/security/limits.conf没有生效,或者内核信号量设置过小。检查方式:
bash复制ulimit -n
ulimit -u
cat /proc/sys/kernel/sem
内核信号量如果过小,可以在/etc/sysctl.conf中调整:
text复制kernel.sem = 250 32000 100 128
fs.file-max = 6815744
vm.swappiness = 10
执行sysctl -p使其生效。这里给出的数值是参考值,也可以根据服务器配置适当调整。
4. 启动验证与常见问题排查
4.1 使用disql连接并验证版本
数据库服务启动后,第一步要做的就是本地连接验证。达梦8提供了一个类似Oracle sqlplus的命令行工具disql,使用方式很接近:
bash复制su - dmdba
disql SYSDBA/SYSDBA@localhost:5236
如果连接成功,会进入SQL提示符界面,执行以下两句SQL确认数据库状态和版本:
sql复制select status$ from v$instance;
select * from v$version;
STATUS$为OPEN时表示数据库处于正常打开状态。如果显示MOUNT,说明数据库还需要手动执行alter database open来打开,不过单机部署默认初始化后就是OPEN状态,很少遇到这种情况。
这里有个安全习惯:SYSDBA默认密码是SYSDBA,安装完成后建议立即修改,修改方式:
sql复制alter user SYSDBA identified by "你的新密码";
有了本地连接成功的经验之后,再测试远程连接。远程连接前检查两件事:端口是否监听、防火墙是否放行。可以用netstat或ss检查:
bash复制ss -lntp | grep 5236
如果端口没有监听,确认服务是否正常启动。如果端口在监听但远程无法访问,大概率是防火墙问题。
4.2 常见部署问题速查表
我把近期部署过程中遇到的高频问题整理成了表格,方便直接对照排查:
| 问题现象 | 可能原因 | 解决思路 |
|---|---|---|
| DMInstall.bin无法执行 | 没有可执行权限 | chmod +x DMInstall.bin |
| 安装时提示权限不足 | 没有使用dmdba用户 | 切换为dmdba用户执行安装 |
| 图形安装界面闪退 | DISPLAY未配置或X11转发异常 | 改用命令行安装 ./DMInstall.bin -i |
| 初始化实例提示目录无效 | /dm8/data未创建或无权限 | mkdir并chown给dmdba用户 |
| 服务启动后立刻退出 | dm.ini配置错误 | 查看log目录下日志定位具体报错 |
| disql连接超时 | 端口未监听或防火墙拦截 | ss -lntp检查端口并调整防火墙 |
| 重启后服务未自动启动 | 未执行systemctl enable | 执行systemctl enable DmServiceDMTEST |
| 连接数超过1000报错 | limits.conf配置未生效 | 重新登录dmdba用户并ulimit -n检查 |
4.3 一份额外的目录权限说明
在服务安装和启动的过程中,建议确认一下/dm8目录的权限设置。达梦8服务启动后,会在安装目录的log子目录下写运行日志,如果目录所有者错误,日志写不进去会导致服务启动失败。安装完成后建议执行一次:
bash复制chown -R dmdba:dinstall /dm8
这个操作可以把整个安装目录的所有权都归到dmdba用户下,避免后续出现奇怪的文件写入问题。
4.4 初始化参数不容易改,请务必提前规划
最后分享一下我认为单机部署中最容易忽略的一点:达梦8的很多初始化参数在建库之前如果没有规划好,后期修改的成本非常高。
例如上面提到的PAGE_SIZE和CHARSET,如果业务已经上线运行,发现页大小配置不合适,就只能通过逻辑导出导入的方式重建库,不能像修改某个配置文件一样直接改。因此我习惯在搭建前先做一个简单评估:数据库大概要存什么类型的数据、是否需要做全文检索、是否有大字段、是否需要从Oracle迁移。把这些判断做完,再设置PAGE_SIZE和CHARSET,后续可以少走很多弯路。
以我个人的实际体验来说,从下载安装包到在Linux 7上跑通一套达梦8单机环境,整个流程大概半小时到一小时,中间大部分时间都花在参数确认和依赖处理上。如果只是想快速评估达梦8的功能特性,建议用PAGE_SIZE=16 CHARSET=1的配置建一个测试实例,实际执行本文的dminit命令即可;如果是正式生产项目,务必在初始化前做一轮详细的参数评审。后续还可以在这套单机环境上部署主备守护集群、读写分离等方案,但那些都是后话了。
