注册
达梦数据库:单机不停机搭建实时备库完整指南
培训园地/ 文章详情 /

达梦数据库:单机不停机搭建实时备库完整指南

🍀 2026/06/15 583 1 0

达梦数据库:单机不停机搭建实时备库完整指南

业务不能停,数据不能丢——这是每一位DBA的底线。
本文将带你一步步完成达梦数据库单机不停机搭建实时备库的全过程,主库业务零影响,备库实时同步,高可用一步到位。

写在前面

传统搭建备库往往需要停主库、拷数据、重配置,对业务影响大。而达梦数据库从版本 03134284393-20250324-265835-20151 开始,支持在线备份 + 实时归档的方式,在主库完全不停机的情况下,搭建出一套完整的实时备库。

本文基于真实环境配置,两台机器(A:主库,B:备库),所有命令均经过验证。跟着做,你也能轻松实现不停机搭建。

1. 环境规划

在动手前,先明确集群规划。以下是本次搭建使用的参数:

配置项 A机器(主库) B机器(备库)
业务IP 172.10.80.81 172.10.80.82
心跳IP(MAL) 192.168.80.81 192.168.80.82
实例名 DMSERVER DMSERVER1
实例端口 15236 15236
MAL端口 15336 15336
MAL守护进程端口 15436 15436
守护进程端口 15536 15536
OGUID 45331234 45331234
守护组 GDW_11 GDW_11
安装目录 /dmdba/dmdbms_1/ /dmdba/dmdbms_1/
数据目录 /dmdba/dmdata1/ /dmdba/dmdata1/
归档目录 /dmdba/dmdata1/DAMENG/arch 同左
备份目录 /dmdba/dmdata1/DAMENG/bak 同左
归档上限 51200 MB 51200 MB

网络要求:业务IP和心跳IP需要互通,建议心跳使用独立网卡,避免业务流量干扰同步。

2. 主库(A机器)准备工作

如果你的主库已经运行中,可以跳过“创建实例”,直接从修改参数开始。

2.1 创建实例(可选)

# 初始化实例 /dmdba/dmdbms_1/bin/dminit PATH=/dmdba/dmdata1/ INSTANCE_NAME=DMSERVER \ PAGE_SIZE=32 LOG_SIZE=2048 PORT_NUM=15236 \ SYSDBA_PWD=Sysdba123 SYSAUDITOR_PWD=Sysdba123 # 注册系统服务(需root) /scripts/root/dm_service_installer.sh -t dmserver -p DMSERVER \ -dm_ini /dmdba/dmdata1/DAMENG/dm.ini

2.2 启动主库,修改关键参数

# 启动数据库 DmServiceDMSERVER start # 连接数据库 disql SYSDBA/Sysdba123@172.10.80.81:15236

执行以下SQL:

-- 开启归档(如已开启可跳过) ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdba/dmdata1/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; ALTER DATABASE OPEN; -- 调整dm.ini参数 SP_SET_PARA_VALUE (1,'DW_INACTIVE_INTERVAL',60); SP_SET_PARA_VALUE (1,'ALTER_MODE_STATUS',0); SP_SET_PARA_VALUE (1,'ENABLE_OFFLINE_TS',2);

2.3 配置 MAL(集群通信链路)

创建 /dmdba/dmdata1/DAMENG/dmmal.ini,内容如下:

MAL_CHECK_INTERVAL = 10 MAL_CONN_FAIL_INTERVAL = 10 MAL_TEMP_PATH = /dmdba/dmdata1/malpath/ MAL_BUF_SIZE = 512 MAL_SYS_BUF_SIZE = 2048 MAL_COMPRESS_LEVEL = 0 [MAL_INST1] MAL_INST_NAME = DMSERVER MAL_HOST = 192.168.80.81 MAL_PORT = 15336 MAL_INST_HOST = 172.10.80.81 MAL_INST_PORT = 15236 MAL_DW_PORT = 15436 MAL_INST_DW_PORT = 15536 [MAL_INST2] MAL_INST_NAME = DMSERVER1 MAL_HOST = 192.168.80.82 MAL_PORT = 15336 MAL_INST_HOST = 172.10.80.82 MAL_INST_PORT = 15236 MAL_DW_PORT = 15436 MAL_INST_DW_PORT = 15536

启用MAL:

SP_SET_PARA_VALUE (1,'MAL_INI',1);

2.4 在线添加实时归档并执行在线备份

-- 添加指向备库的实时归档 ALTER DATABASE ADD ARCHIVELOG 'DEST=DMSERVER1,TYPE=REALTIME'; -- 在线备份(关键步骤!备份期间主库正常读写) BACKUP DATABASE BACKUPSET '/dmdba/dmdata1/DAMENG/bak/BACKUP_FILE';

2.5 配置守护进程 dmwatcher.ini

创建 /dmdba/dmdata1/DAMENG/dmwatcher.ini

[GDW_11] DW_TYPE = GLOBAL DW_MODE = MANUAL # 手动切换模式,生产环境可按需改为自动 DW_ERROR_TIME = 20 INST_ERROR_TIME = 20 INST_RECOVER_TIME = 60 INST_OGUID = 45331234 INST_INI = /dmdba/dmdata1/DAMENG/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /dmdba/dmdbms_1/bin/dmserver RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD= 0

注册守护服务:

/scripts/root/dm_service_installer.sh -t dmwatcher -p Watcher \ -watcher_ini /dmdba/dmdata1/DAMENG/dmwatcher.ini

2.6 修改主库服务启动模式

编辑 DmServiceDMSERVER,将 START_MODE 改为 mount

