• 操作系统: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 同步
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
初期按照旧版DRS习惯,将 CPT、EXEC 拆分为两个独立 XML、双进程启动:
错误架构:cpt.xml(抓取)+ exec.xml(写入)双进程分离运行。
出现现象/BUG:
• CPT 正常读取归档、解析日志,读取流量正
• 发送次数=0、发送流量=0,完全无法同步数据
• 控制台输入旧指令报错:load all / start all 无效命令
报错信息:
CSL[ERROR]: DRS-3011 无效的命令
CSL[ERROR]: DRS-2802 非法的控制台命令
BUG根因:
舍弃双文件架构,使用单 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
在初次编写 XML 时,沿用旧版 DRS 语法,出现大量启动报错。
错误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
• 全部字段改为:dbtype、server、dbname 纯小写无下划线
• 删除 mem_size 字段,禁止带 G/M 单位
• 数据库版本固定小写 dm8
rm -rf log/* errlog/* dump/*
./drsvr total.xml -Xms128m -Xmx512m
启动瞬间出现如下报错:
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的连接已建立
该告警不影响业务、无需修复,属于内测版固有启动时序机制。
./drcsl total.xml
初始错误映射:
<item>TEST_USER.==TEST_USER.</item>
实际创建用户为 TEST_OP,导致所有建表操作被过滤:
CPT_NAME[INFO]: 当前对象不在映射规则中,过滤DDL操作 ddl: TEST_OP.T_TEST
修复:修改映射为 TEST_OP.==TEST_OP.(已在最终XML中修复)
修正映射后,DRS成功下发建表语句,但目标库报错:
DB-2103 无效的模式名[TEST_OP]
DRS-9010 直接执行SQL语句失败
BUG根因:DMDRS 只同步表与数据,不同步创建用户语句,目标库必须手动预建用户。
源库 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;
源库执行增量事务:
目标库查询完全一致:DDL建表、主键、DML增改删全部实时同步。
文章
阅读量
获赞
