达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW

1)手工搭建一主一备数据守护集群;

2)连接集群进行增删改查基本操作;

3)监视器查看集群状态;

1 准备工作

目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)

数据库软件安装目录 /home/dmdba/dmdbms

实例安装目录 /dmdata/

归档日志存放目录 /dmdata/arch

备份文件存放目录 /dmdata/dmbak/

IP规划:

类别 IP地址 实例名 实例端口号
主库A 10.137.88.59 dw1 5236
备库B 10.137.88.61 dw2 5237
监视器 10.137.88.58

【说明】这里将监视器配在独立的服务器上,三台服务器都要事先安装好dm8

端口规划:

实例名 实例端口 MAL 系统监听 TCP 连接的端口 实例本地的守护进程监听 TCP 连接的端口 实例监听守护进程 TCP 连接的端口
dw1 5236 7336 7436 7536
dw2 5236 7336 7436 7536

2 主备集群配置

2.1 初始化实例

2个节点完成实例初始化

执行以下命令

bash 复制代码
./dminit path=/home/dmdba/dm8/dmdbms/data db_name=dmdb instance_name=dw1 page_size=32 extent_size=32 log_size=2048 SYSDBA_PWD=Password1 SYSAUDITOR_PWD=Password1 PORT_NUM=5236

【注意】后面实例名需跟此处保持一致,端口号默认为5236(可以不写端口号),密码长度在闭区间[8,48]内,且需要包含大小写和数字。如果有特殊符号的话需要加引号,没有则不用。

常用参数说明

参数 说明 示例值
PATH 数据文件路径 /dm8/data
DB_NAME 数据库名 DAMENG
INSTANCE_NAME 实例名 DMSERVER
PORT_NUM 服务端口 5236
SYSDBA_PWD SYSDBA密码 Dameng123
PAGE_SIZE 页大小 8,16,32(默认8K)
CASE_SENSITIVE 大小写敏感 0(不敏感)/1(敏感)
CHARSET 字符集 0(GB18030)/1(UTF-8)/2(EUC-KR)

完整参数查看:

bash 复制代码
./dminit HELP

常用端口对照表

端口类型 默认端口 配置文件参数
数据库服务端口 5236 PORT_NUM
MAL通信端口 61141 MAL_PORT
守护进程端口 52141 DW_PORT
归档端口 5237 ARCH_PORT

主库:

备库:

bash 复制代码
./dminit path=/home/dmdba/dm8/dmdbms/data db_name=dmdb instance_name=dw1 page_size=32 extent_size=32 log_size=2048 SYSDBA_PWD=Password1 SYSAUDITOR_PWD=Password1 PORT_NUM=5236

2.2 启动实例

以主机dmdb01为主库,启动一次实例(启动一次后即可关停)

bash 复制代码
dmserver /dmdata/dmdb/dm.ini

如图,出现system is ready后输入exit停止数据库。

2.3 备库还原

传输备份文件

【说明】这里利用的是两台服务器,所以需要利用scp命令传输备份文件

ruby 复制代码
# 主库
scp -r /home/dmdba/bakfull dmdba@10.137.88.61:/home/dmdba/
# 备库
scp -r dmdba@10.137.88.59:/home/dmdba/bakfull /home/dmdba/ 

backup 全库

在主机dmdb01上执行以下命令,确认主库 dmap 服务已启动:

perl 复制代码
ps -ef|grep dmap

已启动:

bash 复制代码
dmdba用户 启动dmrman工具:
./dmrman use_ap=2
执行 backup 全库:
backup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull';

备份还原备库

将备份的文件/home/dmdba/bakfull拷贝到备库服务器上。

在主机dmdb02上使用 dmrman 工具还原备库,dmdba 用户执行:

sql 复制代码
./dmrman use_ap=2
restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
recover database '/dmdata/dmdb/dm.ini'  update db_magic;

【说明】./dmrman use_ap=2这一步很关键,只输./dmrman,在接下来的步骤中会报一堆错

