注册
DMDRS单向同步mysql5.7--dm8(三)
专栏/技术分享/ 文章详情 /

DMDRS单向同步mysql5.7--dm8(三)

9999 2026/08/28 102 1 0
摘要

本次谈论的是单向mysql5.7—DM8的迁移。
通过DMDRS,将源数据库模式basinfocent_db库下所有表的全量数据和增量数据同步到目标数据库dm8的MYSQL模式下面。

1.环境介绍

image.png
image.png

2.源数据库的准备工作

2.1 源数据开启binlog日志

DMDRS通过分析mysql数据库的binlog日志来捕获数据库的增量数据,在配置文件my.cnf中需要开启如下参数,当包含LOB数据的同步时,需要设置max_allowed_packet参数
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=row
max_allowed_packet=100M

2.2 源数据库设置MySQL C API的环境变量

源DMDRS服务:需要使用MySQL C API驱动文件访问MySQL源数据库数据,用户需要在源DMDRS服务器的环境变量中添加MySQL C API驱动文件路径。
上传MYSQL C API软件mysql-connector-c+±8.0.33-linux-glibc2.28-x86-64bit.tar.gz解压配置环境变量
[dmdba@impdb ~]$ cat .bash_profile
image.png

2.3 源dmdba用户加入mysql用户组中

将dmdba加入组mysql中,不然会报如下错误
2026-08-19 11:14:24 cpt_mysql[ERROR]: DRS-1005 文件打开失败 path: /data/mysql/mysql/mysql-bin.000001 code: 13
2026-08-19 11:14:24 cpt_mysql[ERROR]: DRS-5323 打开Binlog日志文件失败 file: /data/mysql/mysql/mysql-bin.000001
2026-08-19 11:14:24 cpt_mysql[INFO]: 线程退出 THR: READ
2026-08-19 11:14:24 cpt_mysql[INFO]: 线程退出 THR: SEND
[root@impdb ~]# usermod -a -G mysql dmdba
[root@impdb ~]# id mysql
uid=1002(mysql) gid=1003(mysql) groups=1003(mysql)
[root@impdb ~]# id dmdba
uid=12348(dmdba) gid=1004(dinstall) groups=1004(dinstall),1001(oinstall),1002(dba),1003(mysql)

2.4 源数据库环境的检查

