达梦数据库从单主模式转换为主备模式

目录标题

达梦数据库单主转主备配置笔记

达梦官方文档 数据守护系统构建

前期准备

安装前准备工作

服务器环境

  • 准备至少两台服务器,一台作为主库服务器,另一台作为备库服务器。确保服务器硬件配置满足达梦数据库运行要求,例如有足够的 CPU、内存和磁盘 I/O 性能。

  • 保证服务器之间网络连通且稳定,网络延迟应在可接受范围内。开放防火墙所需端口,如 5236(数据库监听)、5266(MAL 通信)、5216(守护进程通信)等。可使用 pingtelnet 命令进行网络连通性测试。

bash 复制代码
ping <目标服务器 IP>
telnet <目标服务器 IP> <端口号>

数据库安装

  • 在所有服务器上安装相同版本的达梦数据库,记录好安装目录,如 /dm8。安装过程中可参考官方文档的安装指南,确保安装步骤正确。

磁盘空间

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

流程

流程图说明

基于脱机备份方式的单实例转主备流程图

开始 检查环境准备 初始化主库 正常启动主库并正常退出 关闭主库 执行脱机备份 拷贝备份文件到备库机器 在备库机器上初始化备库 执行脱机还原 更新备库DB_MAGIC 配置主库dm.ini 配置主库dmmal.ini 配置主库dmarch.ini 配置主库dmwatcher.ini 以Mount方式启动主库 设置主库OGUID 修改主库数据库模式为Primary 配置备库dm.ini 配置备库dmmal.ini 配置备库dmarch.ini 配置备库dmwatcher.ini 以Mount方式启动备库 设置备库OGUID 修改备库数据库模式为Standby 配置监视器dmmonitor.ini 启动主库守护进程 启动备库守护进程 启动监视器 完成主备配置

详细步骤说明

  1. 开始:检查环境准备

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

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

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

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

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

  7. 执行脱机还原:使用脱机还原命令将备份文件还原到备库。

  8. 更新备库DB_MAGIC:执行数据库更新操作,更新备库的DB_MAGIC。

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

  10. 以Mount方式启动主库 :以Mount方式启动主库。

  11. 设置主库OGUID :使用命令行工具DIsql设置主库的OGUID值。

    守护系统唯一 OGUID 值

  12. 修改主库数据库模式为Primary :修改主库的数据库模式为Primary。

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

  14. 以Mount方式启动备库 :以Mount方式启动备库。

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

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

  17. 配置监视器:配置监视器的dmmonitor.ini。

  18. 启动主库守护进程 :启动主库的守护进程。

  19. 启动备库守护进程 :启动备库的守护进程。

  20. 启动监视器:启动监视器。

  21. 完成主备配置:在监视器上执行show命令,检查所有实例和守护进程的状态是否正常。

  22. 结束

以上流程图和详细步骤涵盖了从单实例数据库到主备数据库的完整搭建过程,重点突出了脱机备份的步骤。

详细步骤

1. 检查主库归档模式

在进行模式转换前,需确保主库已开启归档模式,这样才能将事务日志同步到备库,保证数据一致性。

bash 复制代码
# 登录主库服务器
# 使用 disql 工具登录主库
disql SYSDBA/密码

# 在 disql 中查询归档模式
SELECT arch_mode FROM v$database;

若结果为 Y,表示已开启归档模式;若为 N,则按如下步骤开启:

sql 复制代码
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 以 mount 方式启动数据库
STARTUP MOUNT;
-- 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 打开数据库
ALTER DATABASE OPEN;

可参考 达梦数据库归档 获取更多归档相关知识。

2. 配置主库配置文件

修改主库的相关配置文件,使主库能与备库进行通信并同步数据。

dm.ini 文件

ps -ef |grep ini

通常位于数据库安装目录下的 data/实例名 目录,进行如下修改:

ini 复制代码
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 命令检查配置文件内容是否正确。