备库:

【说明】图中报错[603]显示为备份期间没有日志产生,可忽略

2.4 修改参数

如何修改去搜vim编辑器的用法

i 修改

esc + / 查找

esc + wq 保存并退出

esc +wq!强制保存并退出

esc + q 退出不保存

修改参数去安装数据库的目录下修改。

2.4.1 修改dm.ini参数

所有节点都要修改

执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dm.ini

主库dmdb01上修改以下参数值:

ini 复制代码
INSTANCE_NAME = dw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

备库dmdb02上修改以下参数值:

ini 复制代码
INSTANCE_NAME = dw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

2.4.2 配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dmarch.ini

主库dmdb01上添加以下内容:

ini 复制代码
[ARCHIVE_REALTIME1]  
ARCH_TYPE     = REALTIME  
ARCH_DEST     = dw2   
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL 
ARCH_DEST     = /dmdata/arch    
ARCH_FILE_SIZE    = 2048
ARCH_SPACE_LIMIT  = 102400

【说明】如果后续ARCH_DEST这里报错的话,可以:

把配置文件改成:

ARCH_DEST = /dmarch

然后输入以下命令:

bash 复制代码
su - root
sudo mkdir -p /dmarch
sudo chown -R dmdba:dinstall /dmarch
sudo chmod -R 755 /dmarch
exit
touch /dmarch/test_file && echo "权限设置成功"||echo"仍有问题"
rm -f/dmarch/test_file

备库Dmdb02上添加以下内容:

ini 复制代码
[ARCHIVE_REALTIME1]  
ARCH_TYPE     = REALTIME 
ARCH_DEST     = dw1   
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL
ARCH_DEST     = /dmdata/arch  
ARCH_FILE_SIZE    = 2048
ARCH_SPACE_LIMIT  = 102400    

2.4.3 配置MAL系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令。

vi /dmdata/dmdb/dmmal.ini

主备库2个节点文件内容要相同。

ini 复制代码
MAL_CHECK_INTERVAL   = 5  
MAL_CONN_FAIL_INTERVAL  = 15  
[MAL_INST1]
  MAL_INST_NAME = dw1 
  MAL_HOST     = 10.137.88.59  
  MAL_PORT     = 7336
  MAL_INST_HOST   = 10.137.88.59  
  MAL_INST_PORT   = 5236 
  MAL_DW_PORT   = 7436
  MAL_INST_DW_PORT = 7536
[MAL_INST2]
  MAL_INST_NAME = dw2 
  MAL_HOST      = 10.137.88.61  
  MAL_PORT          = 7336
  MAL_INST_HOST         = 10.137.88.59  
  MAL_INST_PORT         = 5236 
  MAL_DW_PORT  = 7436
  MAL_INST_DW_PORT = 7536

2.4.4 配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dmwatcher.ini

主备库2节点文件内容要相同。

ini 复制代码
[GRP_DW] 
DW_TYPE    = GLOBAL  
DW_MODE    = MANUAL 
DW_ERROR_TIME     = 30  
INST_RECOVER_TIME  = 60         
INST_ERROR_TIME   = 20  
INST_OGUID         = 453331 
INST_INI           = /dmdata/dmdb/dm.ini 
INST_AUTO_RESTART  = 1   
INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/DmServiceDW start

2.5注册服务

以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。

使用 root 用户,到数据库安装目录的script/root下。

注册守护进程服务(主备库都执行)。

bash 复制代码
./dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /dmdata/dmdb/dmwatcher.ini	

注册数据库实例服务(主备库都执行):

bash 复制代码
./dm_service_installer.sh -t dmserver -p DW -dm_ini /dmdata/dmdb/dm.ini

2.6 Mount状态启动集群

以 mount 方式启动数据库实例

使用 dmdba 用户,执行以下命令(主备库都执行):

bash 复制代码
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /dmdata/dmdb/dm.ini mount

