从OS环境准备到数据库安装、初始化、归档配置全流程实操记录
| 操作系统 | CPU架构 | 数据库版本 | 虚拟机配置 |
|---|---|---|---|
| Kylin V10 SP3 | x86_64 | DM8 8.1.5.8 | 2C/4G/100G |
本文记录了在麒麟V10(Kylin Linux Advanced Server V10 SP3)操作系统上,从零开始搭建达梦DM8数据库单机环境的完整过程。涵盖操作系统环境准备、系统参数优化、数据库软件安装、实例初始化、服务注册、归档配置以及安装后的配置检查。
| 项目 | 版本/文件名 | 说明 |
|---|---|---|
| 操作系统ISO | Kylin-Server-V10-SP3-2403-Release-20240426-X86_64.iso | 4.37 GB,从麒麟官网下载 |
| 数据库介质 | dm8_20260428_x86_kylin10_sp3_64.iso | 需根据OS版本和CPU架构选择对应版本 |
| 数据库版本号 | dm8_20260428_x86_kylin10_sp3_64_ent_8.1.5.8 | 企业版 |
麒麟V10 ISO下载地址:https://www.kylinos.cn/support/trial/download/ ,选择对应架构版本即可。
# 操作系统版本
[root@dm-wangjh ~]# cat /etc/os-release
PRETTY_NAME="Kylin Linux Advanced Server V10 (Halberd)"
# 内核版本
[root@dm-wangjh ~]# uname -r
4.19.90-89.11.v2401.ky10.x86_64
# CPU型号
[root@dm-wangjh ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
2 Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz
# 内存
[root@dm-wangjh ~]# free -g
total used free shared buff/cache available
Mem: 2 0 2 0 0 2
Swap: 7 0 7
数据库安装前的操作系统环境检查与优化是保证数据库稳定运行的基础。以下按照达梦数据库上线规范,逐项进行检查和配置。
生产环境必须采用时钟同步方式保证服务器间时间一致。推荐使用 chrony 服务。
# 编辑 chrony 配置
vi /etc/chrony.conf
server 10.10.47.245 iburst
driftfile /var/lib/chrony/drift
makestep 10 3
# 重启并设置开机启动
systemctl restart chronyd.service
systemctl enable chronyd.service
# 验证时间
date
⚠️ 注意:数据库运行时禁止执行
hwclock -w写入硬件时钟操作,否则可能导致数据一致性问题。
数据库服务器建议关闭防火墙,或添加端口策略开放数据库监听端口。
# 查看防火墙状态
systemctl status firewalld
# 临时关闭
systemctl stop firewalld
# 永久关闭(防止自启动)
systemctl disable firewalld
# 如需开放端口(以5236为例)
firewall-cmd --zone=public --add-port=5236/tcp --permanent
firewall-cmd --reload
SELinux可能对数据库运行产生不确定影响,建议永久关闭。
# 临时关闭
setenforce 0
# 永久关闭:修改配置文件
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证
grep '^SELINUX=' /etc/selinux/config
# 输出: SELINUX=disabled
修改永久关闭后必须重启服务器才能生效,且关闭后无法通过
setenforce 1临时打开。
在麒麟V10系统上,通过修改GRUB引导参数关闭NUMA。
# 1. 查看NUMA状态
cat /proc/sys/vm/zone_reclaim_mode
# 0表示已关闭
# 2. 修改GRUB配置,添加 numa=off
vi /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 行末尾追加 numa=off
# 3. 判断是UEFI还是BIOS引导
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
# 4. 重新生成grub.cfg
# BIOS引导执行:
grub2-mkconfig -o /boot/grub2/grub.cfg
# 5. 重启操作系统
reboot
# 6. 验证
cat /proc/cmdline
# 输出中应包含 numa=off
# 1. 查看当前状态
cat /sys/kernel/mm/transparent_hugepage/enabled
# [always] madvise never 表示已启用透明大页
# 2. 修改GRUB配置,添加 transparent_hugepage=never
vi /etc/default/grub
# GRUB_CMDLINE_LINUX 行末尾追加 transparent_hugepage=never
# 3. 重新生成grub.cfg并重启
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
# 4. 验证(重启后)
cat /sys/kernel/mm/transparent_hugepage/enabled
# always madvise [never] 表示已禁用透明大页
数据库系统对响应延迟敏感,使用Swap代替内存会导致性能不可接受。内存充裕时(128G以上)建议直接关闭。
# 临时关闭
swapoff -a
# 永久关闭:注释fstab中的swap行
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 重启生效后确认
free -m
麒麟V10 SP1需要检查并设置 RemoveIPC=no,否则可能导致数据库用户的IPC资源被清理。
# 检查
systemctl show systemd-logind | grep -i removeipc
# 修改 /etc/systemd/logind.conf
vi /etc/systemd/logind.conf
# 去掉#注释,将 RemoveIPC=yes 改为 RemoveIPC=no
# 重启服务
systemctl daemon-reload
systemctl restart systemd-logind
# 确认
systemctl show systemd-logind | grep -i removeipc
# RemoveIPC=no
为方便后期运维问题分析,建议安装以下工具包:
yum install -y sysstat perf gdb strace tar nc telnet net-tools \ libaio libaio-devel tcpdump traceroute unixODBC unixODBC-devel \ java vim nmon iotop ethtool
确保 limits.conf 配置能被PAM模块正确加载:
vi /etc/pam.d/login
# 添加以下两行:
session required /lib64/security/pam_limits.so
session required pam_limits.so
数据库的归档、备份和数据应分开存储,避免磁盘写入冲突,便于监控空间,减少误删风险。
| 挂载点 | 用途 | 文件系统 | 说明 |
|---|---|---|---|
| /dm8 | 数据库软件及数据 | xfs | 独立LVM逻辑卷 |
| /dm8/arch | 归档日志 | xfs | 建议与数据分盘 |
| NAS/独立盘 | 备份文件 | - | 建议异地备份 |
⚠️ 重要:不要将数据库SQLLOG、归档等文件放在NAS盘进行写入。备份文件可存放到NAS实现异地备份。
# 创建物理卷
pvcreate /dev/sdb
# 创建卷组
vgcreate data_vg /dev/sdb
# 创建逻辑卷(使用全部VG空间)
lvcreate -l 100%VG -n lv_data1 data_vg
# 格式化为xfs
mkfs -t xfs /dev/mapper/data_vg-lv_data1
# 创建挂载点并挂载
mkdir /dm8
mount /dev/mapper/data_vg-lv_data1 /dm8
# 确认
df -h /dm8
使用UUID方式挂载,避免设备名变化导致挂载失败:
# 获取UUID
blkid /dev/mapper/data_vg-lv_data1
# UUID="b39ca1b5-cf3a-4251-af86-b026d6054ff7" TYPE="xfs"
# 写入fstab
vi /etc/fstab
# 添加:
# UUID=b39ca1b5-cf3a-4251-af86-b026d6054ff7 /dm8 xfs defaults 0 0
# 验证挂载配置
mount -a
模拟数据库小数据读写来测试磁盘IO性能:
dd if=/dev/zero of=test bs=8k count=4k oflag=dsync
dd if=/dev/zero of=test bs=16k count=4k oflag=dsync
dd if=/dev/zero of=test bs=32k count=4k oflag=dsync
⚠️ 注意:IO速度低于 20-30 MB/s 时需要发风险告知书给用户。上云项目可使用
fio工具进行更严格的随机读写测试,要求随机读写带宽 ≥ 1GB/s(IOPS ≥ 32000)。
生产环境建议将I/O调度算法设置为 deadline:
# 查看当前调度算法
cat /sys/block/sdb/queue/scheduler
# [mq-deadline] kyber bfq none
# 临时修改
echo deadline > /sys/block/sdb/queue/scheduler
# 永久修改(GRUB参数)
vi /etc/default/grub
# GRUB_CMDLINE_LINUX 行添加 elevator=deadline
grub2-mkconfig -o /boot/grub2/grub.cfg
上线规范推荐使用 XFS 文件系统,优先于 ext4。XFS的优势:
⚠️ XFS注意事项:XFS的LVM不能直接在线缩减空间,因此分区时尽量往小了分,一旦上线,已分配的空间只扩不减。
编辑 /etc/security/limits.conf,添加以下配置:
vi /etc/security/limits.conf
# 通用配置
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
# dmdba用户专用配置
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
dmdba soft memlock unlimited
dmdba hard memlock unlimited
同时赋予 limits.conf 读取权限:
chmod a+x /etc/security chmod a+r /etc/security/limits.conf
通过 systemctl/systemd 管理的服务进程,其资源限制不受 limits.conf 控制,需修改 /etc/systemd/system.conf:
vi /etc/systemd/system.conf DefaultLimitNOFILE=65536 DefaultLimitNPROC=10240 DefaultLimitFSIZE=unlimited DefaultLimitDATA=unlimited DefaultLimitCORE=unlimited DefaultLimitAS=unlimited DefaultLimitNICE=0
⚠️ 注意:保存后需要重启服务器才能生效。可通过
cat /proc/进程号/limits检查实际资源限制是否生效。
vi /etc/sysctl.conf
# 内存分配策略:0表示检查可用内存
vm.overcommit_memory = 0
# swap使用倾向:内存充足时设为10,内存不足时设为1
vm.swappiness = 10
# 最小可用内存(KB),内存≤32G不建议设置
# vm.min_free_kbytes = 1153434
# core文件路径
kernel.core_pattern = /home/dmdba/core/core-%e-%p-%s
# 使配置生效
sysctl -p
当操作系统glibc版本大于2.10时,系统会为数据库线程额外分配内存池,导致VIRT占用过高。设置 MALLOC_ARENA_MAX=1 可禁止此行为。
# 方法一:写入dmdba环境变量
vi /home/dmdba/.bash_profile
export MALLOC_ARENA_MAX=1
# 方法二:写入数据库启动脚本
vim DmServicexxx
export MALLOC_ARENA_MAX=1
💡 提示:从DM8版本8.1.2.94开始,MALLOC_ARENA_MAX已自动加入服务启动脚本DmService中。
# 创建core文件存放目录
mkdir -p /home/dmdba/core
chown -R dmdba.dinstall /home/dmdba/core
# 设置core文件路径
echo "/home/dmdba/core/core-%e-%p-%s" > /proc/sys/kernel/core_pattern
core文件大小与数据库已使用内存基本相当,存储空间需大于服务器内存值。建议设置清理策略,防止撑爆磁盘。
⚠️ 重要规范:
- 禁止使用root用户部署达梦数据库
- dmdba用户密码禁止使用默认值
- 同一项目中所有服务器的dmdba用户、dinstall组的gid和uid必须一致
# 创建安装组
groupadd dinstall -g 2001
# 创建数据库用户
useradd -g dinstall dmdba -u 1001
# 设置密码
passwd dmdba
# 验证
id dmdba
# uid=1001(dmdba) gid=2001(dinstall) 组=2001(dinstall)
# 修改磁盘属主
chown dmdba:dinstall /dm8 -R
chmod 777 /dm8
su - dmdba
vi ~/.bash_profile
export DM_HOME="/dm8/dmdbms"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/dmdbms/bin"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
# 生效
source ~/.bash_profile
# root用户挂载ISO镜像
mount -o loop dm8_20260428_x86_kylin10_sp3_64.iso /mnt
# mount: /mnt: WARNING: source write-protected, mounted read-only.
切换到dmdba用户执行安装程序:
su - dmdba
cd /mnt
./DMInstall.bin -i
安装交互过程如下:
请选择安装语言 [1]: 1 # 简体中文
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]: n
是否设置时区? (Y/y:是 N/n:否) [Y/y]: y
请选择时区 [21]: 21 # GTM+08:00 中国标准时间
请选择安装类型的数字序号 [1 典型安装]: 1
请选择安装目录: /dm8/dmdbms
可用空间: 29G
是否确认安装路径(/dm8/dmdbms)? (Y/y:是 N/n:否) [Y/y]: y
安装过程输出:
[INFO] 安装达梦数据库...
[INFO] 安装 基础 模块...
[INFO] 安装 服务器 模块...
[INFO] 安装 客户端 模块...
[INFO] 安装 驱动 模块...
[INFO] 安装 手册 模块...
[INFO] 安装 服务 模块...
[INFO] 移动日志文件。
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/dm8/dmdbms/script/root/root_installer.sh
# 切回root用户执行
/dm8/dmdbms/script/root/root_installer.sh
# 输出:
# 移动 /dm8/dmdbms/bin/dm_svc.conf 到/etc目录
# 创建DmAPService服务
# 启动DmAPService服务
💡 提示:安装目录路径中只允许使用小写字母、大写字母、数字、下划线、空格和中文。若安装到子目录提示"没有写入权限",需要先对该目录赋予777权限。
使用 dminit 工具初始化数据库实例。大部分初始化参数一经设置即不可调整,需根据实际业务需求谨慎选择。
| 参数 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| PAGE_SIZE | 数据页大小 | 4/8/16/32(K) | 8 |
| LOG_SIZE | 日志文件大小 | 256M~8G | 4096M |
| CHARSET | 字符集 | 0[GB18030]/1[UTF-8]/2[EUC-KR] | 0 |
| CASE_SENSITIVE | 大小写敏感 | Y/N | Y |
| SYSDBA_PWD | SYSDBA密码 | 自定义 | - |
| DB_NAME | 数据库名称 | 自定义 | - |
| INSTANCE_NAME | 实例名称 | 自定义 | DMSERVER |
| PORT_NUM | 监听端口 | 自定义 | 5236 |
| BLANK_PAD_MODE | 结尾空格填充模式 | 1[兼容Oracle]/0[不兼容] | 0 |
cd /dm8/dmdbms/bin
./dminit PATH=/dm8/dmdbms/ \
PAGE_SIZE=16 \
LOG_SIZE=1024 \
CASE_SENSITIVE=y \
SYSDBA_PWD=Dameng123# \
SYSAUDITOR_PWD=Dameng123# \
DB_NAME=DM \
INSTANCE_NAME=DM \
PORT_NUM=5236 \
BLANK_PAD_MODE=1
初始化成功输出:
dminit V8
db version: 0x7000d
file dm.key not found, use default license!
License will expire on 2027-04-14
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dm8/dmdbms/DM/DM01.log
log file path: /dm8/dmdbms/DM/DM02.log
write to dir [/dm8/dmdbms/DM].
create dm database success. 2026-07-24 10:59:53
💡 参数选择建议:
- PAGE_SIZE=16:适用于大多数OLTP业务场景,记录长度不能超过页面大小的一半
- LOG_SIZE=1024:一般应用将REDO日志扩展到2GB即可
- CHARSET=0:默认GB18030,兼容性最好;需支持多语言时选UTF-8
- BLANK_PAD_MODE=1:如需兼容Oracle行为,设置为1
需要使用root用户注册实例启动服务脚本:
su - /dm8/dmdbms/script/root/dm_service_installer.sh \ -t dmserver \ -dm_ini /dm8/dmdbms/DM/dm.ini \ -p DMSERVER
注册成功输出:
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service → /usr/lib/systemd/system/DmServiceDMSERVER.service
创建服务(DmServiceDMSERVER)完成
# 启动实例
[dmdba@dm-wangjh bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
# 关闭实例
[dmdba@dm-wangjh bin]$ ./DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
# 设置开机自启
systemctl enable DmServiceDMSERVER.service
# 关闭开机自启
systemctl disable DmServiceDMSERVER.service
# 查看服务状态
systemctl status DmServiceDMSERVER.service
也可通过 rc.local 方式设置自启动:
vi /etc/rc.d/rc.local
su - dmdba -c "/dm8/dmdbms/bin/DmServiceDMSERVER start"
chmod +x /etc/rc.d/rc.local
ps -ef | grep -i dmdba
# dmap -- 达梦辅助进程
# dmserver -- 数据库服务进程
上线系统必须开启归档,并设置物理备份策略(含清理策略)。归档保存时间建议大于两个全备周期。
mkdir /dm8/arch chown dmdba:dinstall /dm8/arch chmod -R 755 /dm8/arch
-- 1. 查询当前归档状态
SQL> SELECT name, arch_mode FROM v$database;
-- ARCH_MODE=N 表示未开启
-- 2. 开启归档
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG
'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=2048';
SQL> ALTER DATABASE OPEN;
-- 3. 验证归档状态
SQL> SELECT name, arch_mode FROM v$database;
-- ARCH_MODE=Y 表示已开启
SQL> SELECT arch_name, arch_type, arch_dest, arch_file_size, arch_space_limit
FROM v$dm_arch_ini;
行号 ARCH_NAME ARCH_TYPE ARCH_DEST ARCH_FILE_SIZE ARCH_SPACE_LIMIT
---- -------------- --------- --------- -------------- ----------------
1 ARCHIVE_LOCAL1 LOCAL /dm8/arch 1024 2048
SQL执行后会在实例目录下自动生成 dmarch.ini 配置文件:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
数据库安装完成并启动后,需要进行以下检查确保配置符合上线规范。
ps -aux | grep dmserver | awk '{print $5, $6}'
# 第五列为VIRT,第六列为RES
# VIRT应该大于RES,否则异常
cd /dm8/dmdbms/bin
./disql SYSDBA@192.168.17.100:5236
# 输入密码登录
达梦DM8数据库在麒麟V10上的单机搭建可归纳为以下几个阶段:
本文基于实际搭建过程的操作记录整理,参考了《达梦数据库项目上线规范V4.8》《达梦数据库DM8单机搭建实操V1.3》《DM8_dminit使用手册》等文档。在实际生产部署中,还需根据具体业务需求调整初始化参数和系统配置。
文章
阅读量
获赞
