首批通过分布式安全可靠测评,为关键业务系统打造
设置日志恢复源
更新时间:2026-04-07 20:57:20
无论是基于日志归档的物理备库,还是基于网络的物理备库,都需要为备租户设置日志恢复源。两种部署方式的日志恢复源支持随时按需动态修改,同时也支持从一种日志恢复源切换为另外一种日志恢复源。本节将分别从基于日志归档的物理备库场景和基于网络的物理备库场景介绍如何设置日志恢复源。
注意事项
在从一种日志恢复源修改为另一种日志恢复源时,必须保证修改前后其日志恢复源与创建备租户时所指定的源租户一致,即要么使用源租户的日志归档,要么直接指向源租户。如果修改前后的日志恢复源不一致,将会导致备租户的数据错误且无法恢复,需要您重新创建新的备租户。
基于日志归档的物理备库的场景
通过物理备份恢复(带日志)功能创建的备租户,在执行 RESTORE 命令恢复出备租户时已为备租户设置了默认的恢复源,即默认恢复源为主租户或源端的备租户的日志归档目的端,故通常不需要再设置。如果需要将日志恢复源修改为直接指向主租户或源端的备租户,请参考本文中 基于网络的物理备库的场景 的内容重新进行设置。
对于使用其他方式(创建空备租户和使用 BACKUP DATABASE PLUS ARCHIVELOG 功能创建备租户)创建的备租户,如果需要将日志恢复源设置为使用主租户的日志归档,则需要参考以下操作手动设置日志恢复源。
注意
当归档介质为对象存储(例如:阿里云 OSS、Azure Blob、AWS S3 以及兼容 S3 协议的对象存储)时,物理备库运行过程中,如果主租户或源端的备租户更改了备份介质的密钥信息,则需要参考以下操作重新设置日志恢复源。
使用管理员用户登录备租户或备租户所在集群的
sys租户。执行以下命令,配置备租户的恢复源指向主租户的归档目的端。
备租户所在集群的
sys租户配置备租户的恢复源ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path' TENANT = tenant_name;备租户配置本租户的恢复源
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path';
其中,
LOCATION属性用于指定主租户的归档目的端。以下以归档介质为 OSS 或 NFS 时为例。
阿里云 OSSNFS当主租户的归档介质为 OSS 时,备租户所在集群的
sys租户或备租户设置日志恢复源的示例如下:obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****' TENANT = standby_tenant;obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****';当主租户的归档介质为 NFS 时,备租户所在集群的
sys租户或备租户设置日志恢复源的示例如下:obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=file:///data/1/sh_archive' TENANT = standby_tenant;obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=file:///data/1/sh_archive';
基于网络的物理备库的场景
通过创建空备租户的方式创建的备租户,在执行 CREATE STANDBY TENANT 命令时已通过 LOG_RESTORE_SOURCE 参数设置了一个默认的日志恢复源,即默认恢复源为直接指向主租户,故通常不需要再设置。如果仍需要将日志恢复源修改为使用主租户的日志归档,则需要您参考本文中 基于日志归档的物理备库的场景 重新设置日志恢复源。
对于使用其他方式(使用备份恢复(带日志)功能创建备租户和使用 BACKUP DATABASE PLUS ARCHIVELOG 功能创建备租户)创建的备租户,如果需要将日志恢复源设置为指向主租户或源端的备租户,则需要参考以下操作通过 ALTER SYSTEM SET LOG_RESTORE_SOURCE 命令手动设置日志恢复源。
步骤一:创建访问视图的专用用户
由于备租户在连接主租户或源端的备租户时,需要访问主租户或源端的备租户的部分系统视图,因此需要有一个访问视图专用用户具备这部分系统视图的查询权限。您可以提供一个主租户或源端的备租户上已有相关权限的用户,也可以在主租户或源端的备租户上为当前备租户专门创建一个新的具备相关权限的用户。
备租户需要访问的系统视图如下:
GV$OB_LOG_STAT:用于获取主租户的机器列表、副本服务的日志流 LSN 范围、角色(是否是 Leader)等信息。关于
GV$OB_LOG_STAT视图的更多介绍,参见 GV$OB_LOG_STAT。GV$OB_UNITS:查询主租户的所有 Unit 信息,获取副本状态、Zone 以及 Region 等信息,用于过滤、获取和维护租户机器连接等。关于
GV$OB_UNITS视图的更多介绍,参见 GV$OB_UNITS。GV$OB_PARAMETERS: 用于查询主租户的cluster_id、tenant_id等服务必须的元信息。关于
GV$OB_PARAMETERS视图的更多介绍,请参见 GV$OB_PARAMETERS。DBA_OB_ACCESS_POINT: 用于获取访问入口信息。在主租户迁移复制、容灾等场景下,若访问入口发生变化,备租户可以自动感知,不需要用户手动修改。关于
DBA_OB_ACCESS_POINT视图的更多介绍,参见 DBA_OB_ACCESS_POINT。DBA_OB_TENANTS:获取主租户的兼容模式。关于
DBA_OB_TENANTS视图的更多介绍,参见 DBA_OB_TENANTS。DBA_OB_LS: 获取主租户的日志流列表以及日志流状态。关于
DBA_OB_LS视图的更多介绍,参见 DBA_OB_LS。
创建访问视图专用用户并授权的具体操作如下。
注意
OceanBase 数据库的用户名和权限信息是在主备租户之间进行同步,备租户自身不允许创建用户和授予权限。因此,如果当前备租户的源端是另外一个备租户,则需要在对应的主租户上创建访问视图专用用户并授予权限。
MySQL模式
使用管理员用户登录到主租户。
执行以下命令,创建一个新用户。
obclient [oceanbase]> CREATE USER rep_user IDENTIFIED BY '******';给用户授权。
以下示例是将
oceanbase数据库下所有表的SELECT权限授予该用户。您也可以仅授予oceanbase库下GV$OB_LOG_STAT、GV$OB_UNITS、GV$OB_PARAMETERS、DBA_OB_ACCESS_POINT、DBA_OB_TENANTS、DBA_OB_LS等视图的 SELECT 权限。obclient [oceanbase]> GRANT SELECT ON oceanbase.* TO rep_user;
Oracle 模式
使用管理员用户登录到主租户。
创建一个新用户。
obclient [SYS]> CREATE USER rep_user IDENTIFIED BY '******';将角色
STANDBY_REPLICATION授予新用户rep_user。STANDBY_REPLICATION为系统默认角色,该角色默认包含CREATE SESSION系统权限以及对以下视图的查询权限:- GV$OB_LOG_STAT
- GV$OB_UNITS
- GV$OB_PARAMETERS
- DBA_OB_ACCESS_POINT
- DBA_OB_TENANTS
- DBA_OB_LS
- DBA_OB_LS_HISTORY
语句如下:
obclient [SYS]> GRANT STANDBY_REPLICATION TO rep_user;
步骤二:获取主租户或源端的备租户的访问入口信息
基于网络的物理备库在设置日志恢复源时,还需要获取主租户或源端的备租户的访问入口信息,即租户副本所在的 OBServer 节点的 IP 地址及其端口号。
使用管理员用户登录主租户或源端的备租户。
执行以下命令,获取访问入口信息。
MySQL 模式
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_ACCESS_POINT;说明
如果您当前登录的是
sys租户,需要通过查询CDB_OB_ACCESS_POINT视图来获取访问入口信息。Oracle 模式
obclient [SYS]> SELECT * FROM SYS.DBA_OB_ACCESS_POINT;
查询结果如下:
+-----------+-------------+-------------+----------+ | TENANT_ID | TENANT_NAME | SVR_IP | SQL_PORT | +-----------+-------------+-------------+----------+ | 1004 | mysql | xx.xx.xx.22 | 17855 | | 1004 | mysql | xx.xx.xx.23 | 17857 | | 1004 | mysql | xx.xx.xx.24 | 17859 | +-----------+-------------+-------------+----------+ 3 rows in set本示例中,查询的租户有三个副本,如果主租户或源端的备租户为单副本租户,则仅返回一行结果。
步骤三:检查主租户设置
在当前主备架构下,当主租户进行缩容、Transfer 等操作后,容易出现主租户的日志流被删除、日志被回收从而导致备租户日志同步卡住的问题。为了解决该问题,需要在主租户上开启归档模式或者为主租户设置租户级配置项 ls_gc_delay_time。
检查主租户上是否开启日志归档或者设置配置项 ls_gc_delay_time 的方法如下:
检查主租户是否开启归档模式
使用管理员用户登录主租户或主租户所在集群的
sys租户。查询是否开启归档模式。
主租户所在集群的
sys租户obclient> SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mysql';用户租户
MySQL 模式Oracle 模式MySQL 模式下查询是否开启归档模式:
obclient> SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS;Oracle 模式下查询是否开启归档模式:
obclient> SELECT LOG_MODE FROM SYS.DBA_OB_TENANTS;
查询结果的示例如下:
+--------------+ | LOG_MODE | +--------------+ | NOARCHIVELOG | +--------------+ 1 row in set根据查询结果,
ARCHIVELOG表示主租户已开启归档模式;NOARCHIVELOG表示未开启归档模式,开启归档模式的详细操作参见 开启归档模式。
检查主租户上配置项
ls_gc_delay_time的值是否大于0s租户级配置项
ls_gc_delay_time用于配置日志流的延迟删除时间,默认值为0s,表示未开启日志流延迟删除功能。当设置了配置项ls_gc_delay_time并且未开启归档时,一个日志流在满足被删除的条件后会等待一定的时间才会被回收。使用管理员用户登录主租户。
查询主租户上配置项
ls_gc_delay_time的值。obclient> SHOW PARAMETERS LIKE '%ls_gc_delay_time%';根据查询结果,如果值为
0s,则表示未设置,用户可以根据需要进行设置。配置项ls_gc_delay_time的详细设置方法及说明,参见 ls_gc_delay_time。
步骤四:设置日志恢复源
使用管理员用户登录备租户或备租户所在集群的
sys租户。执行以下命令,设置日志恢复源。
备租户所在集群的
sys租户设置备租户的日志恢复源ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password' TENANT = standby_tenant_name;备租户设置本租户的日志恢复源
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password';
部分参数说明如下:
$ip_list:主租户或源端的备租户所在副本的 OBServer 节点的 IP 及 SQL 端口号。此处填写步骤二中获取的信息。如果有多个 OBServer 节点信息,可以不用填写全部 OBServer 节点的信息。$user_name:填写步骤一中创建的访问视图的专用用户。$tenant_name:待连接的主租户或源端的备租户名。$password:访问视图的专用用户对应的用户密码。
示例如下:
obclient > ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******' TENANT = standby_tenant;obclient > ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******';设置成功后,系统租户(
sys租户)或用户租户可以分别通过CDB_OB_LOG_RESTORE_SOURCE视图和DBA_OB_LOG_RESTORE_SOURCE视图,确认日志恢复源是否修改成功,详细操作请参见 查看日志恢复源信息。