注册
在linux上搭建mysql_to_dm8的同步链路
技术分享/ 文章详情 /

在linux上搭建mysql_to_dm8的同步链路

Cath Palug 2026/08/07 108 0 0

同步链路搭建(MySQL → DM8)

1.1 概述

DMDRS(达梦数据复制软件)采用模块化设计,通过 CPT(Capture)模块捕获源端数据变更,由 EXEC(Execute)模块在目标端执行入库。本章介绍 MySQL 和 Oracle 到 DM8 的一对一同步链路搭建方法。

1.2 链路规划

1.2.1 规划原则
在部署链路前,需提前规划好以下关键信息,避免链路信息混乱,方便后期维护:规划项 说明 示例
CPT 服务名 源端捕获模块名称,建议带 cpt 标识及源库信息 cpt_mysql、cpt_oracle
EXEC 服务名 目标端执行模块名称,建议带 exec 标识及目标库信息 exec_dm8
站点号(siteid) 链路中全局唯一,同一链路的 CPT 和 EXEC 必须使用不同站点号 CPT=1,EXEC=2
mgr_port 模块管理端口,CPT 通过该端口主动访问 EXEC 5345
网络策略 建议申请一段端口(如 5341~5350)而非单一端口 CPT→EXEC 单向开通
关键原则:站点号(siteid)在同一个管理平台下必须全局唯一,不同链路的 CPT 不能使用相同的站点号。

1.2.2 端口与目录规划
链路 服务 端口 站点号 机器 工作目录
MySQL CPT 5345 1 137 /data/dmdrs5/bin_cpt_mysql_5345
MySQL EXEC 5345 2 138 /data/dmdrs5/bin_exec_dm8_5345
Oracle CPT 5346 3 136 /data/dmdrs5/bin_cpt_oracle_5346
Oracle EXEC 5346 4 138 /data/dmdrs5/bin_exec_oracle_5346

1.3 MySQL → DM8 链路搭建

1.3.1 源端 MySQL 准备

操作机器:137,用户:root

1.3.1.1 创建测试库和表
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE empl1 (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
salary DECIMAL(10,2)
);
INSERT INTO empl1 VALUES (1,‘张三’,30,5000.00);
INSERT INTO empl1 VALUES (2,‘李四’,28,6000.00);
INSERT INTO empl1 VALUES (3,‘王五’,35,7000.00);
COMMIT;

1.3.1.2 创建 DMDRS 同步用户
CREATE USER ‘DMDRS’@’%’ IDENTIFIED BY ‘Dameng123’;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘DMDRS’@’%’;
GRANT ALL PRIVILEGES ON test_db.* TO ‘DMDRS’@’%’;
FLUSH PRIVILEGES;
说明:同步用户需要SELECT(读取表数据)、REPLICATION SLAVE和REPLICATION CLIENT(读取 binlog)权限。

1.3.1.3 确认 binlog 配置
确认 MySQL 已开启 binlog 且格式为 ROW。
检查/etc/my.cnf:
log-bin=/data/mysql/binlog
binlog-format=ROW
server-id=1

1.3.2 目标端 DM8 准备

操作机器:138,用户:dmdba
– 创建目标用户
CREATE USER TEST_DB IDENTIFIED BY Dameng123;
GRANT DBA TO TEST_DB;
– 创建目标表
CREATE TABLE TEST_DB.EMPL1 (
ID INT NOT NULL,
NAME VARCHAR(50),
AGE INT,
SALARY NUMERIC(10,2)
);

1.3.3 DMDRS 安装

操作机器:137(CPT)和 138(EXEC),用户:root → dmdba
1.3.3.1 创建安装目录(root)
mkdir -p /data/dmdrs5
chown -R dmdba:dinstall /data/dmdrs5
chmod -R 755 /data/dmdrs5