bash 复制代码
cat /dm8/data/实例名/dm.ini
dmmal.ini 文件

在数据库安装目录下创建该文件,配置如下:

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_HOSTMAL_INST_HOST 填写正确的 IP 地址。

dmarch.ini 文件

同样在数据库安装目录下创建,配置如下:

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 工具对主库数据进行全量备份,以便将其恢复到备库。

bash 复制代码
# 登录主库服务器
# 启动 dmrman 工具
./dmrman

# 在 dmrman 中执行全量备份命令
BACKUP DATABASE FULL TO 备份名 BACKUPSET '备份路径';
# 示例
BACKUP DATABASE FULL TO my_backup BACKUPSET '/dm8/backup/my_backup';

备份过程中可监控备份进度和磁盘空间使用情况。

检查备份集可用性

实操

csharp 复制代码
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 来创建备库数据库。

bash 复制代码
# 登录备库服务器
# 执行初始化命令
./dminit PATH=/dm8/data DB_NAME=备库数据库名 INSTANCE_NAME=备库实例名 PORT_NUM=5236

根据实际情况调整 PATHDB_NAMEINSTANCE_NAME 等参数。

配置备库配置文件

修改备库的相关配置文件,使其与主库配置相匹配。

dm.ini 文件

修改内容与主库类似,但实例名使用备库的。

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.inidmarch.ini 文件复制到备库的相同目录下。

bash 复制代码
scp 主库服务器:/dm8/dmmal.ini /dm8/
scp 主库服务器:/dm8/dmarch.ini /dm8/

实操



5. 恢复备库数据

将主库的备份文件复制到备库服务器,然后使用 dmrman 工具进行数据恢复。

bash 复制代码
# 登录备库服务器
# 复制备份文件
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;

恢复过程中可能会耗时较长,需耐心等待。

实操

csharp 复制代码
/bin/sh /opt/dmdbms/bin/DmAPService start
csharp 复制代码
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 状态。

bash 复制代码
# 启动主库实例
./dmserver /dm8/data/主库实例名/dm.ini mount
# 示例
./dmserver /dm8/data/DAMENG/dm.ini mount

# 使用 disql 登录主库
disql SYSDBA/密码

# 在 disql 中执行以下命令将主库切换到 open 状态
ALTER DATABASE OPEN;
备库

启动备库实例并将其切换到 standby 状态。

bash 复制代码
# 启动备库实例
./dmserver /dm8/data/备库实例名/dm.ini mount
# 示例
./dmserver /dm8/data/DAMENG/dm.ini mount

# 使用 disql 登录备库
disql SYSDBA/密码

# 在 disql 中执行以下命令将备库切换到 standby 状态
ALTER DATABASE STANDBY;

7. 配置监视器

监视器用于监控主备库的状态,确保主备模式正常运行。

创建监视器配置文件 dmmonitor.ini

内容如下:

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
启动监视器
bash 复制代码
./dmmonitor /dm8/dmmonitor.ini

验证主备同步

bash 复制代码
# 登录主库
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 等,及时发现并处理异常情况。
相关推荐
web1828548251240 分钟前
MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互
java·数据库·mysql
mqwguardain1 小时前
Python连接不同数据库的总结
开发语言·数据库·python
林涧泣2 小时前
【Uniapp-Vue3】创建DB schema数据表结构
数据库·uni-app
GIS小小研究僧3 小时前
PostGIS:使用shp2pgsql、pgsql2shp、OGR2OGR函数进行数据导入、导出
数据库·postgresql·postgis
测试界清流4 小时前
自动化测试、压力测试、持续集成
数据库·git
荔枝味啊~4 小时前
杭州某小厂面试
java·网络·数据库·tcp/ip·面试
Gauss松鼠会4 小时前
数据库高安全—审计追踪:传统审计&统一审计
网络·数据库·安全·oracle·gaussdb
egekm_sefg4 小时前
【玩转全栈】----Django模板的继承
数据库·django·sqlite