使用ldd命令,查看libdrcmysql.so依赖的MySQL客户端库版本,默认是依赖libmysqlclient.so.18。
如果源数据库版本为MySQL 8及以上版本,对应数据库的客户端库可能为libmysqlclient.so.21或以上版本。
[root@impdb ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.44, for linux-glibc2.12 (x86_64) using EditLine wrapper
[root@impdb ~]# ldd /usr/local/mysql/lib/libmysqlclient.so.20
linux-vdso.so.1 => (0x00007ffd08332000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa7fb9a6000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa7fb7a2000)
librt.so.1 => /lib64/librt.so.1 (0x00007fa7fb59a000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fa7fb292000)
libm.so.6 => /lib64/libm.so.6 (0x00007fa7faf90000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa7fad7a000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa7fa9ac000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa7fc54f000)

2.5 创建源数据库同步用户basi

请源数据库管理员和目标数据库管理员分别创建数据库同步用户DMDRS,并赋予同步所需权限。建议源数据库DMDRS用户不赋予DBA权限,赋予同步所需的最小权限即可,建议目标数据库DMDRS用户赋予DBA权限,如果不能赋予DBA权限,为确保同步的正确性,需赋予DMDRS用户同步所需的最小权限,
image.png
[root@impdb ~]# mysql -ubasi -pbasi
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| basinfocent_db |
±-------------------+
2 rows in set (0.00 sec)

2.6 创建目标数据库同步用户MYSQL

CREATE USER MYSQL IDENTIFIED by “MYSQL123456”;
GRANT PUBLIC TO MYSQL;
GRANT RESOURCE TO MYSQL;
GRANT SOI,VTI TO MYSQL;
GRANT CREATE SESSION TO MYSQL;
GRANT INSERT ANY TABLE TO MYSQL;
GRANT UPDATE ANY TABLE TO MYSQL;
GRANT DELETE ANY TABLE TO MYSQL;
GRANT SELECT ANY TABLE TO MYSQL;
GRANT SELECT ANY SEQUENCE TO MYSQL;
GRANT COMMENT ANY TABLE TO MYSQL;
GRANT CREATE ANY TABLE TO MYSQL;
GRANT ALTER ANY TABLE TO MYSQL;
GRANT DROP ANY TABLE TO MYSQL;
GRANT CREATE TABLE TO MYSQL;
GRANT ALTER TABLE TO MYSQL;
–GRANT DROP TABLE TO MYSQL;
–GRANT EXECUTE ON PROCEDURE “DRS_$DDL_SQL_PROC” TO MYSQL;
GRANT CREATE PROCEDURE TO MYSQL;

3.DMDRS的配置

3.1.源DMDRS的配置

源数据库是mysql单机
image.png

3.2.目标DMDRS的配置

image.png

4 DMDRS的运行

4.1目标dmdrs的运行

将服务脚本模板TemplateService拷贝到服务脚本目录并修改服务脚本的名称为DrsService。
[dmdba@localhost service_template]$ cp TemplateService /home/dmdba/dmdrs/release/DrsService
[dmdba@localhost release]$ chmod +x DrsService
vi DrsService
INSTALL_HOME=/home/dmdba/dmdrs
PROG_DIR=/home/dmdba/dmdrs/bin
CONF_PATH=/home/dmdba/dmdrs/release/exec.xml
NEED_LIB_PATH=_REPLACE_SELF_NEED_LIB_PATH
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”

前台启动测试是否报错:drsvr相当于disql命令行的命令
[dmdba@localhost release]$ ./drsvr exec.xml
MGR[INFO]: DRS start up, current version: V5.2.5.3-Build(2026.02.03-213013_trunc)64 (X86)(Enterprise Edition)
MGR[WARN]: mem_size参数配置过大,超过系统剩余内存大小 mem_size: 16G, total_free_size: 12G
MGR[INFO]: 模块被加载 module: exec_dm8
MGR[INFO]: 正在初始化缓存模块 path: ./exec_dm8/CACHE_exec_dm8, cache size: 512 MB
MGR[INFO]: SITEID: 5 NAME: localhost.localdomain MEMCHECK: 0 PORT: 5345 GROUP: 0 VERSION: 1 PATH: exec.xml
MGR[INFO]: 模块正在启动 module: exec_dm8
EXE[WARN]: 如快装表名中含有中文,需要手动设置LANG字符集与目标数据库保持一致 db_char_code: GB18030
EXE[INFO]: 执行端设置字符集 char_code: GB18030
MGR[INFO]: 模块已经处于运行状态 module: exec_dm8
CMD>EXE[INFO]: 建序列同步过程 proc: DRS
$SEQ_SYNC_PROC
EXE[INFO]: EXEC: DBTYPE:DM8 SERVER=215.244.12.36;USER=DMDRS;PORT=5236;
这个运行成功后,就退出否则后面启动会报错

启动目标DMDRS服务
[dmdba@localhost release]$ ./DrsService status
DrsService is stopped
[dmdba@localhost release]$ ./DrsService start
Starting DrsService: [ OK ]

4.2 启动源dmdrs的运行

[dmdba@impdb service_template]$ cp TemplateService …/DrsService
[dmdba@impdb service_template]$ vi DrsService
INSTALL_HOME=/home/dmdba
PROG_DIR=/home/dmdba/release
CONF_PATH=/home/dmdba/release/cpt.xml
NEED_LIB_PATH=/home/dmdba/drs
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”
[dmdba@impdb release]$ ./DrsService start
Starting DrsService: [ OK ]

5.管理服务

5.1 源dmdrs启动cpt.xml数据传输

[dmdba@impdb release]$ ./drcsl cpt.xml
CSL[INFO]: CONSOLE TOOL DRS5: V5.2.5.3-Build(2026.02.03-213013_trunc)_64
CSL[WARN]: mem_size参数配置过大,超过系统剩余内存大小 mem_size: 16G, total_free_size: 13G
CSL>connect
CSL> alter cpt_mysql add table “sch.name=‘basinfocent_db’”
CSL[INFO]: [INPUT CMD: alter cpt_mysql add table “sch.name=‘basinfocent_db’”]
MGR[INFO]: 获取到装载掩码组合 mask: |CREATE|INSERT|INDEX|TABLE|CHECK
命令执行成功
image.png
image.png

5.2 源和目标查看表的数量是一致的

源:
image.png
目标:
image.png

5.3.源新增表ycy

image.png
源端drs_202608.log 日志中可以看到捕获的语句
image.png
目标端可以看到新增的表ycy
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服