1.3.3.2 安装 CPT(137,dmdba)
cd /opt
export DMDRS_INSTALL_TMPDIR=/data/dmdrs5/tmp
mkdir -p /data/dmdrs5/tmp
./dmdrs_rev218265_x86_rh6_64_20260409.bin -i
交互选项:
语言:c
安装目录:/data/dmdrs5
安装组件:2(仅代理)
许可证:1
数据库驱动路径:/usr/local/mysql/lib
代理 IP:192.168.21.137
代理端口:19345
注册系统服务:2(不注册)

1.3.3.3 安装 EXEC(138,dmdba)
交互选项同 CPT,差异项:
驱动路径:/home/dmdba/dmdbms/bin
代理 IP:192.168.21.138
代理端口:19346

1.3.4 配置 MySQL 库路径(137,root)

echo “/usr/local/mysql/lib” > /etc/ld.so.conf.d/mysql.conf
ldconfig

1.3.5 配置 CPT(137,dmdba)

cd /data/dmdrs5
cp -r bin bin_cpt_mysql_5345
cd bin_cpt_mysql_5345
vi cpt.xml
<?xml version=“1.0” encoding=“GB18030”?>
<drs>
<base>
<mgr_port>5345</mgr_port> <!-- 管理端口,与链路规划一致 -->
<siteid>1</siteid> <!-- 站点号,全局唯一 -->
<mem_size>32</mem_size> <!-- 最大内存(GB),0~255,0表示无限制 -->
<lang>ch-utf8</lang> <!-- 字符集,避免日志乱码 -->
</base>
<cpt>
<name>cpt_mysql</name> <!-- CPT 服务名,建议带源库标识 -->
<ddl_mask>OBJ:OP</ddl_mask> <!-- DDL 同步掩码,需要 DDL 同步时配置 -->
<login>
<dbtype>mysql</dbtype> <!-- 数据库类型 -->
<server>192.168.21.137</server> <!-- 数据库 IP -->
<user>DMDRS</user> <!-- 同步用户 -->
<pwd>Dameng123</pwd> <!-- 用户密码 -->
<port>3306</port> <!-- 数据库端口 -->
<dbname>test_db</dbname> <!-- MySQL 需指定数据库名 -->
</login>
<send>
<ip>192.168.21.138</ip> <!-- 目标端 EXEC IP -->
<port>5345</port> <!-- 目标端 mgr_port -->
<compress>0</compress> <!-- 消息压缩:0关闭/1启用,网络受限时启用 -->
<target_name>exec_dm8</target_name> <!-- 目标端 EXEC 服务名 -->
<map>
<item>test_db.==TEST_DB.</item> <!-- 表映射:源模式.==目标模式. -->
</map>
</send>
<load>
<enable>1</enable> <!-- 启用装载功能 -->
<load_thr>64</load_thr> <!-- 装载线程数,依据源端 CPU 核数 -->
<nets>1</nets> <!-- 连接数,多表并行时可设为 2 -->
</load>
</cpt>
</drs>
映射说明:<item>test_db.==TEST_DB.</item>表示将 MySQL 的test_db模式下所有表同步到 DM8 的TEST_DB模式。映射规则中源端使用小写,目标端使用大写。

1.3.6 配置 EXEC(138,dmdba)

