达梦数据库从单主模式转换为主备模式
目录标题
- 达梦数据库单主转主备配置笔记
- 前期准备
- 服务器环境
- 数据库安装
- 磁盘空间
- 流程
- 流程图说明
- 基于脱机备份方式的单实例转主备流程图
- 详细步骤说明
- 详细步骤
- 1. 检查主库归档模式
- 2. 配置主库配置文件
- dm.ini 文件
- dmmal.ini 文件
- dmarch.ini 文件
- 3. 备份主库数据库
- 4. 备库配置
- 新建备库数据库
- 配置备库配置文件
- dm.ini 文件
- 复制主库的 dmmal.ini 和 dmarch.ini 文件
- 5. 恢复备库数据
- 6. 配置主备模式
- 主库
- 备库
- 7. 配置监视器
- 创建监视器配置文件 dmmonitor.ini
- 启动监视器
- 验证主备同步
- 注意事项
达梦数据库单主转主备配置笔记
达梦官方文档 数据守护系统构建

前期准备
安装前准备工作

服务器环境
-
准备至少两台服务器,一台作为主库服务器,另一台作为备库服务器。确保服务器硬件配置满足达梦数据库运行要求,例如有足够的 CPU、内存和磁盘 I/O 性能。
-
保证服务器之间网络连通且稳定,网络延迟应在可接受范围内。开放防火墙所需端口,如 5236(数据库监听)、5266(MAL 通信)、5216(守护进程通信)等。可使用
ping和telnet命令进行网络连通性测试。
ping <目标服务器 IP>
telnet <目标服务器 IP> <端口号>
数据库安装
- 在所有服务器上安装相同版本的达梦数据库,记录好安装目录,如
/dm8。安装过程中可参考官方文档的安装指南,确保安装步骤正确。

磁盘空间
- 为每台服务器规划充足的磁盘空间,用于存储数据库文件、备份文件和日志文件。不同类型的文件建议存放在不同的磁盘分区,以提高 I/O 性能和数据安全性。例如,数据文件存放在数据盘,日志文件存放在日志盘,备份文件存放在备份盘。
流程

流程图说明
基于脱机备份方式的单实例转主备流程图
详细步骤说明
-
开始:检查环境准备
- 确保所有实例使用的DM服务器版本一致。
- 确保各实例所在主机的操作系统位数、大小端模式、时区及时间设置一致。
- 确保使用同一个用户启动DM服务器和守护进程dmwatcher。
2. 初始化主库:在主库机器上初始化数据库。
3. 正常启动主库并正常退出:首次启动主库时,需要先正常启动并正常退出,然后才允许以Mount方式启动。
-
关闭主库:关闭主库,确保主库处于关闭状态,以便进行脱机备份。


-
执行脱机备份:使用脱机备份命令对主库进行备份,生成备份文件。 备份到/opt/dmdbms/bak/master_bak1目录


-
在备库机器上初始化备库:在备库机器上初始化数据库。

-
在备库机器上关闭备库:在备库机器上关闭数据库。

-
拷贝备份文件到备库机器:将备份文件从主库机器拷贝到备库机器的指定目录。 拷贝到POD的/opt/dmdbms/bak/master_bak1/目录

-
执行脱机还原:使用脱机还原命令将备份文件还原到备库。
-
更新备库DB_MAGIC:执行数据库更新操作,更新备库的DB_MAGIC。

-
配置主库相关文件:配置主库的dm.ini、dmmal.ini、dmarch.ini和dmwatcher.ini。

-
以Mount方式启动主库:以Mount方式启动主库。

-
设置主库OGUID:使用命令行工具DIsql设置主库的OGUID值。
守护系统唯一 OGUID 值 -
修改主库数据库模式为Primary:修改主库的数据库模式为Primary。

-
配置备库相关文件:配置备库的dm.ini、dmmal.ini、dmarch.ini和dmwatcher.ini。

-
以Mount方式启动备库:以Mount方式启动备库。

-
设置备库OGUID:使用命令行工具DIsql设置备库的OGUID值。

-
修改备库数据库模式为Standby:修改备库的数据库模式为Standby。

-
配置监视器:配置监视器的dmmonitor.ini。
-
启动主库守护进程:启动主库的守护进程。

-
启动备库守护进程:启动备库的守护进程。

