注册
DMDRS之单向同步MySQL——DM(命令行)
专栏/数据追梦之路/ 文章详情 /

DMDRS之单向同步MySQL——DM(命令行)

Tomliu 2026/03/31 71 0 0
摘要 DMDRS复制软件是数据库柔性替换、数据动态迁移的好帮手,DMDRS支持的数据源种类很多,本文主要介绍MySQL——DM库的单向同步,DM目的端适用单机、主备、DSC共享集群。

1、关于部署一些规范建议

本文部署统一采用操作系统新建DMDRS用户,在数据库层面统一新建DMDRS用户赋权对库做读写操作。不是特别建议使用源端/目的端原有的操作系统用户/数据库用户来进行搭建部署,当然操作系统的root用户一定是不允许的,dmdrs软件安装时一定会拒绝进行的。

2、安装部署

2.1DM库配置(目的端)

2.1.1系统配置

---创建系统同步用户

[root@~]# mkdir -p /dm/DMDRS/setup
[root@~]# groupadd dmdrs -g 3001
[root@~]# useradd -g dmdrs dmdrs -u 2001
[root@~]# echo "dmdrs:dmdrs@1234" | chpasswd
[root@~]# chown dmdrs:dmdrs /dm/DMDRS -R
[root@~]# chmod 755 /dm/DMDRS -R

---服务器配置
---防火墙开5435,禁用防火墙的建议打开配置后关闭

[root@localhost ~]# firewall-cmd --add-port=5435/tcp --permanent 
success
[root@localhost ~]# firewall-cmd --reload 
success
[root@localhost ~]# 

2.1.2安装DMDRS

采用安装包安装,本文仅考虑命令行方式,无需安装达梦数据融合管理平台及代理的组件。
--参考过程步骤:

----dmdrs必须使用非root用户
[root@localhost setup]# su - dmdrs
[dmdrs@localhost ~]$ cd /dm/DMDRS/setup/
----tmp空间不足3G需要指定setup目录
[dmdrs@localhost setup]$ export DMDRS_INSTALL_TMPDIR=/dm/DMDRS/setup
[dmdrs@localhost setup]$ ./dmdrs_rev207725_x86_rh6_64_20251219.bin -i
---------------------------交互选择配置------------------------------------
Extract install files......... 

Please select the installer's language (E/e:English C/c:Chinese)[E/e]:c
-----------欢迎使用达梦数据复制软件安装工具-----------
输入[exit]可退出安装。
-----------安装目录-----------
指定安装目录[/home/dmdrs/dmdrs5]:/dm/DMDRS/dmdrs5
-----------安装组件-----------
请选择需要安装的组件
1.安装达梦数据融合管理平台
2.安装代理
请选择安装组件数字序号(使用空格间隔):
未选择组件
确认?[Y/y(确认选择) or N/n(重新选择)]:y
-----------许可证文件-----------
1.免费试用达梦数据复制软件(必须在试用期范围内使用,反复安装无效,使用时间为3个月)
2.使用许可证文件
指定许可证文件(1,2)[1]:2
请输入许可证文件路径:/dm/DMDRS/setup/dmdrs.key
许可证文件限制信息如下:
有效日期:2026-06-25
版本类型:试用版
许可证编号:BA01900927
授权顾客名称:达梦公司产品试用
项目名称:达梦公司产品试用
授权数据库类型:DM6、DM7、DM8、Oracle、SQL Server、MySQL、DB2、PostgreSQL
当前默认许可证文件支持数据库类型为[DM6、DM7、DM8、Oracle、SQL Server、MySQL、DB2、PostgreSQL],是否继续安装?[Y/y or N/n]:Y
-----------配置-----------
数据库驱动路径配置 -数据库驱动路径[]:/dm/dmdbms/bin
---驱动路径默认配置在/dm/DMDRS/dmdrs5/bin/service_template/TemplateService文件,后续可以更改
-----------安装小结-----------
安装目录:[/dm/DMDRS/dmdrs5]
数据库驱动路径:[/dm/dmdbms/bin]
所需磁盘空间/可用磁盘空间:[3,609 MB/23,232 MB]
确认安装?[Y/y or N/n]:y
-----------安装小结-----------
安装目录:[/dm/dmdrs]
数据库驱动路径:[/dm/dmdbms/bin]
所需磁盘空间/可用磁盘空间:[2,118 MB/8,337 MB]
确认安装?[Y/y or N/n]:y
-----------安装中-----------
server   正在安装 ...   server   安装完成.   
default   正在安装 ...   default   安装完成.   
doc   正在安装 ...   doc   安装完成.   
安装成功
-----------安装总结-----------
达梦数据复制软件V5安装完成
更多安装信息,请查看安装日志文件:/dm/dmdrs/log/install.log

