Centos7部署多个达梦数据库(V8版本)
1 环境准备
在默认安装流程下,若在同一台服务器上重复安装达梦数据库,系统会提示存在重复实例,并要求先卸载旧版本再安装新版本。为实现多实例部署,需采用以下定制化安装方法。
-
如果是首次安装,请参考达梦官方 DM8 安装手册 完成首次安装流程。
-
专用系统用户管理
- 避免使用 root 用户:为降低系统安全风险及权限冲突,建议创建专用系统用户执行安装及后续操作。
- 示例用户:首次安装时创建的
dmdba
用户(或自定义用户)可作为后续安装的通用用户。
多实例部署核心原则,每个实例需配置独立的安装路径、数据目录及端口号。
1.1 服务器信息查询
根据服务器的系统信息和硬件架构下载对应的安装包。
# centos版本信息存储在/etc/centos-release文件中
cat /etc/centos-release
# 查看系统综合信息,包括硬件架构。
hostnamectl
1.2 查询已部署的达梦数据库
先检查本机已经部署的版本相关信息。
# 查询达梦服务,如果没有注册为系统服务,以下命令不生效。
systemctl status DmServiceDMSERVER
# 如果没有注册系统服务的话,可以考虑查询达梦数据的进程
ps -ef | grep dmserver
# 如果数据库并没有启动,可以查询安装目录
# 通过find命令查找,相关的文件夹
find / -name dmserver 2>/dev/null
# 查找达梦数据库的配置文件
find / -name dm.ini 2>/dev/null
# 检查监听的端口(需要事先知道数据库的端口号)
sudo lsof -i -P -n | grep 5237
# 如果事先不知道数据库的端口号,找到安装目录下的dm.ini文件,通过查询PORT_NUM获取。
2 安装数据库
2.1 规划目录
# 新建安装目录
mkdir -p /db/dm8
# 新建数据目录,数据库实例指定的路径
mkdir -p /db/dm8/data
# 新建临时目录,存放安装包解压的内容,安装完成后可以删除
mkdir -p /db/dm8/tmp
2.2 安装数据库软件
需要注意的是,这里是在一台已经安装了达梦数据库的机器上,再安装一个达梦数据库,通过不同的端口访问。如果按照正常的安装流程,安装过程中会提示卸载旧版本。
2.2.1 挂载镜像
将安装包(dm8_20250122_x86_rh7_64.iso)上传至/db/dm8/packages目录下,这里挂载镜像的目的是为了从iso中提取达梦数据库的安装文件。
# 挂载镜像 mount /xx.iso /mnt,具体参考以下例子
mount /db/dm8/packages/dm8_20250122_x86_rh7_64.iso /mnt
# 拷贝镜像中的二进制文件到新建的tmp目录
cp /mnt/DMInstall.bin /db/dm8/tmp
2.2.2 执行安装
# 进入tmp目录
cd /db/dm8/tmp/
# 执行安装文件
./DMInstall.bin -i
如果提示旧版本已存在的情况,则执行ctrl+c取消。
2.2.3 复制安装文件
以上的操作主要是为了从bin文件中提取数据库的安装文件,会解压到系统的临时目录中,注意不是我们自己建的tmp目录。
# 进入系统的临时目录,获取达梦数据库解压后的安装文件
cd /tmp/DMInstall
# 将source拷贝到我们的安装目录下
cp -frv source /db/dm8/
# 重命名为dmdbms
mv source dmdbms
# 需要将dm8这个目录的用户组调整一下,由于是新增达梦数据库实例,dmdba(用户)和dinstall(用户组)首次初始化的时候已经存在,参考官网首次安装达梦数据的配置
chown -R dmdba:dinstall dm8
2.2.4 初始化数据库实例
如果是首次安装,执行DMInstall.bin的时候,会自动执行dminit。由于这里是同一台机器上安装第二份达梦数据库,因此需要手动执行dminit。以下为常用的配置项:
PATH=/path/to/dmdb/
:指定数据库实例文件的存储路径。例如实例名称指DB_NAME=xfdb,那么在这个目录下会生成一个xfdb的目录,存放相关的文件信息。DB_NAME=your_db_name
:指定数据库的名称。SYSDBA_PWD=your_password
:设置系统管理员(SYSDBA)的密码。SYSAUDITOR\_PWD=your\_password
:初始化时设置 SYSAUDITOR 的密码,不允许缺省。密码为字符串,必须同时包含大写字母、小写字母、数字,不允许与用户名重名,密码长度须大于或等于 INI 参数 PWD_MIN_LEN 所设定的值且小于 48,关于参数 PWD_MIN_LEN 的详细说明请参考《DM8 系统管理员手册》。EXTENT_SIZE=32
:数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值范围 16、32、64。单位:页数。缺省值为 16。可选参数。PAGE_SIZE=32
:设置数据页的大小,常见选项包括4K
、8K
、16K
、32K
。CASE_SENSITIVE=Y
:设置是否大小写敏感(Y
表示大小写敏感,N
表示不敏感)。PORT_NUM=5236
:端口号,缺省值为5236。CHARSET=1
:字符集选项。取值范围 0、1、2。0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。缺省值为 0。可选参数。
# 进入数据库安装目录的bin目录下,执行dminit初始化实例
cd /db/dm8/dmdbms/bin
# 常用用法举例:dminit PATH=/path/to/dmdb/ DB_NAME=your_db_name SYSDBA_PWD=your_password PAGE_SIZE=16K LOG_SIZE=512M CASE_SENSITIVE=Y
# 执行dminit命令
./dminit PATH=/db/dm8/data DB_NAME=dmdb SYSDBA_PWD=SysDba123 SYSAUDITOR_PWD=SysAuditor123 PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=Y PORT_NUM=5238
执行成功后的,输出以下的内容:
2.2.5 端口号开放
# 查询防火墙是否启动
systemctl status firewalld
# 查询端口号是否已经开放
firewall-cmd --zone=public --query-port=5236/tcp
# 如果端口号没有开放,则需要在防火墙添加端口规则,permanent表示永久开放
firewall-cmd --zone=public --add-port=5236/tcp --permanent
# 重新加载防火墙配置
firewall-cmd --reload
2.2.6 启动数据库
启动数据库的时候需要注意要切换用户,不然后续会有权限的问题。这里使用的是dmdba用户。
# 切换指定用户
su dmdba
# 进入大梦数据的安装目录下的bin目录
cd /db/dm8/dmdbms/bin
# 后台启动,需要指定dm.ini
nohup ./dmserver /db/dm8/dmdbms/bin/dmdb/dm.ini &
# 查询进程,判断是否成功
ps -ef | grep dmserver
2.2.7连接数据库
使用百灵连接,官方下载地址:https://www.sqlark.com/
3 达梦数据库配置校对
3.1 基础信息
查看数据库的版本号以及发行版本,例如开发版,企业版。官方配置参考链接:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage。
数据库配置校对的目的是为了让测试环境尽可能的跟生产环境保持一致。
3.2 安装后不可修改的配置
达梦8在安装之后有一些配置无法修改,这里整理一些相对关键得配置。
-- 数据文件使用的簇大小,单位页
SELECT SF_GET_EXTENT_SIZE() AS "Extent Size" FROM DUAL;
-- 数据文件使用的页大小,单位KB
SELECT SF_GET_PAGE_SIZE() / 1024 AS "Page Size (KB)" FROM DUAL;
-- 大小写是否敏感,取值:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。
SELECT SF_GET_CASE_SENSITIVE_FLAG() AS "Case Sensitive" FROM DUAL;
-- 字符集选项,字符集选项。取值范围 0、1、2。0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。缺省值为 0。
SELECT SF_GET_UNICODE_FLAG() AS "CHARSET" FROM DUAL;
-------------------------------------
-- 完整的查询语句
SELECT
SF_GET_EXTENT_SIZE() AS "Extent Size",
SF_GET_PAGE_SIZE() / 1024 AS "Page Size (KB)",
SF_GET_CASE_SENSITIVE_FLAG() AS "Case Sensitive",
SF_GET_UNICODE_FLAG() AS "CHARSET"
FROM
DUAL;
3.3 GROUP_OPT_FLAG
分组项优化参数开关。GROUP_OPT_FLAG=4须和INI参数PARALLEL_POLICY(非0)搭配使用。官网链接请点击这里。
0:不优化;
1:非MYSQL兼容模式下(即COMPATIBLE_MODE不等于4),支持查询项不是GROUP BY表达式;
2:外层分组项下放到内层派生表中提前分组优化;
4:表示对于多级分区,并行下允许尝试不生成多个AGR操作符;
8:进行哈希分组时,依赖分组项列中的核心项分组列来分组;
16:位图索引覆盖简单分组查询中的所有列时,允许使用位图索引对查询进行优化;
32:进行哈希分组时,对TOP查询进行优化,提前返回指定数量的分组;
64:DMDPC下,对无分组项且含有DISTINCT集函数的查询,允许对集函数参数先进行一次分发处理;
128:尽量使用SAGR+SORT计划实现GROUP;
256:使用新的计算方法计算数据DISTINCT值,新计算方法:(i * j)/max(((i - j) * j/i),1),假设其中i > j, i、j为每列DISTINCT个数;
512:SAGR中的COUNT(DISTINCT)尽量使用优化模式计算;
1024:使用COST_CPU_CALC_HAGR、COST_CPU_CALC_AAGR代替COST_CPU_CALC_ORDER计算操作符#HAGR、#AAGR的代价;
2048:LIST分区只有一个值 HAGR变AAGR,只在DPC环境有效;
4096:在进行分组时根据BLANK_PAD_MODE和SPACE_COMPARE_MODE判断是否忽略后缀空格;
8192:对一级RANGE分区的分区首列没有分组时求MIN/MAX,优化分区裁剪,目前优化暂不支持并行;
16384:对分区表使用FAGR2求COUNT(*)时,不加载字典对象,使用读取系统表直接加载所有叶子表需要的信息优化方式,提升性能;
32768:有分组项和集函数有非分区列的DISTINCT也支持两层分组,只在DPC环境有效。
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
说明:GROUP_OPT_FLAG的默认值是60,在上述的选项中并没有关于60的描述。
-- 查询GROUP_OPT_FLAG参数值
SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME in ('GROUP_OPT_FLAG');
如果有需要,可以修改GROUP_OPT_FLAG的值。
- 修改配置文件dm.ini中的值,然后重启数据库服务。
- 通过SQL动态修改:
ALTER SYSTEM SET 'GROUP_OPT_FLAG' = <value> SCOPE=BOTH;
重启数据库生效。
3.4 COMPATIBLE_MODE
是否兼容其他数据库模式。0:不兼容,1:兼容SQL92标准,2:部分兼容ORACLE,3:部分兼容MS SQL SERVER,4:部分兼容MYSQL,5:兼容DM6,6:部分兼容TERADATA,7:部分兼容POSTGRES
注:对COMPATIBLE_MODE的修改会影响数据存储和操作结果,修改须慎重;具体可咨询达梦技术服务人员
-- 查询COMPATIBLE_MODE参数值
SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME in ('COMPATIBLE_MODE');
3.5 排序机制
排序机制参数比较多,需要逐个确认。
-- 排序机制相关参数值
SELECT
PARA_NAME,
PARA_VALUE
FROM
V$DM_INI
WHERE
PARA_NAME in ('SORT_FLAG', 'SORT_ADAPTIVE_FLAG', 'SORT_BUF_SIZE', 'SORT_BUF_GLOBAL_SIZE', 'SORT_BLK_SIZE', 'SORT_BUF_SINGLE_SIZE');
以下是排序相关的参数,更多参数参考官方说明文档:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage
字段 | 默认值 | 说明 |
---|---|---|
SORT_FLAG | 1 | 排序机制。 0:原排序机制,普通排序方式,按照排序缓冲区SORT_BUF_SIZE大小获取数据,并进行排序; 1:新排序机制,大内存排序方式,将大内存排序缓冲区SORT_BUF_GLOBAL_SIZE按照内存片大小SORT_BLK_SIZE进行分片,并对每个内存片进行排序,再对整个大内存排序缓冲区的数据进行排序; 2:采用SORT_FLAG为0的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序; 3:采用SORT_FLAG为1的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序 |
SORT_ADAPTIVE_FLAG | 0 | |
SORT_BUF_SIZE | 20 | 原排序机制下(SORT_FLAG=0),排序缓存区最大值,单位MB。取值范围1~2048 |
SORT_BUF_GLOBAL_SIZE | 1000 | 新排序机制下(SORT_FLAG=1),排序全局内存使用上限,单位MB。取值范围10~4294967294。该值须大于SORT_BUF_SIZE的值,否则会在重启时被重置为SORT_BUF_SIZE两倍和100之间的最大值 |
SORT_BLK_SIZE | 1 | 新排序机制下(SORT_FLAG=1)对数据进行排序的排序缓冲区分片大小,单位MB。取值范围1~50。 SORT_BLK_SIZE一般不需要设置太大,该内存片大小能容纳1万至5万行待排序的数据即可。该值须小于等于SORT_BUF_SIZE,否则会在重启时被重置为SORT_BUF_SIZE。为了保证归并排序的效率,对于大内存排序缓冲区的总的分片个数系统上限为10000个,因此,当SORT_BUF_GLOBAL_SIZE足够大的时候,为了保证大内存排序缓冲区能容纳足够多的数据,需要适当调大SORT_BLK_SIZE。例如,当SORT_BLK_SIZE为1时,SORT_BUF_GLOBAL_SIZE的最大可用值为10000。如果SORT_BUF_GLOBAL_SIZE需要20000M可用空间排序时,需要设置SORT_BLK_SIZE最小为2 |
SORT_BUF_SINGLE_SIZE | 10000 |