问题现象
使用 OSS 备份,然后在 OSS 上移动备份文件后进行恢复报错 failed to handle_single_task。
关键日志信息。
[2024-08-19 19:15:21.231317] WARN [ARCHIVE] get_max_data_file_when_index_not_exist (ob_archive_file_utils.cpp:257) [44191][1510][xxxxxx-xxxxxx] [lt=4] [dc=0] get_file_range fail(ret=-4002, prefix=oss://oss-xxxxx-xxxx/oss_xxxx_xxx/xxxx/xxx_xxxx_xxxxxx/xxxxxxx/xxxxxxxx/x, storage_info=host=oss-xx-xxxxxx-xxxx-xxxx.xxxxx.xxxxxx.xxxx.xxxx&access_id=xxxxxxxxxxxxxxxx&access_key=xxxxxxxxxxxxxxxx)
[2024-08-19 19:15:21.231322] WARN [ARCHIVE] get_max_data_file_unrecord_ (ob_archive_log_file_store.cpp:511) [44191][1510][xxxxxx-xxxxxx] [lt=4] [dc=0] get_max_data_file_when_index_not_exist fail(ret=-4002, pg_key={tid:xxxxxxxxxxxxxxxxxxxx, partition_id:0, part_cnt:0}, file_id=0)
[2024-08-19 19:15:21.231328] WARN [ARCHIVE] locate_file_by_log_id (ob_archive_log_file_store.cpp:143) [44191][1510][xxxxxx-xxxxxx] [lt=5] [dc=0] get_max_data_file_unrecord_ fail(tmp_ret=-4002, tmp_ret="OB_INVALID_ARGUMENT", pg_key={tid:xxxxxxxxxxxxxxxxxxxx, partition_id:0, part_cnt:0}, storage_info=host=oss-xx-xxxxxx-xxxx-xxxx.xxxxx.xxxxxx.xxxx.xxxx&access_id=xxxxxxxxxxxxxxxx&access_key=xxxxxxxxxxxxxxxx)
[2024-08-19 19:15:21.231335] WARN [RESTORE_ARCHIVE] locate_start_file_id_in_piece_ (ob_archive_restore_engine.cpp:1672) [44191][1510][xxxxxx-xxxxxx] [lt=6] [dc=0] failed to locate_file_by_log_id(ret=-4002, ret="OB_INVALID_ARGUMENT", restore_pg_key={tid:xxxxxxxxxxxxxxxxxxxx, partition_id:0, part_cnt:0}, archive_pg_key={tid:xxxxxxxxxx, partition_id:0, part_cnt:0}, start_piece_idx=0, end_piece_idx=0, archive_file_exists=true, start_log_id=4532, last_piece_base_log_id=4523)
问题原因
OSS 在移动备份文件时,可能会导致某些文件异常,进而导致失败。
问题的风险及影响
导致不能正常恢复。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V3.x 版本。
解决方法及规避方式
解决方法:
不要使用移动后的备份文件进行恢复,最好直接把原始备份文件挂载到目的端进行恢复。
规避方式:
直接将备份出的文件挂载到目的端进行恢复。如果实在需要移动备份文件,建议使用 2 次备份。