注册
达梦DMDRS V5.2.5.4 完整部署实验手册
专栏/技术分享/ 文章详情 /

达梦DMDRS V5.2.5.4 完整部署实验手册

派仔 2026/08/28 157 0 0
摘要

1. 实验环境说明

• 操作系统:CentOS 7 x86_64
• 数据库版本:DM8 单机
• 同步工具:DMDRS V5.2.5.4
• 源库:127.0.0.1:5236 实例名 TEST_SRC
• 目标库:127.0.0.1:5237 实例名 TEST_DEST
• 数据库账号:SYSDBA / Dameng123
• 实验目标:实现 DM8 同构库实时增量 DDL+DML 同步

2. DMDRS 安装部署

cd /home/dmdba/Downloads
chmod +x dmdrs_rev218265_x86_rh6_64_20260409.bin
./dmdrs_rev218265_x86_rh6_64_20260409.bin -i
全程默认路径、关闭自启、不安装附加组件,安装完成后进入 bin 目录操作。
cd /home/dmdba/dmdrs5/bin

3. 初始配置搭建 & 第一阶段BUG修复(双文件拆分架构失败)

3.1 最初错误架构

初期按照旧版DRS习惯,将 CPT、EXEC 拆分为两个独立 XML、双进程启动:
错误架构:cpt.xml(抓取)+ exec.xml(写入)双进程分离运行。
出现现象/BUG:
• CPT 正常读取归档、解析日志,读取流量正
image.png
• 发送次数=0、发送流量=0,完全无法同步数据
image.png

• 控制台输入旧指令报错:load all / start all 无效命令
报错信息:
CSL[ERROR]: DRS-3011 无效的命令
CSL[ERROR]: DRS-2802 非法的控制台命令
BUG根因:

  • V5.2.5.4 内测精简版不支持多进程分布式组网,双进程无法互相通信;
  • 新版彻底废弃 load all / start all 全局指令,只支持单模块启停;
  • 拆分配置缺少全局 <drs> 根节点与 <send> 路由,CPT 不知道下游写入端地址。

3.2 修复方案:统一单文件一体化架构

舍弃双文件架构,使用单 total.xml 集成 base+cpt+exec+send 路由,单进程启动。
生成最终正确配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<drs>
    <base>
        <mgr_port>5245</mgr_port>
        <siteid>1</siteid>
    </base>

    <cpt>
        <name>CPT_NAME</name>
        <siteid>1</siteid>
        <login>
            <dbtype>dm8</dbtype>
            <server>127.0.0.1</server>
            <port>5236</port>
            <dbname>TEST_SRC</dbname>
            <user>SYSDBA</user>
            <pwd>Dameng123</pwd>
        </login>
        <send>
            <ip>127.0.0.1</ip>
            <port>5245</port>
            <target_name>EXEC_NAME</target_name>
            <map>
                <item>TEST_OP.*==TEST_OP.*</item>
            </map>
        </send>
    </cpt>

    <exec>
        <name>EXEC_NAME</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>127.0.0.1</server>
            <port>5237</port>
            <dbname>TEST_DEST</dbname>
            <user>SYSDBA</user>
            <pwd>Dameng123</pwd>
        </login>
    </exec>
</drs>
EOF

4. 第二阶段BUG修复:XML语法不兼容导致启动失败

在初次编写 XML 时,沿用旧版 DRS 语法,出现大量启动报错。

4.1 错误写法与对应报错

错误1:字段带下划线、使用 host、db_name 旧语法

<host>127.0.0.1</host>
<db_name>TEST_SRC</db_name>

报错:DRS-3044 未找到登录信息login中的配置参数 param: dbtype
错误2:XML 包含中文注释
报错:不支持的模块标签 lable: 中文注释乱码
错误3:内存参数带单位
Plain Text
<mem_size>1G</mem_size>
报错:DRS-3073 参数项数字非法 param: mem_size, value: 1G

4.2 统一修正规范

• 全部字段改为:dbtype、server、dbname 纯小写无下划线
• 删除 mem_size 字段,禁止带 G/M 单位
• 数据库版本固定小写 dm8

5. 服务标准启动流程 + 第三阶段BUG(启动时序报错自愈)

5.1 清理环境、启动服务

rm -rf log/* errlog/* dump/*
./drsvr total.xml -Xms128m -Xmx512m

5.2 启动瞬时BUG(正常自愈,无需改配置)

启动瞬间出现如下报错:
DRS-3012 指定的模块名未启动 module name: EXEC_NAME
DRS-2205 连接注册失败 target: EXEC_NAME
DRS-2226 连接目标节点失败 st_nodes: 1, 0 connectable
BUG原因:CPT 初始化速度快于 EXEC,先发起连接、下游未就绪,属于时序差。
自愈结果:等待2~5秒后自动恢复:
CPT_NAME[INFO]: 来自源DMDRS的连接已建立
该告警不影响业务、无需修复,属于内测版固有启动时序机制。

5.3 控制台正确操作

./drcsl total.xml

image.png
image.png

6. 第四阶段BUG修复:映射规则错误 + 用户不同步导致DDL同步失败

6.1 第一类问题:映射规则名不匹配,数据被过滤

初始错误映射:
<item>TEST_USER.==TEST_USER.</item>
实际创建用户为 TEST_OP,导致所有建表操作被过滤:
CPT_NAME[INFO]: 当前对象不在映射规则中,过滤DDL操作 ddl: TEST_OP.T_TEST
修复:修改映射为 TEST_OP.==TEST_OP.(已在最终XML中修复)

6.2 第二类问题:DRS无法同步 CREATE USER,目标库无模式导致建表失败

修正映射后,DRS成功下发建表语句,但目标库报错:
DB-2103 无效的模式名[TEST_OP]
DRS-9010 直接执行SQL语句失败
BUG根因:DMDRS 只同步表与数据,不同步创建用户语句,目标库必须手动预建用户。

6.3 两端数据库手动对齐用户

源库 5236 执行:

DROP USER IF EXISTS TEST_OP CASCADE;
CREATE USER TEST_OP IDENTIFIED BY "123456";
GRANT RESOURCE,DBA TO TEST_OP;
SET SCHEMA TEST_OP;
CREATE TABLE T_TEST(ID INT PRIMARY KEY, INFO VARCHAR(50));
INSERT INTO T_TEST VALUES(1,'DRS同步连通测试');
COMMIT;

目标库 5237 执行:

DROP USER IF EXISTS TEST_OP CASCADE;
CREATE USER TEST_OP IDENTIFIED BY "123456";
GRANT RESOURCE,DBA TO TEST_OP;

7. 最终同步验证

源库执行增量事务:

目标库查询完全一致:DDL建表、主键、DML增改删全部实时同步。
image.png
image.png
image.png

8. 实验总结

  • 架构问题:新版不支持双文件多进程,必须单文件一体化+send路由,否则发送流量为0;
  • XML语法问题:内测版字段严格小写无下划线、禁止中文注释、禁止内存单位;
  • 模块时序问题:CPT启动快于EXEC,瞬时连接报错可自愈,无需处理;
  • 对象同步限制问题:DRS不同步用户创建语句,必须两端手动对齐账号权限,同时映射模式名必须严格一致。
    本次实验最终实现 DM8 跨实例实时增量数据同步,所有核心故障均已彻底解决,服务运行稳定。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服