注册
达梦数据库实时主备部署(保姆级教程)
培训园地/ 文章详情 /

达梦数据库实时主备部署(保姆级教程)

DM_270153 2025/11/20 203 1 0

一、环境准备

准备3台节点,操作系统使用KylinV10SP3,分别作为主库、备库、监控器节点

  • 操作系统

kylin V10 SP3

  • 节点 3台
主机名 ip 作用
DWP 10.47.70.2 主库
DWSI 10.47.70.9 备库
DWM 10.47.70.26 监控器

操作系统初始配置

1.配置主机名

分别配置主库、备库、监视器节点的主机名

[root@DWP ~]#hostnamectl set-hostname DWP
[root@DWSI ~]#hostnamectl set-hostname DWSI
[root@DWM ~]#hostnamectl set-hostname DWM

2.添加仓库为本地yum源

说明:我的测试服务器在内网环境中,无法上网,配置了本地yum仓库,需要配置本地yum仓库

3个节点操作一样

3.关闭防火墙

3个节点操作一样

[root@DWP ~]#systemctl stop firewalld [root@DWP ~]#systemctl disable firewalld

4.配置命令提示符

三个节点操作一样

[root@DWP ~]#tail -1 /etc/profile export PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]#" [root@DWP ~]#

5.配置/etc/hosts文件

10.47.70.2 node1 10.47.70.9 node2 10.47.70.26 node3

6.拍快照

建议配置完初始化环境后,拍初始化快照,方便在测试环境中回滚练习

二、安装数据库

三台机器都需要安装DM,安装路径为'/dm',执行程序保存在'/dm/bin'目录中,数据存放路径为'/dm/data'。

规划用户

三个节点操作一样

[root@DWP ~]#groupadd dinstall [root@DWP ~]#useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba [root@DWP ~]#id dmdba uid=1001(dmdba) gid=1001(dinstall) groups=1001(dinstall) [root@DWP ~]#passwd dmdba Changing password for user dmdba. New password: jason123.com Retype new password: jason123.com passwd: all authentication tokens updated successfully.

规划安装目录

三个节点操作一样

[root@DWP ~]#mkdir /dm [root@DWP ~]#chown dmdba:dinstall /dm [root@DWP ~]#ll -d /dm drwxr-xr-x 2 dmdba dinstall 6 Nov 4 16:24 /dm

下载dm8软件包

浏览器下载,然后上传到虚拟机/opt目录下

三个节点操作一样

软件包下载链接:

https://eco.dameng.com/info/products/dm8
image20251118165106367.png

数据库版本说明:

#./disql -id DM Database 64 V8 03134284404-20250930-295335-20164
[root@DWP ~]#cd /opt [root@DWP /opt]#ll total 935212 -rw-rw-rw- 1 root root 957655040 Oct 24 16:41 dm8_20251016_x86_rh7_64.iso
[root@DWP /opt]#mkdir /mnt/dm [root@DWP /opt]#mount dm8_20251016_x86_rh7_64.iso /mnt/dm mount: /mnt/dm: WARNING: source write-protected, mounted read-only. [root@DWP /opt]#cd /mnt/dm [root@DWP /mnt/dm]#ll total 935149 -r-xr-xr-x 1 root root 2967103 Jul 18 18:07 'DM8 Install.pdf' -r-xr-xr-x 1 root root 954624144 Oct 16 16:22 DMInstall.bin

安装dm8

使用命令行方式

注意使用dmdba用户安装

三个节点操作一样

[root@DWP /mnt/dm]#su - dmdba [dmdba@DWP ~]#cd /mnt/dm [dmdba@DWP /mnt/dm]#ll total 935149 -r-xr-xr-x 1 root root 2967103 Jul 18 18:07 'DM8 Install.pdf' -r-xr-xr-x 1 root root 954624144 Oct 16 16:22 DMInstall.bin [dmdba@DWP /mnt/dm]#./DMInstall.bin -i Installer Language: [1]: 简体中文 [2]: English Please select the installer's language [2]:1 ... 是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n ... 是否设置时区? (Y/y:是 N/n:否) [Y/y]:y ... 请选择时区 [21]:21 ... 请选择安装类型的数字序号 [1 典型安装]:1 ... 请选择安装目录 [/home/dmdba/dmdbms]:/dm ... 是否确认安装路径(/dm)? (Y/y:是 N/n:否) [Y/y]:y ... 安装前小结 安装位置: /dm 所需空间: 1783M 可用空间: 43G 版本信息: 有效日期: 安装类型: 典型安装 是否确认安装? (Y/y:是 N/n:否):y ... 请以root系统用户执行命令: /dm/script/root/root_installer.sh 安装结束 [dmdba@DWP /mnt/dm]#

