数据备份成功后,您可以根据业务需要,手动清理备份的数据。

手动清理方式主要通过 ALTER SYSTEM 命令删除指定的 backup_set_idbackup_piece_idbackup_round_id 或者过期的数据。

清理前准备

手动清理已经过期的备份数据前,需要先配置备份数据的过期时间和清理策略,即配置 backup_dest_option 配置项中的 recovery_windowauto_delete_obsolete_backup

配置 recovery_windowauto_delete_obsolete_backup 的示例如下:

  1. obclient> ALTER SYSTEM SET backup_dest_option='log_archive_checkpoint_interval=5s&recovery_window=7d&auto_delete_obsolete_backup=false&log_archive_piece_switch_interval=120s&backup_copies=2';

示例中:

  • log_archive_checkpoint_interval 用于控制日志备份的时间间隔。

    如果不通过 backup_dest_option 配置项设置,则默认使用集群级别的配置项 log_archive_checkpoint_interval 的值。如果 backup_dest_optionlog_archive_checkpoint_interval 均未设置,则使用默认值 120s。建议使用 backup_dest_option 配置项来设置日志备份的时间间隔。

  • recovery_window 用于控制备份数据的保留时间。

    如果不通过 backup_dest_option 配置项设置,则默认使用集群级别的配置项 backup_recovery_window 的值。如果 backup_dest_optionbackup_recovery_window 均未设置,则使用默认值 0,表示备份数据不过期。建议使用 backup_dest_option 配置项来控制备份数据的保留时间。

    对于手动清理的场景,备份数据过期后,您可以手动清理过期的备份数据。

  • auto_delete_obsolete_backup 用于控制是否自动删除过期的备份数据。

    如果不通过 backup_dest_option 配置项设置,则默认使用集群级别的配置项 auto_delete_expired_backup 的值。如果 backup_dest_optionauto_delete_expired_backup 均未设置,则使用默认值 false,表示不自动删除过期的备份数据,此处需要将 auto_delete_obsolete_backup 设置为 false。建议使用 backup_dest_option 配置项来配置是否自动删除过期的备份数据。

  • log_archive_piece_switch_interval 用于控制自动按照时间段来切日志文件的目录,默认值为 0,表示不切分 Piece, 有效范围为 [1d, 7d]。

  • backup_copies 用于指定一个备份级的冗余度。默认值为 1。如果设置了 backup_backup_dest,建议该参数设置为 2,其有效范围为 [1,8]。

    如果 backup_copies 设置为 1,则在清理备份时,系统不会考虑备份备份是否已成功;如果 backup_copies 设置为 2,则仅当成功备份备份数据到 backup_backup_dest 后才会自动删除 backup_dest 下的备份。