cd /data/dmdrs5
cp -r bin bin_exec_dm8_5345
cd bin_exec_dm8_5345
vi exec.xml
<?xml version=“1.0” encoding=“GB18030”?>
<drs>
<base>
<mgr_port>5345</mgr_port> <!-- 管理端口,与源端一致 -->
<siteid>2</siteid> <!-- 站点号,与源端不同 -->
<mem_size>0</mem_size> <!-- 0 表示无限制 -->
<lang>ch-utf8</lang>
</base>
<exec>
<name>exec_dm8</name> <!-- EXEC 服务名,建议带目标库标识 -->
<login>
<dbtype>dm8</dbtype> <!-- 目标数据库类型 -->
<server>192.168.21.138</server> <!-- 目标数据库 IP -->
<user>TEST_DB</user> <!-- 目标端同步用户 -->
<pwd>Dameng123</pwd> <!-- 用户密码 -->
<port>5236</port> <!-- 目标数据库端口 -->
</login>
<!-- ===== 性能参数区域(根据实际资源调整) ===== -->
<work_thr>64</work_thr> <!-- 入库工作线程数,依据目标端 CPU 核数 -->
<site_buf_size>1024</site_buf_size> <!-- 站点私有缓冲区(MB),依据目标端内存 -->
<recv_buf_size>512</recv_buf_size> <!-- 消息接收缓冲区(MB),依据网络吞吐量 -->
<pub_buf_size>4096</pub_buf_size> <!-- 公用缓冲区(MB),依据目标端内存 -->
<load_thr>64</load_thr> <!-- 装载线程数,与 CPT 的 load_thr 一致 -->
<load_buf_limit>20480</load_buf_limit> <!-- 装载缓冲区上限(MB),依据目标端内存 -->
<enable_plan_pool>1</enable_plan_pool> <!-- 计划池1启用/0禁用,非DM/Oracle时选0 -->
<!-- ===== 分组执行配置 ===== -->
<group>
<item>
<id>0</id> <!-- 分组编号,0 为默认组 -->
<exec_policy>1</exec_policy> <!-- 执行策略:0并行/1顺序,建议1 -->
<error_policy>0</error_policy> <!-- 错误处理:0终止/1忽略/2MERGE -->
<merge_policy>2</merge_policy> <!-- 合并策略:0不合并/1串行/2无条件/3按行数 -->
<level>0</level>
<max_thrs>32</max_thrs>
</item>
</group>
<max_ckpt_num>500</max_ckpt_num> <!-- 检查点缓存文件最大数量,建议500~1000 -->
</exec>
</drs>

1.3.7 调整 binlog 权限(137,root)

chmod 644 /data/mysql/binlog.*
usermod -a -G mysql dmdba
#重新登录 dmdba 使组生效

1.3.8 启动服务

1.3.8.1 启动 EXEC(138,dmdba)
cd /data/dmdrs5/bin_exec_dm8_5345
export LD_LIBRARY_PATH=/data/dmdrs5/bin:/home/dmdba/dmdbms/bin:LD_LIBRARY_PATH nohup ./drsvr exec.xml >> exec.log 2>&1 & tail -20 exec.log # 检查启动是否成功 1.3.8.2 启动 CPT(137,dmdba) cd /data/dmdrs5/bin_cpt_mysql_5345 export LD_LIBRARY_PATH=/data/dmdrs5/bin:/usr/local/mysql/lib:LD_LIBRARY_PATH
nohup ./drsvr cpt.xml >> cpt.log 2>&1 &
tail -20 cpt.log # 检查启动是否成功

1.3.9 执行装载与启动同步

cd /data/dmdrs5/bin_cpt_mysql_5345
export LD_LIBRARY_PATH=/data/dmdrs5/bin:/usr/local/mysql/lib:$LD_LIBRARY_PATH
./drcsl cpt.xml
CSL> connect
CSL> alter cpt_mysql set lsn
CSL> alter cpt_mysql add table “sch.name=‘test_db’” CREATE|INSERT|INDEX
CSL> start cpt_mysql
CSL> show cpt_mysql load status
CSL> show cpt_mysql load table all
CSL> exit
命令说明:
alter cpt_mysql set lsn:设置起始 LSN,从当前数据库最新位置开始解析。
add table … CREATE|INSERT|INDEX:先创建表结构,再装载全量数据,最后创建索引。
start cpt_mysql:启动增量同步。
show cpt_mysql load status:查看装载状态,确认“装载错误对象”为 0。

1.3.10 验证同步

操作机器:137,用户:root
在 MySQL 插入新数据:
mysql -uroot -p -e “INSERT INTO test_db.empl1 VALUES (10,‘最终验证’,30,9999.00); COMMIT;”

操作机器:138,用户:dmdba
在 DM8 查询:
cd /home/dmdba/dmdbms/bin
./disql TEST_DB/Dameng123@localhost:5236 -e “SELECT * FROM TEST_DB.EMPL1;”

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服