root执行命令

三个节点操作一样

[dmdba@DWP /mnt/dm]#su - root Password: Last login: Tue Nov 4 16:40:58 CST 2025 from 10.47.70.70 on pts/0 [root@DWP ~]#/dm/script/root/root_installer.sh

三、创建数据库实例

主备两个节点需要创建实例,监控器只安装数据库,不需要创建实例

主备库的实例名建议采用“组名_守护环境 _序号”的方式命名,方便按组区分不同实 例,注意总长度不能超过 16。本示例中组名为“GRP1”,配置为实时主备,主库命名为 “GRP1_RT_01”,备库命名为“GRP1_RT_02”。

主库 GRPI_RT_01
备库 GRPI_RT_02
监控器 不需要实例

dminit创建实例

需要主备库都部署,下面以主库为例,方式一样

DW_P 机器上初始化主库至目录/dm/data

DW_S1 机器上初始化备库至目录/dm/data

#主库 [dmdba@DWP /dm/bin]#./dminit path=/dm/data port_num=5236 db_name=GRPI_RT_01 instance_name=DMSVR SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 [root@DWP ~]#cd /dm/script/root [root@DWP /dm/script/root]#./dm_service_installer.sh -t dmserver -p DMTESTSVR -dm_ini /dm/data/GRPI_RT_01/dm.ini Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMTESTSVR.service → /usr/lib/systemd/system/DmServiceDMTESTSVR.service. 创建服务(DmServiceDMTESTSVR)完成 #从库 ./dminit path=/dm/data port_num=5236 db_name=GRPI_RT_02 instance_name=DMSVR SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 ./dm_service_installer.sh -t dmserver -p DMTESTSVR -dm_ini /dm/data/GRPI_RT_02/dm.ini

拍快照

主备库实例创建成功

四、数据准备

配置数据守护 V4.0 之前,必须先通过备份还原方式同步各数据库的数据,确保各数据 库的数据保持完全一致。

如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据, 如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数 据。

两种方式都需要服务器配置本地归档

本地归档配置

主备两个节点都执行

dm.ini

[dmdba@DWP ~]#cd /dm/data/GRPI_RT_01/ [dmdba@DWP /dm/data/GRPI_RT_01]#ll total 8661092 drwxr-xr-x 2 dmdba dinstall 6 Nov 4 16:56 bak drwxr-xr-x 2 dmdba dinstall 42 Nov 4 16:57 ctl_bak -rw-r--r-- 1 dmdba dinstall 5632 Nov 4 16:57 dm.ctl -rw-r--r-- 1 dmdba dinstall 85024 Nov 4 16:57 dm.ini -rw-r--r-- 1 dmdba dinstall 633 Nov 4 16:57 dm_service.prikey -rw-r--r-- 1 dmdba dinstall 4294967296 Nov 4 16:57 GRPI_RT_0101.log -rw-r--r-- 1 dmdba dinstall 4294967296 Nov 4 16:57 GRPI_RT_0102.log drwxr-xr-x 2 dmdba dinstall 6 Nov 4 16:57 HMAIN -rw-r--r-- 1 dmdba dinstall 134217728 Nov 4 16:57 MAIN.DBF -rw-r--r-- 1 dmdba dinstall 134217728 Nov 4 16:57 ROLL.DBF -rw-r--r-- 1 dmdba dinstall 714 Nov 4 16:57 sqllog.ini -rw-r--r-- 1 dmdba dinstall 10485760 Nov 4 16:57 SYSTEM.DBF [dmdba@DWP /dm/data/GRPI_RT_01]#vim dm.ini ARCH_INI = 1 #打开归档配置

/dm/data/GRPI_RT_01/dmarch.ini

默认没有这个文件,vim自动创建

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm/data/GRPI_RT_01/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M

需要重启数据库才能生效,否则直接备份会报错

脱机备份,脱机还原方式

1.脱机备份

主库操作

[dmdba@DWP /dm/bin]#./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/GRPI_RT_01/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm/data/BACKUP_FILE_01'"

拷贝备份文件到备库

[root@DWP ~]#scp -r /dm/data/BACKUP_FILE_01/ node2:/dm/data/

2.脱机数据库还原和恢复

数据库还原

