达梦数据库从单主模式转换为主备模式
目录标题
- 达梦数据库单主转主备配置笔记
- 前期准备
- 服务器环境
- 数据库安装
- 磁盘空间
- 流程
- 流程图说明
- 基于脱机备份方式的单实例转主备流程图
- 详细步骤说明
- 详细步骤
- 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…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
