OMS社区版增量迁移Store组件出现错误:未找到可用的 Store,创建 JDBCWriter 失败,请检查子主题

【 使用环境 】测试环境
【 组件版本 】
OMS社区版3.3.0
源数据库:Mariadb10.3
目的数据库:OceanBase社区版3.1.3
【问题描述】

创建迁移工程,已完成全量迁移步骤,进行增量迁移步骤时出现错误:

FOUND_NO_FEASIBLE_STORE_ERROR
未找到可用的 Store,创建 JDBCWriter 失败,请检查子主题 p_3v4kc1m7afvk_source-000-0 下是否有可用的 store 进程覆盖位点 1657012621。

查看运维监控-组件-Store列表,状态显示:非预期退出

查看日志:
store.log提示错误可能导致此问题:
load func checkVersion from lib64/reader/mysql-reader/libXClusterReader.so failed when call dlopen,error:lib64/reader/mysql-reader/libXClusterReader.so: cannot open shared object file: No such file or directory

cango.log中错误提示 表不存在,但已成功进行全量迁移成功,表肯定存在

Get trs_baosong.t_report_policy_manage error 32: (null) Table 'trs_baosong.t_report_policy_manage' doesn't exist=>select * from trs_baosong.t_report_policy_manage limit 1

请大佬们帮忙分析下问题,我该如何解决

【附件】
congo.log (22.6 KB)
store.log (3.2 KB)

首先用数据源配置的账户密码登录到源端mysql查询这张表看下

登录查询情况如下:

OMS源端配置如下:
image

全量迁移已经把数据全部同步到OceanBase了,但是增量迁移却报错表不存在。

发下p_3v4kc1m7afvk_source-000-0这个目录下的日志呢?

经查看p_3v4kc1m7afvk_source-000-0这个目录下的日志,meta.log。报错信息为:
[error] [MetaDataBuilder.cpp:2262] ddl run failed: Index column size too large. The maximum column size is 767 bytes.=>CREATE TABLE t_report_policy_manage 。。。。
源库中该表的索引字段只有主键id字段,主键是由雪花算法生成的ID序列,类型为varchar(255),例如:1078623776529846272。源库中id字段的编码为utf8mb4,应该是4字节字符,当索引最大限制是 767 bytes时,那么一个 varchar 字段:767/4=191,最大只能支持varcha(191),是这个原因导致的报错吗,但是mysql里没有出现问题。OceanBase是否支持设置允许创建长字节索引?

日志导出:
meta.log (313.1 KB)

全量迁移已经成功了,而且OceanBase里也能看到表和数据,增量的时候为什么会再次执行创建表的语句呢?这个创建表的语句到底是在源库执行的还是OceanBase里执行的呢?

已经定位到问题了,是OMS对Mariadb10.3这个版本的兼容性不足导致的,跟OceanBase本身的索引长度没有关系的。我们会在下个版本优化这个兼容性问题~

这两个问题实际上都涉及到OMS的内部实现,简单来说:就是在增量迁移过程中OMS需要通过DDL重放的方式来维护被迁移数据库的元数据信息。你遇到这个问题就是在DDL重放过程中出现的,所以跟源数据库以及OceanBase都没有关系的。

1 个赞