[dmdba@DWSI /dm/bin]#./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/GRPI_RT_02/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'" dmrman V8 RESTORE DATABASE '/dm/data/GRPI_RT_02/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01' file dm.key not found, use default license! [Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00] restore successfully. time used: 00:00:02.785

因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤。

数据库更新:

[dmdba@DWSI /dm/bin]#./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/GRPI_RT_02/dm.ini' UPDATE DB_MAGIC" dmrman V8 RECOVER DATABASE '/dm/data/GRPI_RT_02/dm.ini' UPDATE DB_MAGIC file dm.key not found, use default license! recover successfully! time used: 00:00:01.250 [dmdba@DWSI /dm/bin]#

拍快照:数据准备完毕

五、配置数据库

配置主库

/dm/data/GRP1_RT_01/dm.ini

​ dm.ini是DM数据库配置文件,配置主库的实例名为GRP1_RT_01 ,指定监听端口,打开MAL系统的参数修改如下

#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16 INSTANCE_NAME = GRP1_RT_01 PORT_NUM = 5236 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

/dm/data/GRPI_RT_01/dmmal.ini

​ 注意:配置MAL系统时,主备库的配置必须完全一致,MAL_HOST使用内部网络,MAL_PORT与dm.ini中PORT_NUM使用不同的端口值,MAL_DW_PORT 是各实 例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = GRPI_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.47.70.2 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 10.47.70.2 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = GRPI_RT_02 MAL_HOST = 10.47.70.9 MAL_PORT = 61142 MAL_INST_HOST = 10.47.70.9 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142

/dm/data/GRPI_RT_01/dmarch.ini

​ 修改dmarch.ini,配置本地归档和实时归档

[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = GRPI_RT_02 #实时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm/data/GRPI_RT_01/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M

/dm/data/GRPI_RT_01/dmwatcher.ini

​ 修改dmwatcher.ini配置守护进程,配置为全局守护类型,使用自动切换模式。

[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /dm/data/GRPI_RT_01/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

启动主库

​ 以mount方式启动

/dm/data/GRPI_RT_01/dm.ini

配置备库

dm.ini

​ dm.ini是DM数据库配置文件,配置备库的实例名为GRP1_RT_02,指定监听端口,打开MAL系统的参数修改如下

INSTANCE_NAME = GRP1_RT_02 PORT_NUM = 5238 #数据库实例监听端口 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置

dmmal.ini

​ 注意:配置MAL系统时,主备库的配置必须完全一致,MAL_HOST使用内部网络,MAL_PORT与dm.ini中PORT_NUM使用不同的端口值,MAL_DW_PORT 是各实 例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:

与主库一致

dmarch.ini

​ 修改dmarch.ini,配置本地归档和实时归档

[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = GRP1_RT_01#实时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm/data/DAMENG/arch #本地归档文件路径

dmwatcher.ini

​ 配置守护进程,配置为全局守护类型,使用自动切换模式

DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式

启动备库

/dm/data/GRPI_RT_02/dm.ini

设置OGUID

​ 启动命令行工具 DIsql,登录备库设置 OGUID 值为 453331

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>SP_SET_OGUID(453331); SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

设置备库为standby模式

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>ALTER DATABASE STANDBY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

六、配置单实例监视器

dmmonitor.ini

​ 其中 MON_DW_IP 中的 IP 和 PORT 和 dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = MON_DW_IP =

七、启动

启动守护进程

启动各个主备库上的守护进程

./dmwatcher /dm/data/GRPI_RT_01/dmwatcher.ini ./dmwatcher /dm/data/GRPI_RT_02/dmwatcher.ini

启动监视器

./dmmonitor /dm/data/dmmonitor.ini

至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下, 在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都 处于 Open 状态,即为正常运行状态。

主备验证

1.验证主备同步

启动之后,使用普通监视器查看集群是否正常

cp dmmonitor.ini dmmonitro_pt.ini /dmmonitor dmmonitro_pt.ini 进入后使用show即可查看集群状态

向主库中插入数据,验证备库数据是否同步

CREATE TABLE table1 ( id INT, age INT, name VARCHAR(50) ); INSERT INTO table1 (id, age, name) VALUES (1, 18, 'jason');

2.验证自动切换

模拟主机数据库进程被杀死,查看故障切换情况

ps -ef|grep dmserver

kill -9 pid

监视器接收到主库GRP1_RT_01故障信息,守护进程检测到GRP1_RT_01数据库进程挂掉,监视器开始接管集群,将备库

GRP1_RT_02切换为primary,切换后数据库正常工作。

通过show查看主备切换情况

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服