更多 backup_dest_option 配置项的使用说明,请参见《参考指南(MySQL 模式)》 或《参考指南 (Oracle 模式》文档中 backup_dest_option 章节。

清理指定的备份数据

  1. 使用 sys 租户的 root 用户登录数据库。

  2. 分别查询视图 CDB_OB_BACKUP_SET_DETAILSCDB_OB_BACKUP_PIECE_FILES,找到待删除的备份数据的 backup_set_idpiece_idround_id

    CDB_OB_BACKUP_SET_DETAILSCDB_OB_BACKUP_PIECE_FILES 视图各字段的详细说明请参见《参考指南(MySQL 模式)》文档中 oceanbase.CDB_OB_BACKUP_SET_DETAILSoceanbase.CDB_OB_BACKUP_PIECE_FILES 章节。

  3. 根据清理场景,选择合适的命令,清理备份数据。

    • 清理指定 backup_set_id 的数据

      1. obclient> ALTER SYSTEM DELETE BACKUPSET backup_set_id;

      例如,执行以下命令,表示删除 backup_set_id1 的备份数据。

      1. obclient> ALTER SYSTEM DELETE BACKUPSET 1;

      使用 DELETE BACKUPSET 命令清理备份时,有以下限制:

      • 当待删除的 backup_set_idbackup_destbackup_dest 配置项中设置的备份目的端相同时,删除数据的原则是,至少保留一份完整的有效备份数据。当待删除的 backup_set_id 所在的路径与 backup_dest 配置项中设置的备份目的端不相同时,不支持保留一份有效备份数据的限制。

      • 当待删除的 backup_set_idbackup_destbackup_dest 配置项中设置的备份目的端相同时,仅支持 backup_set 的顺序删除。例如,对于 backup_set_id123backup_set,必须先删除 1 后,再删除 23。当待删除的 backup_set_id 所在的路径与 backup_dest 配置项中设置的备份目的端不相同时,删除 backup_set 的顺序不受限制。

      • 删除不存在的 backup_set_id 会失败,删除正在备份的 backup_set_id 也会失败。

    • 清理指定 piece_id 的归档数据

      1. obclient> ALTER SYSTEM DELETE BACKUPPIECE piece_id;

      使用 DELETE BACKUPPIECE 命令清理备份时,有以下限制:

      • 不允许删除处于非 Frozen、非 Inactive 状态的 backup_piece

      • piece_idbackup_destbackup_dest 配置项中设置的备份目的端相同,且已有的备份数据没有完全覆盖 backup_piece 时,对应的 piece_id 不允许删除。当 piece_idbackup_destbackup_dest 配置项中设置的备份目的端不相同时,无论已有的备份数据是否完全覆盖 backup_piece ,对应的 piece_id 均可以删除。

      • piece_idbackup_destbackup_dest 配置项中设置的备份目的端相同时,仅支持 piece_id 的顺序删除,防止用户因删除 backup_piece 造成日志不连续。例如,对于 piece_id123backup_piece,必须先删除 1 后,再删除 23。当 piece_idbackup_destbackup_dest 配置项中设置的备份目的端不相同时,删除 piece_id 的顺序不受限制。

    • 清理指定 round_id 的日志备份的 Round 中的所有数据

      1. obclient> ALTER SYSTEM DELETE BACKUPROUND round_id;

      使用 DELETE BACKUPROUND 命令清理备份与使用 DELETE BACKUPPIECE 命令的限制一致:

      • 不允许删除处于非 Stop 状态的 backup_round

      • round_idbackup_destbackup_dest 配置项中设置的备份目的端相同,且已有的备份数据没有完全覆盖 backup_round 时,对应的 round_id 不允许删除。当 round_idbackup_destbackup_dest 配置项中设置的备份目的端不相同时,无论已有的备份数据是否完全覆盖 backup_round ,对应的 round_id 均可以删除。

      • round_idbackup_destbackup_dest 配置项中设置的备份目的端相同时,仅支持 round_id 的顺序删除,防止用户因删除 backup_round 造成日志不连续。例如,对于 round_id123backup_round,必须先删除 1 后,再删除 23。当 round_idbackup_destbackup_dest 配置项中设置的备份目的端不相同时,删除 round_id 的顺序不受限制。

清理过期的备份数据

  1. 使用 sys 租户的 root 用户登录数据库。

  2. 执行以下命令,立即清理过期的备份数据。

    1. obclient> ALTER SYSTEM DELETE OBSOLETE;

    DELETE OBSOLETE 命令的使用限制如下:

    • 如果没有有效的 backup_set 或者仅有一份有效的 backup_set,则日志归档的数据切分 Piece 后不能被清理。

    • DELETE OBSOLETE 命令仅支持删除过期的备份数据,且过期数据所在的路径需要与配置项 backup_dest 的设置相同。对于更换过备份目的端的过期数据,请参见本节 清理指定备份的备份数据 中的内容。

    • DELETE OBSOLETE 命令不支持删除备份的备份数据。

    • 如果 backup_copies 的个数未达到 backup_dest_option 配置中 backup_copies 配置项设置的个数,则不能清理数据。