DMHS 相关

DMHS 安装部署可参考文章:《DMHS 安装部署》

Dmhs 出现目的端同步 update 或 delete 操作出现报错:exec[ERROR] sync failed,fill row 1 该如何处理?

【问题解决】

dmhs 在做 update 或 delete 操作时会将源端的影响行数与目的端的影响行数进行对比,确保源端和目的端修改的行数是一样的。可通过修改 exec 的参数 affect_row 为 0。
affect_row:是否启用影响行数检查,可选 0(禁用)/1(启用),默认值 1。启动该项检查可以有效的保证同步的正确性,但是如果本身源库和目标库数据就不一致,则建议关掉该项检查,因为检查了也无意义,但打开了会频繁的打印出错信息,反而影响同步性能。
注意:该方法并不能解决源端和目的端数据不一致的问题,因此只适用于不要求源端和目的端数据一致的场景。

在进行单表数据对比时,dmhs_veri 对比工具如何限定数据的对比范围(即添加 where 条件)?

【问题解决】

对比工具 rev106302 及以后的版本支持该功能。涉及如下三个参数:
(1)COND:WHERE 条件,同时加到源端数据库和目的端数据库。
(2)COND_SRC:WHERE 条件,源端数据库。
(3)COND_DEST:WHERE 条件,目的端数据库。
注意对比命令格式,以 linux 环境为例:

./dmhs_veri conf=veri.xml "table=(DMHS.T1==SYSDBA.T1)" "COND=(ID>1 and ID<10)" mode=normal count=0

说明:1.此命令中指定数据范围对比一般首取参数 COND。COND_DEST、COND_SRC 需要在指定场景使用。
2.ID 列一般为主键列。

在进行模式名.*对比时,dmhs_veri 数据对比工具如何通过使用黑名单功能禁用某些表进行数据对比?

【问题解决】

dmhs_veri 数据对比工具 rev106302 版本之后支持黑名单过滤功能,即模式名.*对比时可以不对某些表进行数据对比。注意对比命令格式,以 linux 环境为例:

---禁用单表对比:
./dmhs_veri  jobname=test1 "table=(DMHS.*==DMHS.*) except_tables=\(DMHS.T1\) MODE=normal
---禁用多表对比:
./dmhs_veri  jobname=test1 "table=(DMHS.*==DMHS.*) except_tables=\(DMHS.T1,DMHS.T2\) MODE=normal

说明:目前此命令仅支持禁用少量表,否则命令超长执行不成功。

部署 mysql8.0 到 dm8 的 DMHS 数据同步时报错:initial log analysis module failure

【问题描述】

部署 mysql8.0 到 dm8 的 DMHS 数据同步,在源端 dmhs_console 执行 start cpt 时,出现以下报错:

dmhs_console 端报错信息:CSL[ERROR]: initial log analysis module failure,或者提示 execute success,且 dmhs_server 端出现如下报错信息:

CPT[INFO]: MYSQL_V3.1.2_D64
CPT[INFO]: MySQL lower_case_table_names is: 1
PUB[ERROR]: os_file_open_readonly open error, file: /home/data/mysql8028/8004/logs/0010108004-mysql-bin.000001, direct io flag: 0, errno: 13
CPT[ERROR]: File /home/data/mysql8028/8004/logs/0010108004-mysql-bin.000001 open error, failed to locate synchronization staring offset!
CPT[ERROR]: Failed to get rotate event log, binary log file () has not been added!
MGR[ERROR]: initial log analysis module failure
MGR[ERROR]: unable to start capture, ID no: 1

【问题解决】

出现该报错是因为 dmdba 没有权限读取 mysql binlog 导致的,解决办法有两种:
方法一:直接将 binlog 上层的 log 文件夹权限级联修改为 644 (效果等同添加 o+r 或 a+r 权限),如 chmod -R 644 /home/data/mysql8028/8004/logs
方法二:将 DMHS 运行程序用户组改为 MySQL,具体操作如下:
(1)将用户添加工作组,如 usermod -G dmdba mysql
(2)将 dmhs 执行目录赋予组权限。如:chown -R dmdba:mysql /opt/dmhs/bin
(3)切换成 dmdba 用户运行 dmhs 服务正常(备注:启动 dmhs 服务之前注意检查环境变量,例如此同步环境可能需要加载 libodbc.so.2 和 libmysqlclient.so.18 的相关路径)。

注意

一般情况下,建议使用方法二,方法一仅当 binlog 存放在单独文件夹时推荐使用,否则随着新的 binlog 文件产生,仍旧会出现该报错。

DMHS 配置文件用户密码是否可以加密?

【问题描述】

如下图所示的 DMHS 配置文件用户密码需要加密,明文显示不安全。

配置文件信息

【问题解决】

DMHS 配置文件中的用户密码可以加密,具体步骤如下:

1.通过控制台获取密码对应密文:

./dmhs_console 
DMHS> encrypt "123456"
密文:427f0c435836e8d9

2.在配置文件中使用密文。

修改配置文件

dmhs 目的端日志出现 ERROR 日志:SYSDBA.TEST01 table's col AA has too long data

【问题描述】:

dmhs 目的端日志出现 ERROR 日志:SYSDBA.TEST01 table's col AA has too long data, will be truncated destination prec 24, but input 45(xxxxxx)

【问题解决】:

分析:该报错表明,dmhs 向目的端 SYSDBA.TEST01 表中插入数据时 AA 的列值超长,插入值为"xxxxxx"。该报错的产生原因有两种:

(1)目的端数据库的列定义长度小于源端。

(2)源端和目的端对字符串长度计算不同。

解决:可通过将目的端的列定义长度增大,并重新手动插入该条数据解决。

微信扫码
分享文档
扫一扫
联系客服