集群信息
查看OceanBase版本号
SELECT VERSION()
如下版本
查看集群信息
select * from v$ob_cluster\G
查看集群节点
select * from __all_server;
字段名称 | 字段含义 |
---|---|
svr_ip | 节点IP |
svr_port | 节点的RPC端口 |
zone | 节点所在的Zone |
inner_port | 节点的 SQL 端口,可以使用该端口通过直连方式连接 OceanBase 数据库。 |
with_rootserver | 该节点是否为集群 RS(RootServer),RS 负责处理集群管理操作。 |
status | ACTIVE: 表示该节点为可用状态。 INACTIVE: 表示该节点为宕机状态. DELETING: 表示该节点正在被删除 |
build_version | OceanBase 数据库软件的版本号。 |
备份目录结构
obcluster
└── 1712641788
└── incarnation_1
├── 1
│ └── clog
│ ├── 3
│ │ └── single_piece_info_@versionset@
│ │ └── @version@_4
│ └── 4
│ └── single_piece_info_@versionset@
│ └── @version@_4
├── 1001
│ ├── clog
│ │ ├── 3
│ │ │ ├── archive_key
│ │ │ │ ├── 1100611139403779_0
│ │ │ │ ├── 1100611139403780_0
│ │ │ │ ├── 1100611139403781_0
│ │ │ │ └── 1100611139453777_0
│ │ │ ├── data
│ │ │ │ ├── 1100611139403779
│ │ │ │ │ └── 0
│ │ │ │ │ └── 1
│ │ │ │ ├── 1100611139403780
│ │ │ │ │ └── 0
│ │ │ │ │ └── 1
│ │ │ │ ├── 1100611139403781
│ │ │ │ │ └── 0
│ │ │ │ │ └── 1
│ │ │ ├── index
│ │ │ │ ├── 1100611139403779
│ │ │ │ │ └── 0
│ │ │ │ ├── 1100611139403780
│ │ │ │ │ └── 0
│ │ │ │ ├── 1100611139403781
│ │ │ │ │ └── 0
│ │ │ └── single_piece_info_@versionset@
│ │ │ └── @version@_4
│ │ ├── 4
│ │ │ ├── archive_key
│ │ │ │ ├── 1100611139403779_0
│ │ │ │ ├── 1100611139403780_0
│ │ │ │ ├── 1100611139403781_0
│ │ │ ├── data
│ │ │ │ ├── 1100611139403779
│ │ │ │ │ └── 0
│ │ │ │ │ └── 1
│ │ │ │ ├── 1100611139403780
│ │ │ │ │ └── 0
│ │ │ │ │ └── 1
│ │ │ │ ├── 1100611139403781
│ │ │ │ │ └── 0
│ │ │ │ │ └── 1
│ │ │ ├── index
│ │ │ │ ├── 1100611139403779
│ │ │ │ │ └── 0
│ │ │ │ ├── 1100611139403780
│ │ │ │ │ └── 0
│ │ │ │ ├── 1100611139403781
│ │ │ │ │ └── 0
│ │ │ └── single_piece_info_@versionset@
│ │ │ └── @version@_4
│ │ ├── backup_piece_info_@versionset@
│ │ │ └── @version@_4
│ │ └── tenant_clog_backup_info_@versionset@
│ │ └── @version@_4
│ └── data
│ ├── backup_set_3_full_20240410
│ │ ├── backup_3
│ │ │ ├── meta_file_200
│ │ │ ├── meta_index_file
│ │ │ ├── meta_index_file_200
│ │ │ ├── normal_pg_list
│ │ │ ├── sys_pg_list
│ │ │ ├── tenant_diagnose_info
│ │ │ └── tenant_locality_info
│ │ ├── backup_set_info_@versionset@
│ │ │ └── @version@_4
│ │ ├── data
│ │ │ ├── 1100611139403779
│ │ │ │ └── 0
│ │ │ │ ├── major_data
│ │ │ │ │ └── macro_block_index_3
│ │ │ │ └── minor_data
│ │ │ │ └── 200
│ │ │ │ └── macro_block_index_3
│ │ │ ├── 1100611139403780
│ │ │ │ └── 0
│ │ │ │ ├── major_data
│ │ │ │ │ ├── macro_block_3.0
│ │ │ │ │ └── macro_block_index_3
│ │ │ │ └── minor_data
│ │ │ │ └── 200
│ │ │ │ └── macro_block_index_3
│ │ └── single_backup_set_info_@versionset@
│ │ └── @version@_4
│ ├── backup_set_4_inc_20240410
│ │ ├── backup_4
│ │ │ ├── meta_file_300
│ │ │ ├── meta_index_file
│ │ │ ├── meta_index_file_300
│ │ │ ├── normal_pg_list
│ │ │ ├── sys_pg_list
│ │ │ ├── tenant_diagnose_info
│ │ │ └── tenant_locality_info
│ │ ├── backup_set_info_@versionset@
│ │ │ └── @version@_4
│ │ ├── data
│ │ │ ├── 1100611139403779
│ │ │ │ └── 0
│ │ │ │ ├── major_data
│ │ │ │ │ └── macro_block_index_4
│ │ │ │ └── minor_data
│ │ │ │ └── 300
│ │ │ │ └── macro_block_index_4
│ │ │ ├── 1100611139403780
│ │ │ │ └── 0
│ │ │ │ ├── major_data
│ │ │ │ │ └── macro_block_index_4
│ │ │ │ └── minor_data
│ │ │ │ └── 300
│ │ │ │ └── macro_block_index_4
│ │ │ ├── 1100611139403781
│ │ │ │ └── 0
│ │ │ │ ├── major_data
│ │ │ │ │ └── macro_block_index_4
│ │ │ │ └── minor_data
│ │ │ │ └── 300
│ │ │ │ └── macro_block_index_4
│ │ └── single_backup_set_info_@versionset@
│ │ └── @version@_4
│ ├── tenant_backup_set_file_info_@versionset@
│ │ └── @version@_4
│ └── tenant_data_backup_info_@versionset@
│ └── @version@_4
├── clog_info
│ └── 1_192.168.xx.xx_2882
├── cluster_backup_piece_info_@versionset@
│ └── @version@_4
├── cluster_backup_set_file_info_@versionset@
│ └── @version@_4
├── cluster_clog_backup_info_@versionset@
│ └── @version@_4
├── cluster_data_backup_info_@versionset@
│ └── @version@_4
├── tenant_info_@versionset@
│ └── @version@_4
└── tenant_name_info_@versionset@
└── @version@_4
备份前准备
挂载NFS
mount -tnfs4 -o rw,timeo=30,wsize=1048576,rsize=1048576,namlen=512,sync,lookupcache=positive xxx.xxx.xxx.xxx:/mnt/nfs_ob3 /mnt/nfs_ob3
配置备份目的端
ALTER SYSTEM SET backup_dest='file:///mnt/nfs_ob3';
查看备份目的端
SHOW PARAMETERS LIKE 'backup_dest'\G
日志备份
启动日志归档
ALTER SYSTEM ARCHIVELOG;
停止日志归档
ALTER SYSTEM NOARCHIVELOG;
查看日志归档状态
SELECT * FROM CDB_OB_BACKUP_ARCHIVELOG;
CDB_OB_BACKUP_ARCHIVELOG视图字段说明
字段名称 | 字段含义 |
---|---|
LOG_ARCHIVE_ROUND | 日志轮转ID,每次发起一次日志归档,值+1 |
STATUS | 日志归档状态,DOING, STOPPING,当STATUS为DOING时,则表示日志备份任务已经开始。 |
查看备份集中Piece的状态
SELECT * FROM CDB_OB_BACKUP_PIECE_FILES;
查看归档历史
SELECT * FROM CDB_OB_BACKUP_ARCHIVELOG_SUMMARY;
字段名称 | 含义 |
---|---|
MAX_NEXT_TIME | 日志归档最大时间 |
数据备份
数据备份前确保日志归档状态为DOING。
发起转储
第一次全量备份前对集群进行一个合并,等合并完成后才能做下面的动作,否则会出现ERROR 9040(HY000): backup can not start。
-- 发起转储
ALTER SYSTEM MINOR FREEZE;
-- 查看转储进度
SELECT * FROM gv$merge_info;
发起合并
-- 发起合并
ALTER SYSTEM MAJOR FREEZE;
-- 查看合并进度
SELECT * FROM oceanbase.__all_zone WHERE name='merge_status';
发起全量备份(root用户sys租户)
-- 全量备份
ALTER SYSTEM BACKUP DATABASE;
发起增量备份(root用户sys租户)
-- 增量备份
ALTER SYSTEM BACKUP INCREMENTAL DATABASE;
查看备份进度
当查不到结果的时候,就表示备份完成了。
-- 查看备份进度
SELECT * FROM CDB_OB_BACKUP_PROGRESS;
视图字段说明:
字段名称 | 字段含义 |
---|---|
BS_KEY | 备份集ID |
BACKUP_TYPE | 备份类型:D全量、I增量 |
STATUS | 备份状态: RUNNING, COMPLETED |
查看备份历史
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_FILES;
或者
SELECT * FROM CDB_OB_BACKUP_SET_DETAILS;
字段名称 | 含义 |
---|---|
TENATN_ID | 备份对应的租户ID,1-系统租户,其他表示业务租户。 |
BACKUP_TYPE | 备份类型:D全备, I-增量 |
ENCRYPTION_MODE | 备份加密模式,NONE表示没有加密。 |
START_TIME | 备份什么时候开始 |
COMPLETION_TIME | 备份结束时间 |
DEVICE_TYPE | 备份方式,FILE表示使用文件方式。 |
OUTPUT_BYTES | 写在外部存储介质上的数据量,单位字节。 |
OUTPUT_RATE_BYTES | 每秒上传的数据量,单位字节。 |
COMPRESSION_RATIO | 备份出的数据的压缩比率。 |
OUTPUT_BYTES_DISPLAY | 对OUTPUT_BYTES可视化,转换了单位,比如3.85MB |
OUTPUT_RATE_BYTES_DISPLAY | 对OUTPUT_RATE_BYTES可视化,转换了单位,比如0.02MB/S |
TIME_TAKEN_DISPLAY | 备份花费了多长时间。 |
查看备份的恢复窗口
SHOW PARAMETERS LIKE '%recovery_window%';
查看与备份相关的RootService事件
SELECT *
FROM oceanbase.__all_rootservice_event_history
WHERE module LIKE '%backup%' OR module LIKE '%archive%'
ORDER BY gtm_create DESC LIMIT 30;
停止数据备份
ALTER SYSTEM CANCEL BACKUP;
ALTER SYSTEM CANCEL ALL BACKUP FORCE;
备份日志分析
针对v3.2.4.4
tail -f /home/admin/oceanbase/log/rootservice.log |grep -v "succ set current backup dest" |grep -v "succeed to get backup log archive backup status"| grep -v "finish do log archive schedule" | grep -v "get backup info" |grep "/mnt/nfs"
备份的日志搜索:
succeed to write_external_single_backup_piece_info:
/obcluster/1712641788/incarnation_1/1001/clog/40/single_piece_info
succeed to write_extern_log_archive_backup_info:
/obcluster/1712641788/incarnation_1/cluster_clog_backup_info
read meta file:
/obcluster/1712641788/incarnation_1/1002/data/backup_set_34_full_20240508/backup_34/meta_file_3300
succeed to write_extern_tenant_locality_info:
/obcluster/1712641788/incarnation_1/1002/data/backup_set_34_full_20240508/backup_34/tenant_locality_info
succeed to write_extern_backup_set_info:
/obcluster/1712641788/incarnation_1/1002/data/backup_set_34_full_20240508/backup_set_info
数据恢复
恢复前一定要停止日志归档,不能让日志再进行归档备份了。
需要提前创建要恢复的租户的资源池。
恢复并行度
查看恢复并行度
show parameters like 'restore_concurrency';
设置恢复并行度,可以提高恢复速度。
alter system set restore_concurrency = 20;
恢复等待时间
默认恢复等待时间 _restore_idle_time 为 1 分钟,生产环境不建议修改,整个恢复期间会有 3 次等待,即 3 分钟的等待时间。对于测试恢复性能的场景,为了减少恢复的空闲时间,可以执行以下语句将等待时间调整为 10s。
alter system set _restore_idle_time = '10s';
发起数据恢复
恢复租户命令的内部流程:
- 创建恢复用的租户
- 恢复租户的系统表数据
- 恢复租户的系统表日志
- 调整恢复租户的元信息
- 恢复租户的用户表数据
- 恢复租户的用户表日志
ALTER SYSTEM RESTORE tenant2 FROM tenant1 at 'file:///data/backup' until '2023-12-23 17:37:38.744639' with 'backup_cluster_name=ob3cluster&backup_cluster_id=1&pool_list=resource_pool2';
恢复命令中的参数含义
参数名称 | 含义 |
---|---|
backup_cluster_name | 备份集群的名称 |
backup_cluster_id | 备份集群的id |
pool_list | 恢复的资源池 |
恢复命令中util的时间如何找:
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_DETAILS;
SELECT * FROM oceanbase.CDB_OB_BACKUP_ARCHIVELOG_SUMMARY;
需要满足:
CDB_OB_BACKUP_SET_DETAILS:START_TIME < until <= CDB_OB_BACKUP_ARCHIVELOG_SUMMARY:MAX_NEXT_TIME
查看恢复进度
方式一
-- 正在恢复
SELECT * FROM __all_restore_info;
SELECT * FROM oceanbase.CDB_OB_RESTORE_PROGRESS;
方式二
SELECT svr_ip, role, is_restore, COUNT(*) FROM __all_root_table AS a, (SELECT value FROM __all_restore_info WHERE name='tenant_id') AS b WHERE a.tenant_id = b.value GROUP BY role, is_restore, svr_ip ORDER BY svr_ip, is_restore;
is_restore的取值含义如下:
- 0: 表示正常副本
- 1:表示逻辑恢复的副本
- 2:表示物理恢复需要恢复基线的副本
- 3:表示物理恢复需要恢复转储的副本
- 4:物理恢复需要恢复clog的副本
- 5:物理恢复需要转储的副本
- 6:物理恢复等待所有副本转储完成的副本
- 7:物理恢复设置 member list的副本
- 8:即将结束
role的取值含义:
- 1: 表示Leader
- 2: 表示Follower
- 3: 表示恢复中的Leader
恢复完成后检查
SELECT svr_ip, role, is_restore, count(*) FROM __all_virtual_meta_table AS a, (SELECT value FROM __all_restore_info WHERE name = 'tenant_id') AS b WHERE a.tenant_id = b.value GROUP BY role, is_restore, svr_ip ORDER BY svr_ip, is_restore;
或
SELECT svr_ip, is_restore, COUNT(*) FROM __all_virtual_partition_store_info WHERE tenant_id > 1001 GROUP BY svr_ip, is_restore ORDER BY svr_ip, is_restore;
验证恢复
连接恢复出来的租户,查看租户中的数据库、数据库中的表是否存在,如果有的话表示恢复成功。
查看恢复历史
方式一
SELECT * FROM oceanbase.CDB_OB_RESTORE_HISTORY;
方式二
SELECT * FROM __all_restore_history;
字段名称 | 字段含义 |
---|---|
restore_start_timestamp | 恢复开始时间 |
restore_finish_timestamp | 恢复结束时间 |
取消恢复
DROP TENANT tenant_name FORCE;
恢复日志分析
针对v3.2.4.4
tail -f /home/admin/oceanbase/log/rootservice.log | grep -v "succ set current backup dest" |grep -v "finish do log archive schedule" | grep -v "succeed to get backup log archive backup status" | grep "/mnt/nfs"
开始恢复的日志搜索:
start fill backup path
finish fill backup path
finish fill_physical_restore_job
execute write sql
insert job
physical restore tenant start
其他命令
租户
连接租户
obclient -h192.168.xxx.xxx -P2883 -uroot@tenant2#obcluster -pxxxxxx
查看租户
select * from __all_tenant;
删除租户
drop tenant {tenant_name};
drop tenant {tenant_name} force;
资源单元
创建资源单元
CREATE RESOURCE UNIT mysqlt_restore_unit max_cpu 16, max_memory 103079215104, max_iops 10240, max_disk_size 53687091200, max_session_num 64, MIN_CPU=16, MIN_MEMORY=103079215104, MIN_IOPS=10240;
创建的时候不指定max_iops和min_iops,恢复速度可能会快一些。
参数 | 含义 |
---|---|
max_iops | 最大io |
min_iops | 最小io |
查看资源单元
SELECT * FROM oceanbase.__all_unit_config;
删除资源单元
DROP RESOURCE UNIT {unit_name};
资源池
创建资源池
CREATE RESOURCE POOL mysqlt_restore_pool unit = '{unit_name}', unit_num = 1, zone_list = ('z1','z2','z3');
查看资源池
SELECT * FROM oceanbase.__all_resource_pool;
删除资源池
DROP RESOURCE POOL {pool_name};
参考资料
-
OceanBase v3.1.5 物理备份与恢复概述
https://www.oceanbase.com/docs/community-observer-cn-10000000001879588 -
详解OceanBase数据库备份恢复保障数据安全
https://zhuanlan.zhihu.com/p/498044128