该文章只讲述静态数据校验的情况(目前动态数据校验仅支持DM8和Oracle 10g以上的版本),比对的范围是:校验表结构以及表详细数据。
数据库类型 | 数据库名称 | 数据库IP地址 | 端口 |
---|---|---|---|
mysql 8.0.28 | cd-cloud-basic-ktqy | xxx.xx.xxx.146 | 3306 |
DM8 | DAMENG | xx.x.xxx.8 | 15245 |
安装DMDVS服务器的IP地址 | DMDVS端口 | 说明 |
---|---|---|
xxx.xx.xxx.96 | 5346 | 安装MySQL C API驱动与MySQL8连接安装DMDPI驱动与DM8数据库连接。 |
安装目录 | /mysql/dmdvs5 |
---|---|
执行程序目录 | /mysql/dmdvs5/bin |
配置文件路径 | /mysql/dmdvs5/bin/dvs.xml |
服务脚本模板目录 | /mysql/dmdvs5/bin/service_template |
服务脚本目录 | /mysql/dmdvs5/bin |
console远程控制工具 | /mysql/dmdvs5/bin/drcsl |
比对报告生成路径 | /mysql/dmdvs5/report |
源端(数据库) | 目的端(模式) |
---|---|
cd-cloud-basic-user1 | info_user1 |
源端MYSQL和目的端DM8的数据库环境原来就是搭建好的,MYSQL库中的数据通过DMDRS迁移到DM8并开启了增量数据实时同步。
CREATE USER dmdvs
@%
IDENTIFIED BY 'xxxxx';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON . TO dmdvs
@%
WITH GRANT OPTION;
CREATE TABLESPACE DMDVS DATAFILE 'DMDVS.DBF' SIZE 2048 AUTOEXTEND ON MAXSIZE 67108863;
CREATE USER "'DMDVS" IDENTIFIED BY "xxxxx" DEFAULT TABLESPACE "'DMDVS";
--这里为了使用方便授予了DBA权限,如果不方便授予DBA权限的,同步用户最小权限请参见DMDVS搭建手册。
GRANT "DBA" TO "'DMDVS";
$ ./dmdvs_rev182015_x86_rh6_64_20250220.bin -i
Extract install files.........
Please select the installer's language (E/e:English C/c:Chinese)[E/e]:c(c代表中文安装)
-----------欢迎使用达梦数据校验软件安装工具-----------
输入[exit]可退出安装。
-----------安装目录-----------
指定安装目录[/var/lib/cloudos/dmdvs5]:/mysql/dmdvs5(输入安装路径)
-----------安装组件-----------
请选择需要安装的组件
1.安装达梦数据融合管理平台(默认安装代理)
请选择安装组件数字序号(使用空格间隔):1(1默认安装代理)
选择的组件有:
1.安装达梦数据融合管理平台(默认安装代理)
"确认?[Y/y(确认选择) or N/n(重新选择)]:y(确认选择)
-----------许可证文件-----------
1.免费试用达梦数据校验软件(必须在试用期范围内使用,反复安装无效,使用时间为3个月)
2.使用许可证文件
指定许可证文件(1,2)[1]:2(指定许可证文件)
请输入许可证文件路径:/mysql/dmdvs_install/dmdvs.key(输入许可证全路径)
许可证文件限制信息如下:
有效日期:2025-09-25
授权顾客名称:达梦公司产品试用
项目名称:达梦公司产品试用
许可证编号:DD01900103
版本类型:试用版
-----------配置-----------
依赖环境配置 -数据库动态库路径[]:/usr/lib64/mysql:/mysql/dmdrs5/db/bin:/mysql/dmdvs5/bin(输入动态库路径)
注意:dvs配置IP不允许设置成127.0.0.1!
DVS配置-IP(100.100.2.125,172.64.116.139,172.64.116.140):172.64.116.140(用于代理的,如果不使用代理,这个地方随便输入一个非127.0.0.1的IP就行)
DVS配置-端口(5349):
DVS配置-站点号(1):
注意:代理配置IP不允许设置成127.0.0.1!
代理配置-代理IP(100.100.2.125,172.64.116.139,172.64.116.140):
请手动输入代理ip!
注意:代理配置IP不允许设置成127.0.0.1!
代理配置-代理IP(100.100.2.125,172.64.116.139,172.64.116.140):172.64.116.140(用于代理的,如果不使用代理,这个地方随便输入一个非127.0.0.1的IP就行)
代理配置-代理端口[19345]:
达梦数据融合管理平台配置-管理平台端口[8080]:
注意:密码必须至少8个字符,并且满足以下条件中的任意两项:数字、大写字母、小写字母、特殊字符(如!@#$%^&等)。
达梦数据融合管理平台配置-管理平台密码:
密码必须至少8个字符,并且满足以下条件中的任意两项:数字、大写字母、小写字母、特殊字符(如!@#$%^&等)。
注意:密码必须至少8个字符,并且满足以下条件中的任意两项:数字、大写字母、小写字母、特殊字符(如!@#$%^&等)。
达梦数据融合管理平台配置-管理平台密码:
达梦数据融合管理平台配置-管理平台确认密码:
是否使用外置库(0:不使用 1:使用 )[0]:
-----------安装小结-----------
安装目录:[/mysql/dmdvs5]
依赖环境配置-NEED_LIB_PATH:[/usr/lib64/mysql:/mysql/dmdrs5/db/bin:/mysql/dmdvs5/bin]
DVS IP:[172.64.116.140]
DVS 端口:[5349]
DVS 站点号:[1]
代理IP:[172.64.116.140]
代理端口:[19345]
达梦数据融合管理平台IP:[127.0.0.1]
达梦数据融合管理平台端口:[8080]
内置库信息:
数据库IP:[127.0.0.1]
数据库端口:[15236]
用户名:[SYSDBA]
密码:[ ****** ]
所需磁盘空间/可用磁盘空间:[2,185 MB/1,057,634 MB]
确认安装?[Y/y or N/n]:y(确认安装)
-----------安装中-----------
server start ... server finished.
default start ... default finished.
agent start ... agent finished.
web start ... web finished.
doc start ... doc finished.
db start ... db finished.
安装成功
------------解压完成----------
-----------系统服务-----------
内置数据库服务设置
1.注册系统服务
2.不注册系统服务
启动方式(1,2)[2]:
正在创建内置数据库服务....
达梦数据融合管理平台服务设置
1.注册系统服务
2.不注册系统服务
启动方式(1,2)[2]:
正在创建达梦数据融合管理平台服务....
达梦数据融合管理平台代理服务设置
1.注册系统服务
2.不注册系统服务
启动方式(1,2)[2]:
正在创建达梦数据融合管理平台代理服务....
正在启动服务[DmServiceDFDB]
无法连接数据库,请后续手动启动达梦数据融合管理平台!请先启动数据库后,进入到安装目录下的web目录,执行[./DfmWebService start]启动此程序.[./DfmWebService start]
正在启动服务[DfmAgentService]
-----------安装总结-----------
达梦数据校验软件V5安装完成
地址:http://127.0.0.1:8080
用户名/密码:admin/***
更多安装信息,请查看安装日志文件:/mysql/dmdvs5/log/install.log(安装完成)
DMDVS服务运行过程中,需要使用数据库的驱动文件访问数据库数据。源端MYSQL采用的接口是MySQL C API驱动来访问数据库,目的端DM8则采用DMDPI驱动来访问数据库。
(1)编辑.bash_profile配置文件
vi ~/.bash_profile
增加:
export LD_LIBRARY_PATH=OCI驱动路径:$LD_LIBRARY_PATH
驱动文件放在:/usr/lib64/mysql路径下,则增加:
export LD_LIBRARY_PATH=/usr/lib64/mysql:$LD_LIBRARY_PATH
需要说明的是:默认的MySQL C API驱动路径为:/usr/lib64/mysql,如果驱动放在这个路径下面,LD_LIBRARY_PATH未手动设置MySQL C API驱动路径的情况下,DMDVS启动后也会自动去这个路径下面搜索。
(2)保存后使环境变量生效
source ~/.bash_profile
(3)检查环境变量是否设置成功
cd /mysql/dmdvs5/bin
ldd libdbmysql.so
如上图,说明DMDVS已经读取到驱动了。
DMDPI的驱动配置和MySQL C API驱动配置一样。
需要说明的是:因这台服务器已经安装了DMDRS,DMDRS自带DMDPI驱动,驱动的路径是:/mysql/dmdrs5/db/bin,所以直接采用这个驱动。
(1)编辑.bash_profile配置文件
vi ~/.bash_profile
增加:
export LD_LIBRARY_PATH=/mysql/dmdrs5/db/bin:$LD_LIBRARY_PATH
(2)保存后使环境变量生效
source ~/.bash_profile
(3)检查环境变量是否设置成功
cd /mysql/dmdvs5/bin
ldd libdredm.so
如上图显示,则DMDVS已经读取到路径/mysql/dmdrs5/db/bin下的DMDPI驱动了。
到DMDVS的/mysql/dmdvs5/bin 目录下配置dvs.xml文件
vi dvs.xml
<drs>
<!--Manager管理模块是DMDVS服务的管理模块。在DMDVS服务的XML配置文件中,Manager管理模块参数对应<base></base>元素,包括Manager管理模块的端口号和站点号等参数。-->
<base>
<!----日志语言,ch:GB18030编码简体中文,默认值ch;ch-utf8:UTF-8编码简体中文;en:英文。-->
<lang>en</lang>
<!--Manager管理模块的端口号,取值范围:1000~65535,默认值为5349。-->
<mgr_port>5346</mgr_port>
<!--站点号。DMDVS服务的唯一标识,使用多个DMDVS服务时请确保唯一性。取值范围:1~30000。此参数为必配参数。-->
<siteid>10000</siteid>
<!--DMDVS服务的名称。用于标识DMDVS服务在Manager管理模块中的名称。默认值为本地主机的主机名前48个字符。-->
<name>compare</name>
</base>
<!--CMP模块是DMDVS服务的核心模块,主要提供数据校验、报告生成和数据修复等功能。在DMDVS服务的XML配置文件中,CMP模块参数对应<cmp></cmp>元素。-->
<cmp>
<!--Cache缓存库配置。该参数是一个功能标签,需要配置它的子项。-->
<cache>
<!--Cache缓存库以及数据校验时临时文件的存放路径。-->
<path>/mysql/dmdvs5/bin/cmp</path>
</cache>
<!--从校验数据库中批量查询的数据行数。取值范围:1~250,单位:行,默认值为250。-->
<batch_fetch_num>250</batch_fetch_num>
<!--DM7/DM8数据库中校验表分组查询的最小数据量行数。当数据量行数大于该值,校验软件就会对该表进行分组查询。取值范围:100000~10000000,单位:行,默认值为100000-->
<group_min_count>100000</group_min_count>
<!--校验软件缓存源数据库或者目标数据库数据的MD5值的缓冲区最大值。校验时源数据库和目标数据库数据的MD5都需要进行缓存,因此实际使用的最大值为max_md5_buf_size的两倍。-->
<max_md5_buf_size>1024</max_md5_buf_size>
<!--校验过程中是否需要过滤掉目标数据库中以“DMHS_”开头的老版本字典表和DMDRS V5版本中以"DRS"开头的字典表。0:不过滤。默认值为0。1:过滤。-->
<filter_drs_prefix>1</filter_drs_prefix>
<!--校验软件报告使用的最大缓冲区大小。取值范围:4~256,单位:MB,默认值为4。-->
<report_max_buffer>2048</report_max_buffer>
<!--校验报告生成目录。默认路径为当前运行目录的report下,建议根据磁盘情况设置。-->
<report_dir>/mysql/dmdvs5/report</report_dir>
<!--生成校验报告时查询差异数据的并行线程数。取值范围:1~5,默认值为2。-->
<report_group>5</report_group>
<!--校验软件连接源数据库、目标数据库或报告入外部数据库的最大连接数。最大不超过数据库的最大会话数,请根据实际情况设置,默认值为50。-->
<max_sessions>50</max_sessions>
<!--校验软件的字符集编码。校验软件运行窗体字符集须与cmp_char_code参数保持一致,否则可能会对校验结果产生影响。根据实际情况配置GB18030、GBK或者UTF-8编码。默认值为GBK。-->
<cmp_char_code>UTF-8</cmp_char_code>
</cmp>
</drs>
1.拷贝脚本模板
cd /mysql/dmdvs5/bin
cp service_template/TemplateService DmDvsService
2.修改服务脚本
#set execute environment
#REPLACE INSTALL_HOME path
INSTALL_HOME=/mysql/dmdvs5
#REPLACE program dir
PROG_DIR=/mysql/dmdvs5/bin
#REPLACE program config path
CONF_PATH=/mysql/dmdvs5/bin/dvs.xml
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=/mysql/dmdvs5/bin:/mysql/dmdrs5/db/bin
#REPLACE program name, drsvr/dssvr/dvsvr
EXEC_PROG_NAME="dvsvr"
#REPLACE service type, drs server/dss server/dvs server
SERVICE_TYPE_NAME="dvs server"
3.启动服务
./DmDvsService start
1.启动控制台工具
cd /mysql/dmdvs5/bin
./drcsl
2.连接DMDVS服务
CSL> connect 127.0.0.1:5346
3.添加源端数据源
CSL> cmp add db mysql sj_src "xxx.xx.xxx.146" zhjyy "xxxxx" 3306 "cd-cloud-basic-user1"
4.添加目的端数据源
CSL> cmp add db dm8 sj_dest "xx.x.xxx.8" DMDRS "xxxxx" 15245
5.添加比对作业,开始比对数据
CSL> cmp job jobname=cmp_sj_user1 sj_src sj_dest "cd-cloud-basic-user1.==info_user1."
1.如何查看dmdvs生成的日志?
答:dmdvs生成的日志在dmdvs安装路径的bin目录的log目录下,文件名称采用“dvs_年月.log”的方式,通过日志可以查看比对的进度以及报错情况。
2.如何查看比对的整体进度?
答:通过“show cmp_task 作业名”查看,如:show cmp_task cmp_sj_user1
如上图,可以查看到:已校验的表个数、需校验的表总个数、校验任务进度百分比等。
3.如何查看比对的每张表的详细校验进度?
答:通过“show cmp_table 作业名”查看,如:show cmp_table cmp_sj_user1
如上图,可以看到每一张表的校验开始时间、结束时间、校验进度等。
4.如何查看比对报告?
答:通过“show report 作业名”查看,如:show report cmp_sj_user1
此报告简洁、直观、明了,可以作为我方工作成果中的迁移报告反馈给相关方,省去了再单独编写迁移报告文档的工作。
除此以外,DMDVS还会在drs.xml中指定的report_dir目录(/mysql/dmdvs5/report)下生成一个名为“作业名称_编号”的目录。
这个目录里面就是数据比对的详细内容。
每个目录以及文件的内容说明如下:
(1)不一致的数据明细(detail目录)
0开头的txt文件代表源端不一致的数据明细。
1开头的txt文件代表目的端不一致的数据明细。
(2)不一致的数据rowid(detail_rowid目录)
0开头的txt文件代表源端不一致的数据的rowid。
1开头的txt文件代表目的端不一致的数据的rowid。
这个目录下的文件主要是DMDVS做数据修复的时候要用到。
(3)比对不一致的数据的汇总(diff_report.txt)
包含不一致的表名、源端行数、目的端行数、相同行数和不同行数。
(4)比对报告汇总(report.txt)
包含DMDVS版本、比对开始时间和结束时间,同时包含所有被比对的表名、源端行数、目的端行数、相同行数和不同行数。此报告亦可作为工作成果中的迁移报告反馈给相关方。
(5)临时文件(temp)
比对过程中产生的临时文件,正常情况下,比对完成后会将该目录删除。
5.如何采用DMDVS修复数据?
答:采用“cmp repair tab="数据库名(模式名).表名" from 作业名 编号”来修复数据。如:
cmp repair tab="cd-cloud-basic-user1.tab1" from cmp_sj_user1 16
但是,数据是动态的情况下,不推荐使用DMDVS来修复数据。
6.如何定位有差异的数据差异在哪个地方?
首先通过rowid找到表的主键,通过主键在源端和目的端查询出该数据。最直观的方法就是将两条数据拷贝到管理工具,每一列对齐,通过肉眼看是否能找到差异所在,如下:
可以看到是这一列的数据不一致。
另外,可以添加规则,通过DMDVS的debug功能来定位。
(1)根据唯一值列添加行过滤规则
cmp add rule rule_tab1 * "cd-czs-basic-user1.tab1" row_filter="id=1"
cmp add rule rule_tab1 * "qx_czs_user1.tab1" row_filter="id=1"
(2)使用行过滤规则对校验不一致的作业进行重新校验,且在校验时添加DEBUG掩码,打印该行每一列的数据值和数据长度。
cmp job jobname=cmp_diff1 qx1_src qx1_dest "cd-czs-basic-user1.tab1==qx_czs_user1.tab1" userule|rule_tab1|debug|1
也能看出数据的差异,但是,这个方法在表的列比较多的情况比较难发现差异的列。
7.比对MYSQL的数据存在什么特殊性吗?
(1)对于MYSQL的int(n) unsigned zerofill(n>1)数据类型,会导致DMDVS比对出的结果数据不一致。该数据类型中的n表示的是显示宽度,而不是存储长度。在显示查询结果时,该类型的字段会按照指定的宽度进行格式化,如果实际数值不足这个宽度,会在左侧用零填充至指定宽度。然而,这个显示宽度并不会影响实际的存储大小或范围。如int(11) unsigned zerofill,0的值会显示为00000000000
而迁移到达梦以后类型会变成int,0的值会显示为0。
所以数据实际上是一致的,可以忽略比对结果里面因这种情况造成的不一致。
(2)目前DMDVS不支持MYSQL数据库中包含JSON数据类型表的数据比对。DMDVS支持的MySQL数据类型如下:
|字符数据类型|CHAR、VARCHAR|
|-|-|-|
|数值数据类型|TINYINT、SAMLLINT、MEDIUMINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL|
|位串数据类型|BIT|
|日期时间数据类型|DATE、TIME、YEAR、DATETIME、TIMESTAMP|
|多媒体数据类型|TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、BINARY、VARBINARY|
8.数据比对中文乱码,字符集该怎么设置?
比对MYSQL和DM的数据的时候,两边的数据实际是一致的,但是DMDVS比对出来不一致,通过debug功能调试分析,根据打印出来的结果发现比对出的结果中文乱码。
查询MYSQL端数据库的字符集:SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_name='cloud_auth';
MYSQL端数据库的字符集是utf8,于是在dvs.xml中配置:<cmp_char_code>UTF-8</cmp_char_code>后比对正常。
字符集配置总结:设置数据校验工具参数cmp_char_code与数据库字符集保持一致,若源数据库和目标数据库字符集不一致则任意设置其一。(若DM6数据库与其他数据库校验,需保证环境变量LANG和数据校验工具参数cmp_char_code保持一致)。
文章
阅读量
获赞