2.1.3调整环境变量

---配置dmdrs用户LD_LIBRARY_PATH环境变量。

[dmdrs@localhost bin]$ echo 'export LD_LIBRARY_PATH=/dm/DMDRS/dmdrs5/bin:$LD_LIBRARY_PATH' >> ~/.bash_profile
[dmdrs@localhost bin]$ source ~/.bash_profile 

---核验libdrcdm8.so 依赖
DMDRS安装目录bin核验libdrcmysql.so组件的依赖是否完整,一般目的端DM的配置环境变量不缺组件。如果缺失,找组件或用动态链接处理。

2.1.4数据库配置

---创建DMDRS配置的同步用户
DM数据库创建DMDRS同步用户,并授权(最高权限)

CREATE USER DMDRS IDENTIFIED BY "dmdrs@1234";
GRANT PUBLIC,RESOURCE,DBA,SOI,VTI TO DMDRS;

---创建业务同步用户/模式
同步的业务用户或模式库需要提前在目的端库创建好,假设同步到达梦的TEST用户中,包括TEST模式和TEST2模式。

--创建数据表空间/索引表空间(初始128M,具体以业务实际情况而定
create tablespace "TBS_TEST" datafile 'TBS_TEST1.DBF' size 128 autoextend on next 2048;
--创建用户/指定数据表空间/指定索引表空间、赋予权限、取消限制
create user "TEST" identified by "test@1234" default tablespace "TBS_TEST" default index tablespace "TBS_TEST";
grant "PUBLIC","RESOURCE","VTI","SOI","SVI" to "TEST";
alter user "TEST" limit failed_login_attemps unlimited, password_lock_time unlimited, password_grace_time unlimited;
CREATE SCHEMA "TEST2" AUTHORIZATION "TEST";

2.1.5DMDRS后台服务配置注册

1、drs.xml同步文件配置
装载配置文件模板参考conf_sample/exec.xml配置,建议配置文件拷贝并重命名为DMDRS默认的配置文件drs.xml,避免后续启动服务、配置等需要指定drs配置文件。

--如果配置模板vi乱码的可以考虑iconv转化字符集或调整终端字符集显示即可
[dmdrs@localhost bin]$ iconv -f GB18030 -t UTF-8 /dm/DMDRS/dmdrs5/binconf_sample/exec.xml -o /dm/DMDRS/dmdrs5/bin/drs.xml
[dmdrs@localhost bin]$ vi drs.xml 
[dmdrs@localhost bin]$ cat drs.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port><!--如:5345-->
        <siteid>2</siteid><!--如:2-->
        <lang>ch-utf8</lang><!--如:ch\ch-utf8\en,避免终端、服务日志乱码-->
    </base>
    <exec>
        <name>exec_dm8</name><!--如:exec_dm8-->
        <login>
            <dbtype>dm8</dbtype><!--如:dm8-->
            <server>DW1</server><!--如:192.168.20.21,集群的配置为dm_svc.conf中的连接串-->
            <user>DMDRS</user><!--如:DMDRS-->
            <pwd>dmdrs@1234</pwd><!--如:DMDRS-->
            <port>15236</port><!--如:5236-->
        </login>
    </exec>
</drs>
[dmdrs@localhost bin]$ 

2、配置后台服务

--后台服务需拷贝service_template/TemplateService到bin目录后进行配置,主要配置部分如下:
[dmdrs@localhost bin]$ cp /dm/DMDRS/dmdrs5/bin/service_template/TemplateService /dm/DMDRS/dmdrs5/bin/DrsServiceDRS
[dmdrs@localhost bin]$ vi DrsService 
……
#REPLACE INSTALL_HOME path
INSTALL_HOME=/dm/DMDRS/dmdrs5
#REPLACE program dir
PROG_DIR=/dm/DMDRS/dmdrs5/bin
#REPLACE program config path
#If drs server is BP node and wants to startup without drs.xml,please specify the running port in CONF_PATH,for example,CONF_PATH="-port 5345"
CONF_PATH=/dm/DMDRS/dmdrs5/bin/drs.xml
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=/dm/mysql/svr/mysql57/lib

#REPLACE program name, drsvr/dssvr/dvsvr
EXEC_PROG_NAME=drsvr
#REPLACE service type,  drs server/dss server/dvs server
SERVICE_TYPE_NAME="drs server"

3、注册后台服务

[root@localhost ~]# cd /dm/DMDRS/dmdrs5/scripts/root/
[root@localhost root]# ./service_installer.sh -s /dm/DMDRS/dmdrs5/bin/DrsService 
Created symlink /etc/systemd/system/multi-user.target.wants/DrsServiceDRS.service → /usr/lib/systemd/system/DrsServiceDRS.service.

创建服务(DrsServiceDRS)完成

2.2MySQL安装(源端)

2.2.1系统配置

--创建同步系统用户

[root@~]# mkdir -p /dm/DMDRS/setup
[root@~]# groupadd dmdrs -g 3001
[root@~]# useradd -g dmdrs dmdrs -u 2001
[root@~]# echo "dmdrs:dmdrs@1234" | chpasswd
[root@~]# chown dmdrs:dmdrs /dm/DMDRS -R
[root@~]# chmod 755 /dm/DMDRS -R
--查看用户 mysql 所属的所有组
[root@~]# groups mysql
--将用户 dmdrs 添加到 mysql 组
[root@~]# usermod -aG mysql dmdrs
--查看用户 dmdrs 所属的所有组,确保添加成功
[root@~]# groups dmdrs

--服务器配置

---防火墙开5435,禁用防火墙的建议打开配置后关闭
[root@localhost ~]# firewall-cmd --add-port=5435/tcp --permanent 
success
[root@localhost ~]# firewall-cmd --reload 
success
[root@localhost ~]# 

2.2.2安装DMDRS

过程参考目的端安装DMDRS过程,仅注意:数据库驱动路径配置为MySQL库的bin目录,如:/dm/mysql/svr/mysql57/lib

2.2.3调整环境变量

1、配置dmdrs用户LD_LIBRARY_PATH环境变量。

[dmdrs@localhost bin]$ echo 'export LD_LIBRARY_PATH=/dm/mysql/svr/mysql57/lib:/dm/DMDRS/dmdrs5/bin:$LD_LIBRARY_PATH' >> ~/.bash_profile
[dmdrs@localhost bin]$ source ~/.bash_profile 

2、核验libdrcmysql.so依赖
DMDRS安装目录bin核验libdrcmysql.so组件的依赖是否完整。

[dmdrs@localhost bin]$ cd /dm/DMDRS/dmdrs5/bin
[dmdrs@localhost bin]$ ldd ./libdrcmysql.so 
    linux-vdso.so.1 (0x00007ffc395d8000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fb5796e6000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fb579364000)
    librt.so.1 => /lib64/librt.so.1 (0x00007fb57915c000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb578f3c000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fb578d38000)
    libdrpub.so => ./libdrpub.so (0x00007fb577497000)
    libdrnet.so => ./libdrnet.so (0x00007fb57727f000)
    libdrcache.so => ./libdrcache.so (0x00007fb57701a000)
    libmysqlclient.so.18 => not found
    libdrxml.so => ./libdrxml.so (0x00007fb576e0a000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb579f15000)
--一般libmysqlclient.so.*的会报错not found,一般在mysql驱动中查找libmysqlclient.so的组件,然后做软链接处理。
--查找libmysqlclient.so的组件位置
[mysql@localhost mysql]$ find /dm/msyql -name libmysqlclient.so.*
--方式一:dmdrs环境变量中指定了mysql驱动lib库,可在该lib库目录直接创建软链接
[mysql@localhost mysql]$cd /dm/mysql/svr/mysql57/lib
[mysql@localhost mysql]$ln -s /dm/mysql/svr/mysql57/lib/libmysqlclient.so.20 /dm/mysql/svr/mysql57/lib/libmysqlclient.so.18
---方式二:cp mysql对应驱动到dmdrs目录并在环境变量指定该目录
[dmdrs@localhost bin]$ cp /dm/mysql/svr/mysql57/lib/libmysqlclient.so.20 /dm/DMDRS/dmdrs5/bin/libmysqlclient.so.18

#2.2.4 数据库配置
1、配置同步用户及权限
方式一:最高权限
指定同步用户DMDRS按最高权限配置,创建配置如下:

GRANT ALL PRIVILEGES ON *.* TO 'DMDRS'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

方式二:最小权限
涉及到mysql多个库的情况,需要一次性授权。
--MySQL源数据库同步用户最小权限脚本示例

-- 1、基础权限
-- 需要连接登录权限(用户创建时默认授予)仅连接权限,相比CREATE USER权限更小
GRANT USAGE ON *.* TO 'DMDRS'@'localhost' IDENTIFIED BY 'your_password';
-- 需要检查进程信息
GRANT PROCESS ON *.* TO 'DMDRS'@'localhost';
-- 需要检查归档状态
GRANT REPLICATION CLIENT ON *.* TO 'DMDRS'@'localhost';
-- 远程日志读所需权限
GRANT REPLICATION SLAVE ON *.* TO 'DMDRS'@'localhost';
-- 2、装载相关权限
-- 需要待装载表的查询权限(涉及到多个库的均需指定,<待装载表的表名>如果无需指定,可以用*,表示该库的所有表)
GRANT SELECT ON <待装载表的模式名>.<待装载表的表名> TO 'DMDRS'@'localhost'; 
-- 需要待装载表的锁表权限(涉及到多个库的均需指定,<待装载表的表名>如果无需指定,可以用*,表示该库的所有表)
GRANT LOCK TABLES ON <待装载表的模式名>.<待装载表的表名> TO 'DMDRS'@'localhost';
-- 3、同步相关权限
-- 需要待同步表的查询权限(涉及到多个库的均需指定,<待装载表的表名>如果无需指定,可以用*,表示该库的所有表)
GRANT SELECT ON <待同步表的模式名>.<待同步表的表名> TO 'DMDRS'@'localhost';
-- 4、刷新权限
FLUSH PRIVILEGES;
说明:可能报错“MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work”。意味着 MySQL 服务器在启动时启用了 --skip-name-resolve 参数,该参数使得 MySQL 不解析主机名,它只使用 IP 地址来进行授权,可以将sql脚本中localhost改为127.0.0.1或实际ip或者%允许所有。

2.2.3 DMDRS后台服务配置注册

1、drs.xml同步文件配置
装载配置文件模板参考conf_sample/cpt.xml配置,建议配置文件拷贝并重命名为DMDRS默认的配置文件drs.xml,避免后续启动服务、配置等需要指定drs配置文件。

--如果配置模板vi乱码的可以考虑iconv转化字符集或调整终端字符集显示即可
[dmdrs@localhost bin]$ iconv -f GB18030 -t UTF-8 /dm/DMDRS/dmdrs5/bin/conf_sample/cpt.xml -o /dm/DMDRS/dmdrs5/bin/drs.xml
[dmdrs@localhost bin]$ vi drs.xml 
[dmdrs@localhost bin]$ cat drs.xml 
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port><!--如:5345-->
        <siteid>1</siteid><!--如:1-->
        <lang>ch-utf8</lang><!--如:ch\ch-utf8\en,避免终端、服务日志乱码-->
    </base>
    <cpt>
        <name>cpt_mysql</name><!--如:cpt_dm8-->
        <login>
            <dbname>test</dbname><!--mysql必须指定,对应库名,多个库的指定一个即可,不影响同步-->
            <dbtype>MYSQL</dbtype><!--如:dm8-->
            <server>127.0.0.1</server><!--如:192.168.20.24-->
            <user>DMDRS</user><!--如:DMDRS-->
            <pwd>dmdrs@1234</pwd><!--如:DMDRS-->
            <port>3306</port><!--如:5236-->
        </login>
        <send>
            <ip>192.168.113.21</ip><!--如:192.168.20.21-->
            <port>5345</port><!--如:5345-->
            <target_name>exec_dm8</target_name><!--如:exec_dm8-->
	    <ddl_mask>OBJ:OP</ddl_mask>
            <enable_check_date>1</enable_check_date><!--默认0禁用。校验源DMDRS发送的数据中日期时间值的合法性,如果日期时间值不合法,即小于1900-01-01 00:00:00或者大于9999-12-31 23:59:59,都会被替换为1900-01-01 00:00:00-->
            <map>
                <item>test.*==TEST.*</item><!--如:*.*==*.*-->
                <item>test2.*==TEST2.*</item><!--如:*.*==*.*-->
            </map>
        </send>
    </cpt>
</drs>

2、配置后台服务
后台服务需拷贝service_template/TemplateService到bin目录后进行配置,主要配置部分如下:

[dmdrs@localhost bin]$ cp /dm/DMDRS/dmdrs5/bin/service_template/TemplateService /dm/DMDRS/dmdrs5/bin/DrsServiceDRS
[dmdrs@localhost bin]$ vi DrsService 
……
#REPLACE INSTALL_HOME path
INSTALL_HOME=/dm/DMDRS/dmdrs5
#REPLACE program dir
PROG_DIR=/dm/DMDRS/dmdrs5/bin
#REPLACE program config path
#If drs server is BP node and wants to startup without drs.xml,please specify the running port in CONF_PATH,for example,CONF_PATH="-port 5345"
CONF_PATH=/dm/DMDRS/dmdrs5/bin/drs.xml
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=/dm/mysql/svr/mysql57/lib

#REPLACE program name, drsvr/dssvr/dvsvr
EXEC_PROG_NAME=drsvr
#REPLACE service type,  drs server/dss server/dvs server
SERVICE_TYPE_NAME="drs server"

3、注册后台服务

[root@localhost ~]# cd /dm/DMDRS/dmdrs5/scripts/root/
[root@localhost root]# ./service_installer.sh -s /dm/DMDRS/dmdrs5/bin/DrsService 
Created symlink /etc/systemd/system/multi-user.target.wants/DrsServiceDRS.service → /usr/lib/systemd/system/DrsServiceDRS.service.

创建服务(DrsServiceDRS)完成

#3 数据装载与同步
DMDRS服务CPT/EXE默认中参数auto_run表示手动或自动启动CPT/EXEC模块,默认为自启,对于EXE模块只要DRS服务启动则自动启动;对于CPT模块,除DRS初次启动为停止状态需要手动启动外,多次重启DRS服务,CPT模块状态取决重启DRS服务前的状态。因此数据状态与同步DRS服务均已后台服务启动即可,CPT模块根据装载/同步需求drcsl控制台中操作即可。

3.1启动dmdrs服务

--源端/目的端:

[dmdrs@localhost bin]$ cd /dm/DMDRS/dmdrs5/bin
[dmdrs@localhost bin]$ ./DrsService start

3.2全量装载

--drcsl命令行执行装载命令(不启动cpt模块)

[dmdrs@localhost bin]$ ./drcsl 
CSL[INFO]: CONSOLE TOOL DRS5: V5.2.5.3-Build(2025.12.17-207725_trunc)_64
CSL> alter cpt_mysql add TABLE "SCH.NAME='test' or SCH.NAME='test2'" CREATE|INSERT|INDEX|TABLE|CHECK|GROUP|TIME
CSL[INFO]: [INPUT CMD: alter cpt_mysql add TABLE "SCH.NAME='test' or SCH.NAME='test2'" CREATE|INSERT|INDEX|TABLE|CHECK|GROUP|TIME]
MGR[INFO]: 获取到装载掩码组合 mask: |CREATE|DROP|INSERT|INDEX|TABLE|CHECK|GROUP|TIME
命令执行成功 
CSL> 

注意:需要清空已装载数据需要搭配DROP掩码。
装载后需要查看dmdrs服务日志,确认所有对象装载成功并结束,参考标志日志如下:

--目的端显示装载结束:
2026-03-17 01:29:29 cpt_mysql[LD01][INFO]: 表结束装载,同步被激活 table: TEST.train_seminar_user[6]
2026-03-17 01:29:30 cpt_mysql[LD01][INFO]: 本次装载结束 
--源端显示:
2026-03-17 01:29:30 cpt_mysql[LD][INFO]: 所有表都已经装载结束,全部成功 
2026-03-17 01:29:30 cpt_mysql[LD][INFO]: 本次装载结束 

如果存在失败,基数特别大的,可以考虑单独装载,相关装载命令可在drcsl中执行help查看。

3.3启动dmdrs同步

源端启动cpt模块:

[dmdrs@localhost bin]$ ./drcsl 
CSL[INFO]: CONSOLE TOOL DRS5: V5.2.5.3-Build(2025.12.17-207725_trunc)_64
CSL> alter cpt_mysql add TABLE "SCH.NAME='test' or SCH.NAME='test2'" 
CSL> start
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服