主备库都要是ready状态,表示成功

2.7 修改数据库模式

在新的终端使用 disql 工具连接数据库:

bash 复制代码
./disql SYSDBA/Password1

主备库都修改 oguid,执行以下命令:

scss 复制代码
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);

系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。

主库dmdb01上修改数据库模式为 primary,执行以下命令:

scss 复制代码
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 	//第1步
SQL>alter database primary;					//第2步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); 	//第3步

主库:

备库dmdb02上修改数据库模式为 standby,执行以下命令:

如果当前数据库不是 Normal 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值为 1,允许修改数据库模式,修改 Standby 模式成功后再改回为 0。如果是 Normal 模式,请忽略下面的第 1 步和第 3 步。

scss 复制代码
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 	//第1步
SQL>alter database standby; 						//第2步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); 	//第3步

备库:

2.8 启动守护进程

dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

bash 复制代码
./dmwatcher /dmdata/dmdb/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open。这里是前台启动的方式,因为我们前面注册了服务名称,所以就没必要前台启动,直接配好主从的主备关系后crtl+C退出两个实例的前台mount启动,然后调整实例启动服务脚本里的启动状态,依次按顺序启动主、备库实例、然后再主、备库的守护DmWatcher服务。

2.9 配置监视器

启动监视器(可以在任意节点配置)

守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。

设置权限

bash 复制代码
# 查看当前权限
ls -l dmmonitor.ini

# 设置权限(使用分步法避免错误)
sudo chown dmdba dmmonitor.ini
sudo chgrp dinstall dmmonitor.ini
sudo chmod 640 dmmonitor.ini

新建确认监视器配置文件 dmmonitor.ini,执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dmmonitor.ini

添加以下内容:

ini 复制代码
MON_DW_CONFIRM    = 0
MON_LOG_PATH    = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL  = 60
MON_LOG_FILE_SIZE   = 200
MON_LOG_SPACE_LIMIT  = 1024
[GRP_DW] 
 MON_INST_OGUID    = 453331

 MON_DW_IP     = 10.137.88.59:7436
 MON_DW_IP     = 10.137.88.61:7436

执行以下命令,启动监视器。

bash 复制代码
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmmonitor /dmdata/dmdb/dmmonitor.ini	

启动后输入 show 命令查看集群状态。

其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。

2.10 disql 客户端验证

使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:

bash 复制代码
./disql SYSDBA/Password1@10.137.88.59:5236

SQL 提示符下执行以下命令:

sql 复制代码
create table test(id int);
insert into test values (1);
commit;

用 disql 客户端登录备库,查询测试表验证,执行以下命令:

bash 复制代码
./disql SYSDBA/Password1@10.137.88.61:5236

sql:

csharp 复制代码
select * from test;

如图,验证成功

3 可能遇到的问题

无法访问/dm8/data/

  1. 达梦数据库未正确安装或安装路径不正确
  2. /dm8/data/目录尚未创建
  3. 当前用户没有访问该目录的权限
  4. 环境变量配置不正确

解决方案

1. 确认达梦数据库安装情况

首先检查达梦数据库是否已正确安装:

perl 复制代码
ps -ef | grep dmserver

如果未找到相关进程,可能需要重新安装达梦数据库。

2. 检查目录是否存在

bash 复制代码
ls -ld /dm8/data/

如果目录不存在,需要创建:

bash 复制代码
sudo mkdir -p /dm8/data/
sudo chown -R dmdba:dinstall /dm8/

3. 检查权限问题

确保当前用户(通常是dmdba)有访问权限:

bash 复制代码
sudo chown -R dmdba:dinstall /dm8/data/
sudo chmod -R 755 /dm8/data/

4. 检查环境变量

确保已设置达梦数据库的环境变量:

bash 复制代码
cat ~/.bash_profile

应该包含类似以下内容:

bash 复制代码
export DM_HOME=/dm8
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH

5. 初始化数据库实例

