基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
自动清理备份的数据
更新时间:2024-12-18 17:42:46
备份成功后,您可以根据业务需要,自动清理备份数据。
注意事项
由于日志归档数据的清理依赖数据的备份,在清理日志归档数据前,请确认已存在数据备份文件,如果没有数据备份文件,则无法清理日志归档数据。
自动清理仅支持清理配置项
backup_dest中设置的备份目的端的数据,对于更换备份目的端的场景,需要手动清理过期数据。自动清理会保留至少一份有效的备份数据,如果仅有一份有效的备份数据,则这份有效数据将一直不会过期。
对于备份目的端为 NFS 的场景,在进行备份数据的清理时,系统会直接删除满足要求的备份文件;对于备份目的端为 OSS 的场景,其备份文件的清理方式取决于
backup_dest中delete_mode参数的值,详细信息请参见 通过命令行备份。
通过配置项开启自动清理功能
通过 backup_dest_option 配置项开启自动清理功能
使用
root用户登录数据库的sys租户。通过
backup_dest_option配置项配置清理策略。备份数据的清理由配置项
backup_dest_option中的以下 2 个参数来控制:auto_delete_obsolete_backup参数和recovery_window参数,参数的设置和使用说明,请参见《参考指南(MySQL 模式》 文档中的 backup_dest_option。其中:
auto_delete_obsolete_backup参数用于控制是否启动自动清理功能。自动清理场景下,设置auto_delete_obsolete_backup=true表示启动自动清理功能后,系统将会自动清理过期的备份数据。如果不通过配置项
backup_dest_option设置,则默认使用集群级别的配置项auto_delete_expired_backup的值。如果backup_dest_option和auto_delete_expired_backup均未设置,则系统会使用默认值false,表示不自动清理过期的备份数据。如果配置项backup_dest_option和auto_delete_expired_backup均已设置,则以backup_dest_option配置的值为准。建议使用backup_dest_option配置项来设置,此处需要将auto_delete_obsolete_backup设置为true。recovery_window参数用于控制备份数据可恢复的时间窗口,以及作为判断备份数据是否过期的依据。通过
recovery_window判断数据备份过期的方式: 比满足当前时间 - 备份时间点 >= recovery_window条件的最新备份更早的所有备份都被视为过期。例如,设置
recovery_window='7d'表示从当前时间往前推,7 天内的数据保证可恢复,且与这 7 天数据恢复无关的备份数据将被视为过期的数据。如果不通过
backup_dest_option配置项设置,则默认使用集群级别的配置项backup_recovery_window的值。如果backup_dest_option和backup_recovery_window均未设置,则使用默认值0,表示备份数据不过期。如果配置项backup_dest_option和backup_recovery_window均已设置,则以backup_dest_option配置的值为准。建议使用backup_dest_option配置项来设置。下面通过一个简单的示例来说明设置
recovery_window后,哪些为过期的备份数据。假设当前的数据备份情况如下图所示。
自动清理场景下,系统按照一次全量备份+若干次增量备份来进行过期数据的清理,以上图为例:
第一组备份:1 月 1 日全量备份
backup_set 1, 1 月 4 日增量备份backup_set 2。第二组备份:1 月 7 日全量备份
backup_set 3,1 月 11 日增量备份backup_set 4。第三组备份:1 月 14 日全量备份
backup_set 5。
当前时间为 1 月 15 日,最早恢复点为 1 月 8 日,即 1 月 8 日~1 月 15 日的备份数据保证可恢复。由于 1 月 11 日增量备份
backup_set 4的恢复需要依赖 1 月 7 日的全量备份backup_set 3,故系统会保留backup_set 3,在 1 月 7 日之前的备份数据均视为已过期的备份数据,即第一组备份backup_set 1和backup_set 2为过期的备份。当启动自动清理功能时,过期的备份数据将被清理。说明
如果您通过 OCP 创建备份策略并设置了全量备份周期,则您需要为备份预留的磁盘空间大小的计算方式如下(仅作为开启自动清理功能的参考):
备份需要预留的最小磁盘空间大小 = 最多可保留的全量数据备份所占用的磁盘大小 + 最多可保留的日志备份所占用的磁盘大小 + 需要额外预留的磁盘空间
其中:
最多可保留的全量数据备份(单位:次):recovery_window/全量备份周期 + 2
最多可保留的日志备份(单位:天):最多可保留的全量备份数 * 全量备份周期
需要额外预留的磁盘空间:(保留的数据备份所占用的磁盘空间+保留的日志备份所占用的磁盘空间)* 30%
此外,由于该计算方式未考虑增量备份的场景,如果有增量备份,还需要加上全量备份之间的所有增量备份所占用的磁盘空间。
通过 auto_delete_expired_backup 配置项开启自动清理功能
集群级别配置项 auto_delete_expired_backup 也可以用来开启自动清理功能,但后续将废弃不再使用。在日常使用中,建议您使用 backup_dest_option 配置项来开启自动清理功能。
使用
root用户登录数据库的sys租户。通过
backup_recovery_window配置项设置备份数据可恢复的时间窗口。obclient>ALTER SYSTEM SET backup_recovery_window = <可恢复的时间窗口>;其中,
backup_recovery_window是一个配置项,功能与配置项backup_dest_option中的recovery_window参数相同。示例如下:
obclient> ALTER SYSTEM SET backup_recovery_window = '7d';执行以下命令,通过
auto_delete_expired_backup配置项开启备份数据的自动清理功能。obclient> ALTER SYSTEM SET auto_delete_expired_backup = 'True';说明
如果出现了
9044的报错,则表示数据清理任务已开始,不允许再次发起清理任务。
自动清理的触发机制说明
开启备份数据的自动清理功能后,当数据清理的时间间隔满足以下条件时,系统就会触发一次自动清理:
自动清理的时间间隔 = min(recovery_window/2, 1d)
注意
本文介绍的是最新的自动清理策略,对于 oceanbase-2.2.77-20220116224111 之前的版本(不含该版本),自动清理的时间间隔为 min((当前时间戳 - 上一次成功清理的时间),backup_recovery_window/2)。
当 当前时间 - 上一次自动清理成功的时间 > 自动清理的时间间隔 时,系统就会触发一次自动清理。
其中 ,recovery_window 参数的详细说明请参见本文 通过配置项 backup_dest_option 开启自动清理功能 中的介绍;上一次自动清理成功的时间 可以通过查询视图 oceanbase.CDB_OB_BACKUP_CLEAN_HISTORY 的 END_TIME 字段来获取。具体方法如下:
使用 root 用户登录数据库的 sys 租户。
查询视图
oceanbase.CDB_OB_BACKUP_CLEAN_HISTORY,获取上一次自动清理成功的时间。例如如下:
obclient> SELECT * FROM oceanbase.CDB_OB_BACKUP_CLEAN_HISTORY WHERE tenant_id = 1 AND type = 'DELETE OBSOLETE BACKUP' AND ERROR_MSG='' ORDER BY END_TIME DESC LIMIT 1; +-----------+--------+---------+----------------------------+----------------------------+-------------+------------------------+--------+------------------+-----------+-------------------------------------------+ | TENANT_ID | BS_KEY | COPY_ID | START_TIME | END_TIME | INCARNATION | TYPE | STATUS | PARAMETER | ERROR_MSG | COMMENT | +-----------+--------+---------+----------------------------+----------------------------+-------------+------------------------+--------+------------------+-----------+-------------------------------------------+ | 1 | 3 | 0 | 2022-10-28 11:23:51.330579 | 2022-10-28 11:23:52.928141 | 1 | DELETE OBSOLETE BACKUP | STOP | 1666927131324508 | | server:xxx, trace_id:xxx | +-----------+--------+---------+----------------------------+----------------------------+-------------+------------------------+--------+------------------+-----------+-------------------------------------------+ 1 row in set查询结果中:
BS_KEY表示清理任务的 Job ID。COPY_ID:表示发起的清理任务的 copy_id,仅在使用备份清理命令清理指定备份的备份时,该字段才会为非 0。END_TIME表示清理任务结束的时间。STATUS:表示清理任务的状态。进入历史视图的任务,STATUS均为STOP。ERROR_MSG:记录清理任务失败信息的描述。如果清理任务成功,则该字段显示为空。
如果查询结果为空,可能有以下两种情况:
有清理任务正在执行,可以通过查看
oceanbase.__all_virtual_backup_clean_info表来确认是否有清理任务正在被执行。待所有清理任务(包含手动和自动)全部执行完成,并且达到自动清理的时间间隔条件后,系统就会进行下一次的自动清理。从未进行过备份的备份的自动清理,该情况下开启自动清理功能后,系统会立即进行一次备份的备份的自动清理。
通过 OCP 开启自动过期备份清理开关
在 OCP 上创建备份策略时,您可以开启 过期备份清理调度配置 开关,待备份数据过期后系统会自动清理过期的数据。通过 OCP 创建备份策略的详细操作请参见 通过 OCP 备份。