vi /dmdba/dmdbms_1/bin/DmServiceDMSERVER # 找到 START_MODE=mount

为什么要改成 mount?因为守护进程启动时会自动将实例 open,我们只需确保实例以 mount 方式被守护拉起即可。

3. 备库(B机器)配置

3.1 创建空实例

/dmdba/dmdbms_1/bin/dminit PATH=/dmdba/dmdata1/ INSTANCE_NAME=DMSERVER1 \ PAGE_SIZE=32 LOG_SIZE=2048 PORT_NUM=15236 \ SYSDBA_PWD=Sysdba123 SYSAUDITOR_PWD=Sysdba123

3.2 启动一次实例,修改必要参数

DmServiceDMSERVER1 start disql SYSDBA/Sysdba123@172.10.80.82:15236
ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdba/dmdata1/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; ALTER DATABASE OPEN; SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0); SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2); SP_SET_PARA_VALUE (2,'MAL_INI',1);

修改完成后 停止备库实例(后面会用备份恢复):

DmServiceDMSERVER1 stop

3.3 替换 dmarch.ini(备库专用)

备库的实时归档目标应指向主库。编辑 /dmdba/dmdata1/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdba/dmdata1/DAMENG/arch/ ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE= 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME ARCH_DEST = DMSERVER # 指向主库实例名

3.4 从主库拷贝配置文件和备份

# 拷贝 dmmal.ini 和 dmwatcher.ini(两台机器配置相同) scp /dmdba/dmdata1/DAMENG/dmmal.ini \ /dmdba/dmdata1/DAMENG/dmwatcher.ini \ dmdba@192.168.80.82:/dmdba/dmdata1/DAMENG/ # 拷贝在线备份文件 scp -r /dmdba/dmdata1/DAMENG/bak/BACKUP_FILE \ dmdba@192.168.80.82:/dmdba/dmdata1/DAMENG/bak/

3.5 注册备库服务

# 注册 dmserver,指定以 mount 方式启动 /scripts/root/dm_service_installer.sh -t dmserver -p DMSERVER1 \ -dm_ini /dmdba/dmdata1/DAMENG/dm.ini -m mount # 注册守护进程 /scripts/root/dm_service_installer.sh -t dmwatcher -p Watcher \ -watcher_ini /dmdba/dmdata1/DAMENG/dmwatcher.ini

3.6 使用备份恢复备库

# 还原 dmrman CTLSTMT="RESTORE DATABASE '/dmdba/dmdata1/DAMENG/dm.ini' FROM BACKUPSET '/dmdba/dmdata1/DAMENG/bak/BACKUP_FILE'" # 恢复 dmrman CTLSTMT="RECOVER DATABASE '/dmdba/dmdata1/DAMENG/dm.ini' FROM BACKUPSET '/dmdba/dmdata1/DAMENG/bak/BACKUP_FILE'" # 更新DB_MAGIC dmrman CTLSTMT="RECOVER DATABASE '/dmdba/dmdata1/DAMENG/dm.ini' UPDATE DB_MAGIC"

4. 配置监视器(选做,推荐)

监视器用来查看集群状态、执行切换。在任意一台机器(或第三方)上创建 dmmonitor.ini

MON_DW_CONFIRM = 0 # 非确认监视器,只做观察 MON_LOG_PATH = /dmdba/dmdbms_1/log MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 512 MON_LOG_SPACE_LIMIT = 2048 [GDW_11] MON_INST_OGUID = 45331234 MON_DW_IP = 192.168.80.81:15436 MON_DW_IP = 192.168.80.82:15436

5. 启动集群,见证奇迹

5.1 设置 OGUID 并切换主/备角色

主库(A机器)

disql SYSDBA/Sysdba123@172.10.80.81:15236
SP_SET_OGUID(45331234); ALTER DATABASE PRIMARY FORCE;

备库(B机器)

# 启动备库实例 DmServiceDMSERVER1 start disql SYSDBA/Sysdba123@172.10.80.82:15236
SP_SET_OGUID(45331234); ALTER DATABASE STANDBY;

5.2 启动守护进程(A、B两台机器都要执行)

DmWatcherServiceWatcher start

5.3 启动监视器(前台查看)

dmmonitor /dmdba/dmdbms_1/bin/dmmonitor.ini

在监视器界面输入 show,如果看到主库状态为 OPEN,备库状态为 STANDBY,并且归档状态为 VALID,恭喜你——实时备库搭建成功!

6. 集群启停规范

启动集群
先启动 A、B 两机的守护进程(会自动拉起实例)

DmWatcherServiceWatcher start

停止集群(建议顺序):

  1. 停止 A、B 守护进程
  2. 停止主库实例
  3. 停止备库实例
DmWatcherServiceWatcher stop # 两台 DmServiceDMSERVER stop # 主库 DmServiceDMSERVER1 stop # 备库

最后:几点重要提醒

  1. 版本要求:必须使用 03134284393-20250324-265835-20151 及以上版本,才支持不停机搭建。
  2. 网络:MAL 使用的 IP 必须稳定且互通,建议配置心跳网卡。
  3. 归档空间:主库归档空间要足够,避免因空间不足导致实时同步中断。
  4. 备份一致性:在线备份加上实时归档,备库恢复后会自动追齐主库数据,无需额外操作。
  5. 测试切换:生产环境中,建议先在测试环境演练整个流程,并验证切换逻辑。

搭建实时备库,不必再停机维护。希望这篇指南能帮你顺利完成达梦数据库的高可用部署。如果有任何疑问,欢迎在评论区留言交流。

原文文档基于达梦数据库官方最佳实践整理,经实际环境验证。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服