如果/data目录是空的,可能需要初始化数据库:

bash 复制代码
cd /dm8/bin
./dminit path=/dm8/data

解决达梦数据库归档目录权限不足问题

您在执行 touch /dmarch/test_file 时遇到权限不足的问题,这表明 dmdba 用户对 /dmarch 目录没有足够的权限。以下是完整的解决方案:

1. 检查当前权限状态

bash 复制代码
ls -ld /dmarch

正常应该显示:

bash 复制代码
drwxr-xr-x 2 dmdba dinstall 4096 Jan 1 10:00 /dmarch

2. 授予dmdba用户完整权限

bash 复制代码
# 使用root用户执行
sudo chown -R dmdba:dinstall /dmarch
sudo chmod -R 775 /dmarch  # 给属主和属组读写执行权限

# 如果存在SELinux限制
sudo chcon -R -t dm_db_data_t /dmarch

3. 验证权限修复

bash 复制代码
# 切换回dmdba用户
su - dmdba

# 再次测试
touch /dmarch/test_file && echo "权限设置成功" || echo "仍有问题"
rm -f /dmarch/test_file

4. 特殊情况处理

情况1:目录被其他进程占用

bash 复制代码
sudo lsof /dmarch
# 如果有进程占用,先停止相关服务
sudo systemctl stop DmServiceDMSERVER

情况2:文件系统只读

bash 复制代码
mount | grep "/dmarch"
# 如果是ro,重新挂载
sudo mount -o remount,rw /dmarch

情况3:磁盘空间满

bash 复制代码
df -h /dmarch
# 清理空间或扩展存储

5. 生产环境推荐权限设置

对象 推荐权限 命令示例
归档目录 775 chmod 775 /dmarch
归档文件 664 find /dmarch -type f -exec chmod 664 {} ;
归档子目录 775 find /dmarch -type d -exec chmod 775 {} ;

6. 永久生效配置

bash 复制代码
# 设置默认umask(添加到/etc/profile)
echo "umask 002" | sudo tee -a /etc/profile
source /etc/profile

# 设置开机自动修复权限(可选)
echo "chown -R dmdba:dinstall /dmarch" | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local

7. 验证达梦归档功能

sql 复制代码
# 启动数据库到mount模式
./dmserver /dmdata/dmdb/dm.ini mount

# 在disql中验证
./disql SYSDBA/SYSDBA
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> SELECT * FROM V$ARCHIVED_LOG;

如果仍有问题,请检查:

  1. 用户组是否正确:id dmdba 应显示属于 dinstall
  2. SELinux状态:getenforce 如果是Enforcing模式需要调整策略
  3. 磁盘inode是否耗尽:df -i /dmarch

验证达梦数据库归档路径(ARCH_DEST)正确性的完整指南

1. 基础路径验证方法

检查路径是否存在

