首批通过分布式安全可靠测评,为关键业务系统打造
恢复租户报错 -4002, invalid locality
更新时间:2026-05-13 07:31
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
问题现象
使用 RESTORE 命令恢复租户 cz_converge_uat2 到 cxl_restore 中。
obclient> ALTER SYSTEM RESTORE cxl_restore FROM cz_converge_uat2 at 'file:///backup/' until '2022-05-05 06:00:00.071670' with 'backup_cluster_name=newcore_sit2&backup_cluster_id=2&pool_list=restore_pool';
出现如下报错。
[2022-05-05 16:32:43.553871] WARN [COMMON] parse_locality (ob_locality_util.cpp:1254) [114009][674][YB42C0A80033-0005DCFED3F3E5C5] [lt=27] [dc=0] invalid locality(ret=-4002)
[2022-05-05 16:32:43.553940] WARN parse_locality (ob_locality_util.cpp:1255) [114009][674][YB42C0A80033-0005DCFED3F3E5C5] [lt=67] [dc=0] Incorrect arguments to locality, zone name illegal
[2022-05-05 16:32:43.554094] WARN [RS] parse_and_set_create_tenant_new_locality_options (ob_ddl_service.cpp:3143) [114009][674][YB42C0A80033-0005DCFED3F3E5C5] [lt=5] [dc=0] fail to parse locality(ret=-4002)
[2022-05-05 16:32:43.554265] WARN [RS] check_create_tenant_locality (ob_ddl_service.cpp:17002) [114009][674][YB42C0A80033-0005DCFED3F3E5C5] [lt=14] [dc=0] fail to parse and set new locality option(ret=-4002)
[2022-05-05 16:32:43.554545] WARN [RS.RESTORE] fill_create_tenant_arg (ob_restore_scheduler.cpp:368) [114009][674][YB42C0A80033-0005DCFED3F3E5C5] [lt=11] [dc=0] locality not match(tmp_ret=-4002, arg=tenant_schema:{tenant_id:18446744073709551615, schema_version:1, tenant_name:"cxl_restore", replica_num:0, zone_list:[], primary_zone:"", charset_type:2, locked:false, comment:"", name_case_mode:-1, read_only:false, rewrite_merge_version:0, locality_str:"FULL{1}@zone1, FULL{1}@zone2, LOGONLY{1}@zone3", logonly_replica_num:0, zone_replica_attr_array:[], primary_zone_array:[], storage_format_version:0, storage_format_work_version:0, previous_locality_str:"", sysvars:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], default_tablegroup_id:18446744073709551615, default_tablegroup_name:"", compatibility_mode:1, drop_tenant_time:-1, status:0, in_recyclebin:false}, pool_list:["restore_pool"], if_not_exist:false, sys_var_list:[], name_case_mode:-1, is_
修改 RESTORE 命令,指定 locality 为目标恢复集群的 locality。
obclient> ALTER SYSTEM RESTORE cxl_restore FROM cz_converge_uat2 at 'file:///backup/' until '2022-05-05 06:00:00.071670' with 'backup_cluster_name=newcore_sit2&backup_cluster_id=2&pool_list=restore_pool&locality=F@ZONE_1,F@ZONE_2,F@ZONE_3';
但是依然报错。
[2022-05-05 16:52:24.069554] WARN [SHARE] construct_zone_array (ob_primary_zone_util.cpp:144) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=10] [dc=0] zone not exist(ret=-4016, zone_score={zone_:"zone1", score_:0}, primary_zone_str_="zone1;zone2;zone3", zone_list_=["ZONE_1", "ZONE_2", "ZONE_3"])
[2022-05-05 16:52:24.069732] WARN [SHARE] check_and_parse_primary_zone (ob_primary_zone_util.cpp:119) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=177] [dc=0] fail to construct zone array(ret=-4016)
[2022-05-05 16:52:24.070092] WARN [RS] check_and_set_primary_zone (ob_ddl_service.cpp:22506) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=7] [dc=0] invalid primary zone(ret=-4002)
[2022-05-05 16:52:24.070108] WARN check_and_set_primary_zone (ob_ddl_service.cpp:22507) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=14] [dc=0] Incorrect arguments to primary zone
[2022-05-05 16:52:24.070283] WARN [RS] check_create_schema_replica_options (ob_ddl_service.cpp:22576) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=6] [dc=0] fail to check and set primary zone(ret=-4002)
[2022-05-05 16:52:24.070295] WARN [RS] check_create_tenant_replica_options (ob_ddl_service.cpp:22315) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=11] [dc=0] fail to check replica options(ret=-4002)
[2022-05-05 16:52:24.070465] WARN [RS] check_tenant_schema (ob_ddl_service.cpp:16957) [113899][476][YB42C0A80033-0005DCFED3F3E5EE] [lt=5] [dc=0] check replica options failed(tenant_schema={tenant_id:18446744073709551615, schema_version:1, tenant_name:"cxl_restore", replica_num:0, zone_list:["ZONE_1", "ZONE_2", "ZONE_3"], primary_zone:"zone1;zone2;zone3", charset_type:2, locked:false, comment:"", name_case_mode:-1, read_only:false, rewrite_merge_version:0, locality_str:"FULL{1}@ZONE_1, FULL{1}@ZONE_2, FULL{1}@ZONE_3", logonly_replica_num:0, zone_replica_attr_array:[{replica_attr_set:{full_replica_attr_array:[{num:1, memstore_percent:100}], logonly_replica_attr_array:[], readonly_replica_attr_array:[], encryption_logonly_replica_attr_array:[]}, zone_set:["ZONE_1"], zone:"ZONE_1"}, {replica_attr_set:{full_replica_attr_array:[{num:1, memstore_percent:100}], logonly_replica_attr_array:[], readonly_replica_attr_array:[], encryption_logonly_replica_attr_array:[]}, zone_set:["ZONE_2"], zone:"ZONE_2"}, {replica_attr_set:{full_replica_attr_array:[{num:1, memstore_percent:100}], logonly_replica_attr_array:[], readonly_replica_attr_array:[], encryption_logonly_replica_attr_array:[]}, zone_set:["ZONE_3"], zone:"ZONE_3"}], primary_zone_array:[], storage_format_version:0, storage_format_work_version:0, previous_locality_str:"", sysvars:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], default_tablegroup_id:18446744073709551615, default_tablegroup_name:"", compatibility_mode:1, drop_tenant_time:-1, status:0, in_recyclebin:false}, ret=-4002)
问题原因
备份集群的 zone list 是 zone1;zone2;zone3,恢复集群的 zone list 是 ZONE_1;ZONE_2;ZONE_3,zone 的命名不一致。 RS 在恢复时会去比对租户的 locality 和 primary_zone 信息,如果 RESTORE 命令中不指定 locality 和 primary_zone,则会使用备份集群的 locality 和 primary_zone 信息。当备份集群的 locality 和 primary_zone 信息与恢复集群的不一致时,则会报错。
解决方法
在 RESTORE 命令中显式指定恢复机器的 locality 和 primary_zone。
obclient> ALTER SYSTEM RESTORE cxl_restore FROM cz_converge_uat2 at 'file:///backup/' until '2022-05-05 06:00:00.071670' with 'backup_cluster_name=newcore_sit2&backup_cluster_id=2&pool_list=restore_pool&locality=F@ZONE_1,F@ZONE_2,F@ZONE_3&primary_zone=ZONE_1;ZONE_2;ZONE_3';