-
启动监视器:启动监视器。
-
完成主备配置:在监视器上执行show命令,检查所有实例和守护进程的状态是否正常。
-
结束
以上流程图和详细步骤涵盖了从单实例数据库到主备数据库的完整搭建过程,重点突出了脱机备份的步骤。
详细步骤
1. 检查主库归档模式
在进行模式转换前,需确保主库已开启归档模式,这样才能将事务日志同步到备库,保证数据一致性。
# 登录主库服务器
# 使用 disql 工具登录主库
disql SYSDBA/密码# 在 disql 中查询归档模式
SELECT arch_mode FROM v$database;

若结果为 Y,表示已开启归档模式;若为 N,则按如下步骤开启:
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 以 mount 方式启动数据库
STARTUP MOUNT;
-- 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 打开数据库
ALTER DATABASE OPEN;
可参考 达梦数据库归档 获取更多归档相关知识。
2. 配置主库配置文件

修改主库的相关配置文件,使主库能与备库进行通信并同步数据。
dm.ini 文件
ps -ef |grep ini
通常位于数据库安装目录下的 data/实例名 目录,进行如下修改:
INSTANCE_NAME = 主库实例名
PORT_NUM = 5236 # 数据库监听端口
DW_INACTIVE_INTERVAL = 60 # 守护进程检测间隔
ALTER_MODE_STATUS = 0 # 不允许在非 mount 状态下修改模式
ENABLE_OFFLINE_TS = 2 # 不允许离线表空间
MAL_INI = 1 # 开启 MAL 系统
ARCH_INI = 1 # 开启归档
修改完成后,可使用 cat 命令检查配置文件内容是否正确。
cat /dm8/data/实例名/dm.ini
dmmal.ini 文件
在数据库安装目录下创建该文件,配置如下:
[MAL_INST1]
MAL_INST_NAME = 主库实例名
MAL_HOST = 主库 IP 地址
MAL_PORT = 5266
MAL_INST_HOST = 主库 IP 地址
MAL_INST_PORT = 5236
MAL_DW_PORT = 5216[MAL_INST2]
MAL_INST_NAME = 备库实例名
MAL_HOST = 备库 IP 地址
MAL_PORT = 5266
MAL_INST_HOST = 备库 IP 地址
MAL_INST_PORT = 5236
MAL_DW_PORT = 5216
注意确保 MAL_HOST 和 MAL_INST_HOST 填写正确的 IP 地址。
dmarch.ini 文件
同样在数据库安装目录下创建,配置如下:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = 备库实例名[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch # 本地归档路径
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 0
确保 ARCH_DEST 路径存在且有足够的磁盘空间。
3. 备份主库数据库
使用 dmrman 工具对主库数据进行全量备份,以便将其恢复到备库。
# 登录主库服务器
# 启动 dmrman 工具
./dmrman# 在 dmrman 中执行全量备份命令
BACKUP DATABASE FULL TO 备份名 BACKUPSET '备份路径';
# 示例
BACKUP DATABASE FULL TO my_backup BACKUPSET '/dm8/backup/my_backup';
备份过程中可监控备份进度和磁盘空间使用情况。
检查备份集可用性
实操
runuser -l dmdba -c cd /opt/dmdbms/bin && ./dmrman CTLSTMT="BACKUP DATABASE '/opt/dmdbms/dmdata/DAMENG/dm.ini' FULL TO master_bak1 BACKUPSET '/opt/dmdbms/bak/master_bak1'


4. 备库配置
新建备库数据库
可使用达梦数据库的初始化工具 dminit 来创建备库数据库。
# 登录备库服务器
# 执行初始化命令
./dminit PATH=/dm8/data DB_NAME=备库数据库名 INSTANCE_NAME=备库实例名 PORT_NUM=5236
根据实际情况调整 PATH、DB_NAME 和 INSTANCE_NAME 等参数。
配置备库配置文件
修改备库的相关配置文件,使其与主库配置相匹配。
dm.ini 文件
修改内容与主库类似,但实例名使用备库的。
INSTANCE_NAME = 备库实例名
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
复制主库的 dmmal.ini 和 dmarch.ini 文件
将主库的 dmmal.ini 和 dmarch.ini 文件复制到备库的相同目录下。
scp 主库服务器:/dm8/dmmal.ini /dm8/
scp 主库服务器:/dm8/dmarch.ini /dm8/
实操




5. 恢复备库数据
将主库的备份文件复制到备库服务器,然后使用 dmrman 工具进行数据恢复。
# 登录备库服务器
# 复制备份文件
scp 主库服务器:备份路径/* /dm8/backup/# 启动 dmrman 工具
./dmrman# 在 dmrman 中执行全量恢复命令
RESTORE DATABASE '/dm8/data/备库实例名/dm.ini' FROM BACKUPSET '备份路径';
# 示例
RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/my_backup';# 执行恢复归档日志命令
RECOVER DATABASE '/dm8/data/备库实例名/dm.ini' WITH ARCHIVED LOG;# 执行更新数据库魔数命令
RECOVER DATABASE '/dm8/data/备库实例名/dm.ini' UPDATE DB_MAGIC;
恢复过程中可能会耗时较长,需耐心等待。
实操
/bin/sh /opt/dmdbms/bin/DmAPService start
runuser -l dmdba -c cd /opt/dmdbms/bin && ./dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/bak/master_bak1/'runuser -l dmdba -c cd /opt/dmdbms/bin && ./dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/bak/master_bak1/'runuser -l dmdba -c cd /opt/dmdbms/bin && ./dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"

》扩展:emptyDir 说明
kubernetes.io~empty - dir 表示这是一个 emptyDir 类型的卷
https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

volumes 目录用于存储 Pod 使用的各种卷的数据




6. 配置主备模式
主库
启动主库实例并将其切换到 open 状态。
# 启动主库实例
./dmserver /dm8/data/主库实例名/dm.ini mount
# 示例
./dmserver /dm8/data/DAMENG/dm.ini mount# 使用 disql 登录主库
disql SYSDBA/密码# 在 disql 中执行以下命令将主库切换到 open 状态
ALTER DATABASE OPEN;

备库
启动备库实例并将其切换到 standby 状态。
# 启动备库实例
./dmserver /dm8/data/备库实例名/dm.ini mount
# 示例
./dmserver /dm8/data/DAMENG/dm.ini mount# 使用 disql 登录备库
disql SYSDBA/密码# 在 disql 中执行以下命令将备库切换到 standby 状态
ALTER DATABASE STANDBY;

7. 配置监视器
监视器用于监控主备库的状态,确保主备模式正常运行。
创建监视器配置文件 dmmonitor.ini
内容如下:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/log # 监视器日志路径
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0[GRP1]
MON_INST_OWNER = GRP1
MON_INST_NAME = 主库实例名
MON_DW_IP = 主库 IP 地址:5216[GRP1]
MON_INST_OWNER = GRP1
MON_INST_NAME = 备库实例名
MON_DW_IP = 备库 IP 地址:5216
启动监视器
./dmmonitor /dm8/dmmonitor.ini
验证主备同步
# 登录主库
disql SYSDBA/密码# 在主库上创建一个测试表并插入数据
CREATE TABLE test_table (id INT, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'test');
COMMIT;# 登录备库
disql SYSDBA/密码# 在备库上查询测试表
SELECT * FROM test_table;
若能在备库上查询到主库插入的数据,表明主备同步配置成功。
注意事项
- 操作前务必备份好所有相关数据,防止数据丢失。可定期进行全量备份和增量备份。
- 确保主备库之间网络连通,防火墙允许相应端口通信。定期检查网络状态和防火墙配置。
- 仔细检查配置文件参数,避免因参数错误导致配置失败。配置修改后,可使用工具进行语法检查。
- 监控数据库运行状态和性能指标,如 CPU 使用率、内存使用率、磁盘 I/O 等,及时发现并处理异常情况。
相关文章:
达梦数据库从单主模式转换为主备模式
目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明基于脱机备份方式的单实例转主备流程图详细步骤说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建…...
【Elasticsearch】nested聚合
在 Elasticsearch 中,嵌套聚合(nestedaggregation)的语法形式用于对嵌套字段(nestedfields)进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型,用于存储数组中的对象,这些对象需要独…...
虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!
不拆发动机、不测缸压,只测个电流也能知道哪个缸压缩有问题?没错!做个相对压缩测试,测下起动电流就行,简单又实用!今天,从原理到方法,几分钟教会你! 我们都知道…...
【玩转全栈】--创建一个自己的vue项目
目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架,旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念,使得开发者可以通过声明式的方式轻松管理数据和…...
基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题
前言(一些废话) 在看这篇文章的各位大佬,感谢你们留出几分钟时间,来看这个产品介绍,其实重点说实话,不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题,希望大佬们能给出一些建议。万…...
< 自用文儿 > 下载 MaxMind GeoIP Databases 对攻击的 IP 做 地理分析
起因 两个 VPM/VPS,安装了 fail2ban 去拦截密码穷举攻击。每天的记录都在增长,以前复制屏幕输出就行,一屏的内容还容易粘贴出来的。昨天已经过 500 条,好奇 fail2ban 是如何存储这些内容的?就发现它在使用 SQLite3 数…...
前端知识速记:重绘和回流
前端知识速记:重绘和回流 一、什么是重绘与回流 1. 重绘(Repaint) 重绘是指当元素的外观发生变化时,浏览器需要重新绘制这些元素。由于这些操作不会改变元素占据的空间,因此不需要进行回流。常见的重绘操作包括&…...
webrtc peerconnection_client peerconnection_server 连接失败问题解决 win10 win11
0 常见问题 (1) webrtc peerconnection_client 连接 peerconnection_server 无连接列表 (2)连接导致崩溃debug状态下因为这个断言 RTC_DCHECK_RUN_ON(&capture_checker_); 1 在 peerconnection\client\main.cc 当中 定义类 class CustomSock…...
【C++】STL——list的使用与底层实现
目录 💕1.带头双向链表List 💕2.list用法介绍 💕3.list的初始化 💕4.size函数与resize函数 💕5.empty函数 💕6.front函数与back函数 💕7.push_front,push_back,pop_front,pop_back函数…...
iOS 音频录制、播放与格式转换
iOS 音频录制、播放与格式转换:基于 AVFoundation 和 FFmpegKit 的实现 在 iOS 开发中,音频处理是一个非常常见的需求,比如录音、播放音频、音频格式转换等。本文将详细解读一段基于 AVFoundation 和 FFmpegKit 的代码,展示如何实现音频录制、播放以及 PCM 和 AAC 格式之间…...
【PyTorch】解决Boolean value of Tensor with more than one value is ambiguous报错
理解并避免 PyTorch 中的 “Boolean value of Tensor with more than one value is ambiguous” 错误 在深度学习和数据科学领域,PyTorch 是一个强大的工具,它允许我们以直观和灵活的方式处理张量(Tensor)。然而,即使…...
Jsoup库具体怎么用?
Jsoup 是一个非常强大的 Java 库,用于解析和操作 HTML 文档。它提供了丰富的功能,包括发送 HTTP 请求、解析 HTML 内容、提取数据、修改 HTML 元素等。以下将详细介绍 Jsoup 的基本用法和一些高级功能,帮助你更好地使用 Jsoup 进行网络爬虫开…...
python:如何播放 .spx 声音文件
.spx 是 Speex音频编解码器的文件扩展名,它是一种开源的、免费的音频编解码器,主要用于语音压缩和语音通信领域。spx 文件通常用于语音记录、VoIP应用、语音信箱等场景。 .mp3 是一种广泛使用的音频格式,它采用了有损压缩算法,可…...
HTML学习笔记(6)
利用dom操作实现,对一个表格的增删改查 代码如下: todolist.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …...
走向基于大语言模型的新一代推荐系统:综述与展望
HightLight 论文题目:Towards Next-Generation LLM-based Recommender Systems: A Survey and Beyond作者机构:吉林大学、香港理工大学、悉尼科技大学、Meta AI论文地址: https://arxiv.org/abs/2410.1974 基于大语言模型的下一代推荐系统&…...
【DeepSeek-R1 +1.5B】2060显卡ollama本地部署+open-webui界面使用
https://github.com/open-webui/open-webui Deepseek开源R1系列模型,纯RL助力推理能力大跃升! 2060显卡下使用deepseek-r1-1.5B deepseek开源小模型需要的显存(根据显存来选模型大小) ,图from: DeepSeek本地部署&…...
《翻转组件库之发布》
背景 继《翻转组件库之打包》_杨晓风-linda的博客-CSDN博客之后,组件库已经可以正常构建,那如何像elementUI等组件库那样,用npm安装,按照既定的用法使用即可呢?本篇便为你揭晓 资料相关 1、npm官方文档:…...
在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高
在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高 在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高而其他的中奖倍数较低。这种不均衡会导致模型偏向于高频样本(低中奖倍数的),…...
语言月赛 202311【基因】题解(AC)
》》》点我查看「视频」详解》》》 [语言月赛 202311] 基因 题目描述 有一个长度为 n n n 的字符串 S S S。其只包含有大写字母。 小 A 将 S S S 进行翻转后,得到另一个字符串 S ′ S S′。两个字符串 S S S 与 S ′ S S′ 对应配对。例如说,对…...
unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键
目录 1 用Input接口去监测:鼠标,键盘,虚拟轴,虚拟按键 2 鼠标 MouseButton 事件 2.1 鼠标的基本操作 2.2 测试代码 2.3 测试情况 3 键盘Key事件 3.1 键盘的枚举方式 3.2 测试代码同上 3.3 测试代码同上 3.4 测试结果 4…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