bash 复制代码
# 检查目录是否存在
ls -ld /dmarch
  • 有效输出 :显示目录详细信息(如 drwxr-xr-x 2 dmdba dinstall 4096 Jan 1 10:00 /dmarch
  • 无效输出ls: cannot access '/dmarch': No such file or directory

测试路径可写性(使用dmdba用户)

bash 复制代码
su - dmdba
test -w /dmarch && echo "可写" || echo "不可写"

2. 高级验证方法

创建测试文件

bash 复制代码
# 测试文件创建/删除
touch /dmarch/test_file && rm /dmarch/test_file && echo "测试成功" || echo "测试失败"

检查磁盘空间

bash 复制代码
df -h /dmarch  # 查看挂载点和可用空间

验证文件系统类型

shell 复制代码
mount | grep "/dmarch"
# 应显示rw(读写)权限,如:/dev/sdb1 on /dmarch type xfs (rw,relatime)

3. 达梦专用验证命令

在数据库内验证归档配置

sql 复制代码
-- 查看归档参数
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME LIKE '%ARCH%';

-- 查看归档日志记录
SELECT COUNT(*) FROM V$ARCHIVED_LOG;

强制生成归档日志测试

sql 复制代码
ALTER SYSTEM ARCHIVE LOG CURRENT;

4. 自动化验证脚本

bash 复制代码
#!/bin/bash
ARCH_PATH="/dmarch"

echo "===== 基础检查 ====="
[ -d "$ARCH_PATH" ] && echo "目录存在" || echo "目录不存在"
[ -w "$ARCH_PATH" ] && echo "目录可写" || echo "目录不可写"
df -h $ARCH_PATH

echo -e "\n===== 达梦归档测试 ====="
./disql SYSDBA/SYSDBA <<EOF
ALTER SYSTEM ARCHIVE LOG CURRENT;
SELECT DEST_NAME, DEST_PATH, STATUS FROM V$DM_ARCH_DEST WHERE DEST_PATH='$ARCH_PATH';
EOF

5. 常见问题排查

问题现象 解决方案
目录不存在 sudo mkdir -p /dmarch && chown dmdba:dinstall /dmarch
权限不足 sudo chmod -R 775 /dmarch
磁盘空间满 清理空间或扩展存储
SELinux限制 sudo chcon -t dm_db_data_t /dmarch
路径拼写错误 检查大小写和特殊字符

6. 生产环境建议

  1. 使用独立存储:归档目录最好放在独立磁盘
bash 复制代码
mkfs.xfs /dev/sdb1 && mount /dev/sdb1 /dmarch
  1. 设置监控:检测归档目录空间
bash 复制代码
echo "/dmarch 90%" >> /etc/monit/conf.d/space.conf
  1. 定期维护:设置归档清理策略
sql 复制代码
ALTER SYSTEM SET ARCHIVE_DELETE_POLICY='TIME,7' SCOPE=BOTH;

通过以上方法,您可以全面验证归档路径的正确性。如果仍有问题,建议检查 /dmdata/dmdb/dm_DMSERVER.log 获取详细错误信息。

达梦数据库归档路径(ARCH_DEST)配置

在达梦数据库的dmarch.ini配置文件中,ARCH_DEST参数指定归档日志的存储路径,关于"不需要以/arch结尾"的原因如下:

1. 技术本质原因

  1. 路径解析机制
    • 达梦数据库的归档模块会自动处理路径结尾
    • 系统内部会标准化路径格式(自动处理末尾斜杠)
  1. 文件生成规则
    • 归档文件实际存储在/dmarch/arch_XXX.log这样的子路径中
    • 数据库自动创建必要的子目录结构

2. 实际配置建议

正确配置示例

ini 复制代码
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch       # 简洁形式(推荐)
# ARCH_DEST = /dmarch/    # 带斜杠也可工作但不必要

应避免的配置

ini 复制代码
ARCH_DEST = /dmarch/arch  # 冗余路径(不推荐)

3. 路径验证方法

sql 复制代码
# 查看实际归档文件存储位置
ls -l /dmarch/arch_*

# 在数据库内验证
./disql SYSDBA/SYSDBA <<EOF
SELECT DEST_PATH, ARCHIVED_SEQ FROM V$ARCHIVED_LOG 
WHERE DEST_PATH LIKE '%/dmarch%' FETCH FIRST 1 ROW ONLY;
EOF

4. 生产环境最佳实践

  1. 独立挂载点
bash 复制代码
# 专为归档创建独立分区
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /dmarch
  1. 权限设置
bash 复制代码
chown -R dmdba:dinstall /dmarch
chmod -R 775 /dmarch
  1. 监控配置
bash 复制代码
# 监控归档空间使用率
echo "/dmarch 85%" >> /etc/monit/conf.d/archive.conf

5. 技术原理图示

c 复制代码
/dmarch/          ← ARCH_DEST指定的根目录
├── arch_0001.log  ← 数据库自动生成
├── arch_0002.log
└── arch_XXXX.log

达梦数据库会自动在指定路径下创建归档文件,无需人工指定arch子目录。这种设计使配置更简洁,同时降低因路径配置错误导致的问题风险。

实例(DM2)的归档信息在实例(DM1)中没有找到

错误诊断

关键错误信息是:

csharp 复制代码
[monitor] 2025-08-18 15:12:20: 实例(DM2)的归档信息在实例(DM1)中没有找到

这表明备库(DM2)无法从主库(DM1)获取归档日志,导致数据同步中断。以下是详细分析:

错误原因

  1. 归档配置不完整
    • 主库未正确配置归档到备库的路径
    • 备库未正确配置从主库接收归档
  1. 网络连通性问题
    • 主备库之间的MAL端口(7336)或守护端口(7436)不通
  1. 归档日志不连续
    • 主库生成的归档日志未完整传输到备库
  1. 配置不一致
    • 主备库的OGUID或归档参数不一致

解决方案

1. 检查主库归档配置

sql 复制代码
-- 在主库执行
SELECT DEST_NAME, DEST_TYPE, DEST_PATH FROM V$DM_ARCH_DEST;

确保包含备库的归档配置:

ini 复制代码
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM2  # 备库实例名
ARCH_TRACE_FLAG = ALL

2. 验证网络连接

yaml 复制代码
# 在备库测试连接主库端口
telnet 10.137.90.249 7336  # MAL端口
telnet 10.137.90.249 7436  # 守护端口

3. 修复归档中断问题

sql 复制代码
-- 在备库执行(需停止守护进程)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- 重新注册归档
ALTER DATABASE REGISTER ARCHIVELOG '/path/to/missing/archive.log';

-- 重新启动恢复
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

4. 检查关键配置一致性

配置项 主库(DM1) 备库(DM2)
OGUID 453331 453331
MAL_PORT 7336 7336
DW_PORT 7436 7436
ARCH_INI 1 1

完整修复流程

  1. 停止集群服务
arduino 复制代码
# 主备库都执行
systemctl stop DmWatcherServiceDW
systemctl stop DmServiceDMSERVER
  1. 修正主库归档配置
bash 复制代码
vi /dmdata/dmdb/dmarch.ini

添加:

ini 复制代码
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM2
ARCH_TRACE_FLAG = ALL
  1. 启动服务(严格按顺序)
perl 复制代码
# 1. 启动备库实例
systemctl start DmServiceDMSERVER@DM2

# 2. 启动主库实例
systemctl start DmServiceDMSERVER@DM1

# 3. 启动备库守护
systemctl start DmWatcherServiceDW@DM2

# 4. 启动主库守护
systemctl start DmWatcherServiceDW@DM1

验证修复结果

bash 复制代码
dmmonitor /dmdata/dmdb/dmmonitor.ini
MON> SHOW DATABASE

正常输出应显示:

sql 复制代码
Database    Role     Status     OGUID    归档状态
----------  -------  ---------  -------  --------
DM1         PRIMARY  OPEN       453331   VALID
DM2         STANDBY  MOUNT      453331   VALID

预防措施

  1. 设置归档监控
bash 复制代码
# 监控归档间隔
echo "*/5 * * * * dmdba /dm8/bin/check_archive.sh" >> /var/spool/cron/dmdba
  1. 定期检查同步状态
sql 复制代码
-- 在备库执行
SELECT ARCHIVED_SEQ, APPLIED_SEQ FROM V$ARCH_GAP;
  1. 配置告警规则
ini 复制代码
# 在dmmonitor.ini中添加
[ALARM]
ARCHIVE_LAG = 5  # 允许的最大日志延迟数
相关推荐
薛晓刚1 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队2 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光2 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12012 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
颜颜yan_2 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4532 小时前
管理项目服务器连接数据库
数据库·后端
沙振宇3 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql
杨云龙UP3 小时前
CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程
数据库·oracle
ezl1fe4 小时前
RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
数据库·人工智能·后端