oms全量同步问题


社区版,oms4.2.2版本,oceanbase版本4.2.1.4
我调用api来创建迁移项目,调用接口是/api/v2?Action=CreateProject,
我的body内容如下,{
“name”: “test-cdc”,
“type”: “MIGRATION”,
“sourceEndpointId”: “e_5pr7xei6g0gw”,
“sinkEndpointId”: “e_5pr8ciatnzz4”,
“transferMapping”: {
“mode”: “WILDCARD”,
“databases”: [
{
“mappedName”: “test1”,
“name”: “test1”,
“id”: null,
“tables”: [
{
“name”: “"
}
],
“views”: [
{
“name”: "

}
],
“specificTables”: null,
“specificViews”: null
}
],
“tableAndViewWhiteList”: [
“test1.*”
],
“tableAndViewBlackList”: []
},
“commonTransferConfig”: {
“tableCategory”: null,
“activeActive”: false,
“mqSerializerType”: null,
“mqPartitionMode”: null,
“mqPartition”: 0,
“datahubTopicType”: null,
“rocketMqProducerGroup”: null,
“rocketMqMsgTags”: null,
“rocketMqEnableMsgTrace”: null,
“rocketMqSendMsgTimeout”: null,
“dataWorksBusinessName”: null
},
“enableStructTransfer”: true,
“structTransferConfig”: {
“byteCharConvertStrategy”: “DO_NOTHING_IF_BYTE_USED”,
“deferIndexCreation”: true
},
“enableFullTransfer”: true,
“enableFullVerify”: true,
“fullTransferConfig”: {
“nonePkUkTruncateDstTable”: null,
“allowDestTableNotEmpty”: false,
“fullTransferSpeedMode”: “STEADY”,
“fullVerifySpeedMode”: “STEADY”
},
“enableIncrTransfer”: true,
“enableReverseIncrTransfer”: false,
“incrTransferConfig”: {
“startTimestamp”: 1715090182,
“recordTypeWhiteList”: [
“DELETE”,
“INSERT”,
“UPDATE”,
“DDL”
],
“storeLogKeptHour”: 120,
“enableSequencingWithinTxn”: null,
“incrSyncConcurrency”: null,
“enableIncrSyncStatistics”: null
}
}, 然后调用/v2?Action=StartProject接口启动,在预检查的时候报错


,我手动进行操作填写了参数预检查通过了,我应该如何修改我创建项目的body呢。


缺少权限,添加一下,如果不确定给什么权限,可以试下最高权限

那这个怎么授权呢,是在源端的数据库用户u__oceanbase_inner_drc_user@sys#obcluster登录执行GRANT SELECT ON *.* TO @sys#obcluster语句还是使用root@sys#obcluster登录执行GRANT SELECT ON *.* TO @sys#obcluster语句还是执行什么别的语句呢。

另外这个报错怎么解决呢, 预检查在数据源 jdbc:oceanbase://10.xxxxx:2883 上执行失败,报错信息:检查 @sys#obcluster 的权限失败,原因:[ENDPOINT_QUERY_ERROR] {“endpointName”:“ob-src”,“message”:“Could not connect to address=(host=10.)(port=2883)(type=master) : Could not connect to 10.xxxxxxx:2883 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server)”}。这个报错是源端- sys 租户下 drcUser 对库 oceanbase 的读权限检查,我没有创建这个drcUser,这个drcUser用户的用户名是啥呢

oceanbase_inner_drc_user授权方式可以看看这个。image
源端得用户吧。你试试

这个参考文件打不开,另外我想知道 源端- sys 租户下 drcUser 对库 oceanbase 的读权限检查,我没有这个用户,但是我不知道这个用户名是啥,就是drcUser吗

create user ‘__oceanbase_inner_drc_user’@’%’ IDENTIFIED BY ‘XXX’;
GRANT ALL PRIVILEGES ON . TO __oceanbase_inner_drc_user WITH GRANT OPTION;

还是不行,依然还是以前的报错, 我给__oceanbase_inner_drc_user授过权了,我应该怎么做呢




我使用控制面进行启动的时候主要是添加了drcUser的信息和__oceanbase_inner_drc_user密码两步就可以了,是不是需要在我创建项目请求的body里面加上drcUser和__oceanbase_inner_drc_user的参数呢,

