OceanBase数据库备份配置
本文中的所有操作都需要在sys租户下进行。
OceanBase数据备份优先选择Follower副本进行备份。
系统租户不包含用户数据,不支持备份恢复。
备份配置
在开启数据库备份前,需要进行备份目的端、备份秘钥等配置。
截止V4.3.5,OceanBase数据库支持的备份介质为NFS、阿里云OSS、Azure Blob(从V4.3.5 BP3版本开始支持)、AWS S3以及兼容S3协议的对象存储,例如:华为OBS、Google GCS、腾讯云COS。
- SYS租户下为指定租户配置备份目的端:
sql
--使用NFS作为备份介质
ALTER SYSTEM SET DATA_BACKUP_DEST= 'file:///data/nfs/backup/data' TENANT = mysql_tenant;
查看备份目的端配置是否成功:
sql
select * from oceanbase.CDB_OB_BACKUP_PARAMETER;
- 如果源租户配置了透明加密,则还需要为源租户备份秘钥。
sql
ALTER SYSTEM BACKUP KEY TENANT = mysql_tenant TO 'file:///data_backup_dest/key' ENCRYPTED BY '******';
备份密钥的路径由用户自定义,不能与数据备份或日志归档的路径相同。
查看备份密钥路径:
sql
select * from oceanbase.CDB_OB_BACKUP_STORAGE_INFO;
备份发起与停止
全量备份
- 确认已开启归档模式。
发起全量备份之前,需要为租户开启归档模式,并且日志归档任务状态为DOING。
sql
--查看租户是否开启归档
select tenant_name, log_mode from oceanbase.DBA_OB_TENANTS;
--查看租户归档任务状态
select * from oceanbase.CDB_OB_ARCHIVELOG;
- 设置租户的备份并发度(可选)。
备份并发度由租户级配置项ha_low_thread_score控制,该配置项用于指定备份、备份清理等中低优先级别任务队列使用的线程数,取值范围为[0,100],默认值为0 ,表示默认工作线程数为2。
--为所有业务租户设置备份并发度
ALTER SYSTEM SET ha_low_thread_score = 10 TENANT = all_user;
--为指定业务租户设置备份并发度
ALTER SYSTEM SET ha_low_thread_score = 10 TENANT = mysql_tenant;
- 发起全量数据备份。
sql
--对所有业务租户发起全量数据备份
ALTER SYSTEM BACKUP DATABASE [PLUS ARCHIVELOG];
--对指定业务租户发起全量数据备份
ALTER SYSTEM BACKUP TENANT = mysql_tenant [PLUS ARCHIVELOG];
PLUS ARCHIVELOG为可选。添加PLUS ARCHIVELOG后,可以在数据备份过程中同时将归档日志一起备份。- 同时指定多个租户时,租户名之间使用英文逗号分隔。
增量备份
⚠️ 注意事项:
- 执行增量数据备份需要确保已经有全量数据备份存在,如果在不存在全量数据备份的情况下直接发起增量备份,系统默认会将增量备份转换为全量备份。
- 对于低版本集群升级到高版本集群的场景,即使当前租户在低版本中已经执行了全量备份,升级到高版本的集群中后,如果直接发起增量备份,系统默认也会将增量备份转换为全量备份。
发起增量数据备份:
sql
--对所有业务租户发起增量数据备份
ALTER SYSTEM BACKUP INCREMENTAL DATABASE;
--对指定业务租户发起增量数据备份
ALTER SYSTEM BACKUP INCREMENTAL TENANT = mysql_tenant;
同时指定多个租户时,租户名之间使用英文逗号分隔。
备份集群参数
由于数据备份并未对集群级配置项进行备份,如果要备份集群级配置项,则需要手动执行命令将原集群级配置项备份到指定路径(仅备份非默认设置的集群范围的配置项)。
- 仅sys租户可以备份集群级配置项,用户租户不支持备份集群级配置项。
- 在备份集群级配置项时,对于
all_server_list、rootservice_list和debug_sync_timeout等配置项,无论其值是否为默认值,均不会备份。- 备份的集群级配置项和租户级配置项仅用于为用户提供配置参考,在进行物理恢复时,不会恢复到集群和租户中。
备份集群级配置参数:
sql
ALTER SYSTEM BACKUP CLUSTER PARAMETERS TO 'file:///data/nfs/backup/cluster_parameters';
停止备份
发起数据备份后,可以停止正在运行的备份任务。
sql
--停止所有业务租户的备份任务
ALTER SYSTEM CANCEL BACKUP;
--停止指定业务租户的备份任务
ALTER SYSTEM CANCEL BACKUP TENANT = mysql_tenant;
同时指定多个租户时,租户名之间使用英文逗号分隔。
由于停止正在运行的备份任务后,系统会产生一些不完整的备份数据。建议提前开启自动清理备份功能,及时清理不完整的备份。
备份状态查看
查看数据备份进度
- 查看JOB级任务进度:发起一次备份即对应一条JOB任务记录。
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS\G
CDB_OB_BACKUP_JOBS视图的重要字段含义:
tenant_id:租户ID。job_id:备份Job任务ID。backup_set_id:备份集ID。SYS租户默认为0,业务租户从1开始递增。plus_archivelog:是否开启了日志补齐。backup_type:FULL表示全量备份,INC表示增量备份。encryption_mode:备份加密模式。None表示不加密。start_timestamp:备份Job任务开始时间。end_timestamp:备份Job任务结束时间。status:备份状态。result:备份错误码结果。comment:错误码描述。path:备份路径。
- 查看Task级任务进度:一个Task对应一个备份集的任务。
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_TASKS\G
CDB_OB_BACKUP_TASKS视图的重要字段含义:
tenant_id:租户ID。task_id:备份Task任务ID。job_id:该Task任务所属的JOB_ID。backup_set_id:备份集ID。start_timestamp:备份Task任务开始时间。end_timestamp:备份Task任务结束时间。status:备份状态。start_scn:备份开始的SCN。end_scn:备份结束的SCN。input_bytes:输入字节数。output_bytes:输出字节数。tablet_count:Tablet总量。finish_tablet_count:完成备份的Tablet总量。macro_block_count:宏块数。finish_macro_block_count:完成备份的宏块数。file_count:备份文件数。result:备份错误码结果。comment:错误码描述。path:备份路径。data_progress:(V4.3.1引入)数据备份的备份进度。计算方法为:完成的宏块个数 / 总宏块个数 * 100%。log_file_count:(V4.3.1引入)归档clog文件的总数。finish_log_file_count:(V4.3.1引入)完成备份的归档clog文件的总数。log_progress:(V4.3.1引入)归档clog文件的备份进度。计算方法为:已完成备份的归档clog文件的个数 / 归档clog文件的总数 * 100%。
查看历史备份记录
- 查看JOB级任务历史:发起一次备份即对应一条JOB任务记录。
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY\G
- 查看Task级任务历史:一个Task对应一个备份集的任务。
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_TASK_HISTORY\G
查看数据备份参数
- 查看租户的备份并发度
sql
select * from oceanbase.gv$ob_parameters where name='ha_low_thread_score';
- 查看租户的备份参数信息
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_PARAMETER\G
- 查看租户的备份路径
sql
select tenant_id,path,dest_type,extension from oceanbase.CDB_OB_BACKUP_STORAGE_INFO where dest_type='backup_data';
--V4.3.4开始支持
select tenant_id,path,dest_type,extension,max_iops,max_bandwidth,max_bandwidth_display
from oceanbase.CDB_OB_BACKUP_STORAGE_INFO where dest_type='backup_data';
备份清理
配置自动清理策略
备份成功后,可以根据业务需要,为租户设置清理策略,设置了清理策略的租户将会每小时触发一次自动清理。
⚠️ 当前版本仅支持自动清理过期备份,不支持手动清理过期备份。
注意事项:
- 自动清理仅支持清理
DATA_BACKUP_DEST和LOG_ARCHIVE_DEST中设置的备份目的端和归档目的端的数据,对于已被更换备份目的端或归档目的端的场景,原备份路径或归档路径下的数据将无法通过OceanBase数据库进行清理。 - 日志归档数据的清理依赖数据的备份,在清理日志归档数据前,请确认已存在数据备份文件。如果没有数据备份文件,则无法清理日志归档数据。
- 自动清理会保留至少一份有效的备份数据,如果仅有一份有效的备份数据,则这份有效数据将一直不会被清理。
📖 为指定租户开启备份自动清理:
sql
ALTER SYSTEM ADD DELETE BACKUP POLICY policy_name RECOVERY_WINDOW recovery_window TENANT tenant_name;
其中:
POLICY参数用于指定清理策略名,当前仅支持设置为default,表示自动清理的范围仅为当前配置项data_backup_dest以及log_archive_dest中的备份。RECOVERY_WINDOW参数用于控制备份数据可恢复的时间窗口。例如设置recovery_window='7d'表示从当前时间往前推,7天内的数据保证可恢复,且与这7天数据恢复无关的备份数据将被视为过期的数据。
示例:
sql
ALTER SYSTEM ADD DELETE BACKUP POLICY 'default' RECOVERY_WINDOW '7d' TENANT mysql_tenant;
📖查看已设置的清理策略:
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_POLICY;
删除自动清理策略
对于自动清理场景,为了防止取消清理的任务被再次调度执行,需要先删除清理策略,再停止正在执行的清理任务。如果仅希望取消正在执行的清理任务,可无需删除清理策略。
- 删除清理策略时,当将租户下所有的清理策略都删除后,相当于关闭了该租户的自动清理功能。
- 删除清理策略并不会影响正在执行的清理任务,仅表示系统下次进行自动清理调度时,被删除的清理策略将不会再生成清理任务。
📖 删除指定租户的备份自动清理策略:
sql
ALTER SYSTEM DROP DELETE BACKUP POLICY policy_name TENANT tenant_name;
示例:
sql
ALTER SYSTEM DROP DELETE BACKUP POLICY 'default' TENANT mysql_tenant;
取消清理任务
停止指定租户正在执行的清理任务:
sql
ALTER SYSTEM CANCEL DELETE BACKUP TENANT tenant_name_list;
注意事项:
- 同时指定多个租户时,租户名之间使用英文逗号分隔。
- 如果不指定
TENANT参数,则表示同时取消所有用户租户下正在执行的清理任务。
确认清理任务是否已停止:
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_JOBS WHERE tenant_id = 1002\G
如果STATUS对应的值为INIT或DOING或CANCELING,则表示清理任务还未执行结束。
上述视图中查询不到租户正在执行的清理任务,则可以查看清理任务的历史记录来确认清理任务执行的结果。
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_JOB_HISTORY where tenant_id = 1002\G
如果STATUS对应的值为COMPLETED或FAILED或CANCELED,则表示清理任务已停止。
查看备份清理状态
- 查看备份清理进度
查看Job级任务进度:
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_JOBS\G
字段含义:
tenant_id:租户ID。job_id:执行清理任务所属JOB_ID,各租户间独立。start_timestamp:Job任务开始时租户当前时间。parameter:清理参数,记录过期时间。status:任务状态,分为INIT、DOING、CANCELING、COMPLETED、FAILED、CANCELED。task_count:总的backup_set/backup_piece任务数。success_task_count:成功的总的backup_set/backup_piece任务数。
查看backup_set和backup_piece清理任务的进度:
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_TASKS\G
字段含义:
tenant_id:租户ID。job_id:任务所属JOB_ID。task_id:任务ID,一个任务对应清理一个backup_set/backup_piece。task_type:任务类型,分为backup_set和backup_piece。id:清理的backup_set/backup_piece的ID。round_id:任务类型为backup_piece时所属的日志归档轮次。status:任务状态,分为INIT、DOING、CANCELING、COMPLETED、FAILED、CANCELED。path:备份所在目的端路径信息。
- 查看备份清理结果
查看Job级清理任务的历史记录:
sql
SELECT * FROM CDB_OB_BACKUP_DELETE_JOB_HISTORY\G
查看backup_set/backup_piece清理任务的历史记录:
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_TASK_HISTORY\G
References
【1】OB备份与恢复,https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002588069
【2】备份与恢复问题排查,https://open.oceanbase.com/course/detail/14048