oms管控上是否可以了?
如果oms页面管控可以了说明这个用户已经可以了
api调用有问题,说明你要新建的链路的表有无主键表,需要使用__oceanbase_inner_drc_user这个用户

调用api还是不行的,我源数据源的租户新建了一个数据库,然后启动项目,在运行时还是报错,我需要如何修改呢




我创建项目的body如下:
{
“name”: “test-ans”,
“type”: “MIGRATION”,
“sourceEndpointId”: “e_5ptscjstvk68”,
“sinkEndpointId”: “e_5ptsco5t1cdc”,
“transferMapping”: {
“mode”: “WILDCARD”,
“databases”: [
{
“mappedName”: “ans”,
“name”: “ans”,
“id”: null,
“tables”: [
{
“name”: “"
}
],
“views”: [
{
“name”: "

}
],
“specificTables”: null,
“specificViews”: null
}
],
“tableAndViewWhiteList”: [
“ans.*”
],
“tableAndViewBlackList”: []
},
“commonTransferConfig”: {
“tableCategory”: null,
“activeActive”: false,
“mqSerializerType”: null,
“mqPartitionMode”: null,
“mqPartition”: 0,
“datahubTopicType”: null,
“rocketMqProducerGroup”: null,
“rocketMqMsgTags”: null,
“rocketMqEnableMsgTrace”: null,
“rocketMqSendMsgTimeout”: null,
“dataWorksBusinessName”: null
},
“enableStructTransfer”: true,
“structTransferConfig”: {
“byteCharConvertStrategy”: “DO_NOTHING_IF_BYTE_USED”,
“deferIndexCreation”: true
},
“enableFullTransfer”: true,
“enableFullVerify”: true,
“fullTransferConfig”: {
“nonePkUkTruncateDstTable”: null,
“allowDestTableNotEmpty”: false,
“fullTransferSpeedMode”: “STEADY”,
“fullVerifySpeedMode”: “STEADY”
},
“enableIncrTransfer”: true,
“enableReverseIncrTransfer”: false,
“incrTransferConfig”: {
“startTimestamp”: 1715150392,
“recordTypeWhiteList”: [
“DELETE”,
“INSERT”,
“UPDATE”,
“DDL”
],
“storeLogKeptHour”: 120,
“enableSequencingWithinTxn”: null,
“incrSyncConcurrency”: null,
“enableIncrSyncStatistics”: null
}
}

你的“sourceEndpointId”: “e_5ptscjstvk68”, 这个对应的配置中有没有__oceanbase_inner_drc_user的配置,如果没有,建数据源的时候就需要加入

创建数据源的时候,body参考:
{
“type”: “OB_MYSQL_CE”,
“name”: “test1”,
“schema”: “”,
“ip”: “11.124.9.93”,
“port”: 2883,
“tenant”: “test”,
“cluster”: “obce86”,
“userName”: “root”,
“password”: “xxxx”,
“drcUserName”: “root”,
“drcPassword”: “xxxx”,
“configUrl”: “xxx”,
“innerDrcPassword”: “xxxx”,
“region”: “default”
}
注意:其中password,drcPassword,innerDrcPassword都是需要base64编码过的;
drcUserName就是图中数字1
drcPassword就是图中数字2
configUrl就是图中数字3
image
innerDrcPassword是下面图中:

这个是不是只是源数据源加了就行呢

是的,在创建数据源的时候需要将这个几条信息加上

发现一个问题,就是在全量迁移的过程中不能新建表是吧,否则会报错, 这个能解决吗
CONNECTOR-SOOO04000001
错误信息:
Sink table not found,ErrorCode: SINK_TABLE_NOT_FOUND(), msg: tc.company map table (tc.company) is not found

在目标端手动加上这个表,然后重试项目就行

只有手动在目的端数据源添加库才可以吗,这个还需要手动操作,我想直接掉api不需要手动干预这种有方法吗,我的目的只是想调api同步接口从一个ocenbase到另外一个oceanbase,包括同步到全量数据和增量数据

在全量同步的时候是不能做DDL的操作的,不然就像你上面所看到的错误样,到了增量step你就可以随意DDL,DML操作了