首批通过分布式安全可靠测评,为关键业务系统打造
如何为全量备份集和增量备份集设置加密密码
更新时间:2026-05-11 09:51
备份数据加密的功能可以有效防止用户核心数据信息的泄漏,对备份数据集加密后,即使不法分子获取到了客户的备份文件,如果没有加密密码的话,也不能直接读取或者进行数据的恢复,因此可以有效地保护用户数据的安全。
本文主要介绍 OceanBase 数据库 V2.2.7x/V3.x/V4.x 版本中支持的对物理备份集进行加密的功能和详细操作步骤。
测试全量备份集和增量备份集设置加密密码的步骤
备注一:
以下的测试步骤均基于最新的 OceanBase 数据库 V4.x 版本,针对之前的 V2.2.7x/V3.x 版本,设置数据备份集加密、解密的关键命令均相同。
测试示例步骤。
为业务租户配置日志归档路径。
-- 连接到 root@sys 系统租户执行以下 SQL 语句,OceanBase 数据库 V4.x 版本中也可以直接在对应业务租户下去掉租户信息后执行。 MySQL [oceanbase]> ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=file:///obbackup/mysqlt/archive' tenant=mysqlt; Query OK, 0 rows affected (0.024 sec) MySQL [oceanbase]> select * from cdb_ob_archive_dest where tenant_id=1018; +-----------+---------+-----------------------+---------------------------------+ | TENANT_ID | DEST_NO | NAME | VALUE | +-----------+---------+-----------------------+---------------------------------+ | 1018 | 0 | binding | OPTIONAL | | 1018 | 0 | dest_id | 1001 | | 1018 | 0 | path | file:///obbackup/mysqlt/archive | | 1018 | 0 | piece_switch_interval | 1d | | 1018 | 0 | state | ENABLE | +-----------+---------+-----------------------+---------------------------------+ 5 rows in set (0.004 sec)为业务租户开启日志归档。
-- 连接到 root@sys 系统租户执行以下SQL语句,OceanBase 数据库 V4.x 版本中也可以直接在对应业务租户下去掉租户信息后执行。 MySQL [oceanbase]> alter system archivelog tenant=mysqlt; Query OK, 0 rows affected (0.006 sec) MySQL [oceanbase]> select * from cdb_ob_archivelog where tenant_id=1018; +-----------+---------+----------+-------------+---------+-----------+---------------------+----------------------------+---------------------+----------------------------+------------+---------------+---------------+-----------------------+-----------+-------------+-------------+---------------------+--------------+----------------------+-------------------+---------------------+-----------------------------+----------------------+------------------------------+---------+---------------------------------+ | TENANT_ID | DEST_ID | ROUND_ID | INCARNATION | DEST_NO | STATUS | START_SCN | START_SCN_DISPLAY | CHECKPOINT_SCN | CHECKPOINT_SCN_DISPLAY | COMPATIBLE | BASE_PIECE_ID | USED_PIECE_ID | PIECE_SWITCH_INTERVAL | UNIT_SIZE | COMPRESSION | INPUT_BYTES | INPUT_BYTES_DISPLAY | OUTPUT_BYTES | OUTPUT_BYTES_DISPLAY | COMPRESSION_RATIO | DELETED_INPUT_BYTES | DELETED_INPUT_BYTES_DISPLAY | DELETED_OUTPUT_BYTES | DELETED_OUTPUT_BYTES_DISPLAY | COMMENT | PATH | +-----------+---------+----------+-------------+---------+-----------+---------------------+----------------------------+---------------------+----------------------------+------------+---------------+---------------+-----------------------+-----------+-------------+-------------+---------------------+--------------+----------------------+-------------------+---------------------+-----------------------------+----------------------+------------------------------+---------+---------------------------------+ | 1018 | 1001 | 1 | 1 | 0 | BEGINNING | 1726717960689545000 | 2024-09-19 11:52:40.689545 | 1726717960689545000 | 2024-09-19 11:52:40.689545 | 1 | 1 | 1 | 86400000000 | 1 | none | 0 | 0.00MB | 0 | 0.00MB | 0.00 | 0 | 0.00MB | 0 | 0.00MB | | file:///obbackup/mysqlt/archive | +-----------+---------+----------+-------------+---------+-----------+---------------------+----------------------------+---------------------+----------------------------+------------+---------------+---------------+-----------------------+-----------+-------------+-------------+---------------------+--------------+----------------------+-------------------+---------------------+-----------------------------+----------------------+------------------------------+---------+---------------------------------+ 1 row in set (0.011 sec) -- 需要等到STATUS变为DOING才说明日志归档已经开启成功了 MySQL [oceanbase]> select * from cdb_ob_archivelog where tenant_id=1018; +-----------+---------+----------+-------------+---------+--------+---------------------+----------------------------+---------------------+----------------------------+------------+---------------+---------------+-----------------------+-----------+-------------+-------------+---------------------+--------------+----------------------+-------------------+---------------------+-----------------------------+----------------------+------------------------------+---------+---------------------------------+ | TENANT_ID | DEST_ID | ROUND_ID | INCARNATION | DEST_NO | STATUS | START_SCN | START_SCN_DISPLAY | CHECKPOINT_SCN | CHECKPOINT_SCN_DISPLAY | COMPATIBLE | BASE_PIECE_ID | USED_PIECE_ID | PIECE_SWITCH_INTERVAL | UNIT_SIZE | COMPRESSION | INPUT_BYTES | INPUT_BYTES_DISPLAY | OUTPUT_BYTES | OUTPUT_BYTES_DISPLAY | COMPRESSION_RATIO | DELETED_INPUT_BYTES | DELETED_INPUT_BYTES_DISPLAY | DELETED_OUTPUT_BYTES | DELETED_OUTPUT_BYTES_DISPLAY | COMMENT | PATH | +-----------+---------+----------+-------------+---------+--------+---------------------+----------------------------+---------------------+----------------------------+------------+---------------+---------------+-----------------------+-----------+-------------+-------------+---------------------+--------------+----------------------+-------------------+---------------------+-----------------------------+----------------------+------------------------------+---------+---------------------------------+ | 1018 | 1001 | 1 | 1 | 0 | DOING | 1726717960689545000 | 2024-09-19 11:52:40.689545 | 1726718080715984001 | 2024-09-19 11:54:40.715984 | 1 | 1 | 1 | 86400000000 | 1 | none | 38725420 | 36.93MB | 38725420 | 36.93MB | 1.00 | 0 | 0.00MB | 0 | 0.00MB | | file:///obbackup/mysqlt/archive | +-----------+---------+----------+-------------+---------+--------+---------------------+----------------------------+---------------------+----------------------------+------------+---------------+---------------+-----------------------+-----------+-------------+-------------+---------------------+--------------+----------------------+-------------------+---------------------+-----------------------------+----------------------+------------------------------+---------+---------------------------------+ 1 row in set (0.002 sec)为业务租户配置数据备份路径。
-- 连接到 root@sys 系统租户执行以下SQL语句,OB 4.x中也可以直接在对应业务租户下去掉租户信息后执行。 MySQL [oceanbase]> ALTER SYSTEM SET DATA_BACKUP_DEST='file:///obbackup/mysqlt/full_backup' tenant=mysqlt; Query OK, 0 rows affected (0.014 sec) MySQL [oceanbase]> select * from cdb_ob_backup_parameter where tenant_id=1018; +-----------+------------------+-------------------------------------+ | TENANT_ID | NAME | VALUE | +-----------+------------------+-------------------------------------+ | 1018 | data_backup_dest | file:///obbackup/mysqlt/full_backup | +-----------+------------------+-------------------------------------+ 1 row in set (0.004 sec)登录到业务用户,创建几张测试数据表并插入数据,用于后面验证加解密是否成功。
MySQL [test]> create table t1 (id int, value varchar(10)); Query OK, 0 rows affected (0.389 sec) MySQL [test]> insert into t1 values (1,'a'),(2,'b'),(3,'c'); Query OK, 3 rows affected (0.026 sec) Records: 3 Duplicates: 0 Warnings: 0 MySQL [test]> create table t2 (id int, value varchar(10)); Query OK, 0 rows affected (0.104 sec) MySQL [test]> insert into t2 values (4,'d'),(5,'e'),(6,'f'); Query OK, 3 rows affected (0.011 sec) Records: 3 Duplicates: 0 Warnings: 0 MySQL [test]> create table t3 (id int, value varchar(10)); Query OK, 0 rows affected (0.122 sec) MySQL [test]> insert into t3 values (7,'g'),(8,'h'),(9,'i'); Query OK, 3 rows affected (0.024 sec) Records: 3 Duplicates: 0 Warnings: 0 MySQL [test]> commit; Query OK, 0 rows affected (0.000 sec) MySQL [test]> select * from t1; +------+-------+ | id | value | +------+-------+ | 1 | a | | 2 | b | | 3 | c | +------+-------+ 3 rows in set (0.002 sec) MySQL [test]> select * from t2; +------+-------+ | id | value | +------+-------+ | 4 | d | | 5 | e | | 6 | f | +------+-------+ 3 rows in set (0.103 sec) MySQL [test]> select * from t3; +------+-------+ | id | value | +------+-------+ | 7 | g | | 8 | h | | 9 | i | +------+-------+ 3 rows in set (0.087 sec)为业务租户发起全量数据备份,并设置全量备份集的密码。
说明
- 该密码为备份后的备份集的密码。如果设置了该选项,在使用该备份集进行恢复时,需要输入该密码,且该密码不能被删除。
- 设置备份密码后,在未发起数据备份前,您可以通过断开当前会话再重新连接数据库的方式取消本次设置。
-- 连接到 root@sys 系统租户执行以下SQL语句,OceanBase 数据库 V4.x 版本中也可以直接在对应业务租户下去掉租户信息后执行。 MySQL [oceanbase]> SET ENCRYPTION ON IDENTIFIED BY 'xxx' ONLY; Query OK, 0 rows affected (0.000 sec) MySQL [oceanbase]> alter system backup tenant=mysqlt; Query OK, 0 rows affected (0.014 sec) MySQL [oceanbase]> select * from cdb_ob_backup_jobs; +-----------+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+-------------------------------------------+----------------------------+---------------+--------+--------+---------+-------------+-------------------------------------+ | TENANT_ID | JOB_ID | INCARNATION | BACKUP_SET_ID | INITIATOR_TENANT_ID | INITIATOR_JOB_ID | EXECUTOR_TENANT_ID | PLUS_ARCHIVELOG | BACKUP_TYPE | JOB_LEVEL | ENCRYPTION_MODE | PASSWD | START_TIMESTAMP | END_TIMESTAMP | STATUS | RESULT | COMMENT | DESCRIPTION | PATH | +-----------+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+-------------------------------------------+----------------------------+---------------+--------+--------+---------+-------------+-------------------------------------+ | 1 | 1 | 1 | 0 | 1 | 1 | 1018 | OFF | FULL | CLUSTER | PASSWORD | *8a32f92393afd774f330a5c75b7e42c294bcdd5c | 2024-09-19 12:06:02.736704 | NULL | DOING | 0 | | | | | 1018 | 1 | 1 | 1 | 1 | 1 | 1018 | OFF | FULL | USER_TENANT | PASSWORD | *8a32f92393afd774f330a5c75b7e42c294bcdd5c | 2024-09-19 12:06:02.751613 | NULL | DOING | 0 | | | file:///obbackup/mysqlt/full_backup | +-----------+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+-------------------------------------------+----------------------------+---------------+--------+--------+---------+-------------+-------------------------------------+ 2 rows in set (0.024 sec) -- 需要等到该视图里面对应租户的记录为空才说明全量备份已经成功完成了 MySQL [oceanbase]> select * from cdb_ob_backup_jobs; Empty set (0.008 sec)连接到业务用户,再做一些数据变更。
MySQL [test]> create table t4 (id int, value varchar(10)); Query OK, 0 rows affected (0.103 sec) MySQL [test]> insert into t4 values (10,'j'),(11,'k'),(12,'l'); Query OK, 3 rows affected (0.012 sec) Records: 3 Duplicates: 0 Warnings: 0 MySQL [test]> commit; Query OK, 0 rows affected (0.000 sec) MySQL [test]> select * from t4; +------+-------+ | id | value | +------+-------+ | 10 | j | | 11 | k | | 12 | l | +------+-------+ 3 rows in set (0.003 sec)为业务租户发起增量数据备份,并设置增量备份集的密码。
说明
- 该密码为备份后的备份集的密码。如果设置了该选项,在使用该备份集进行恢复时,需要输入该密码,且该密码不能被删除。
- 设置备份密码后,在未发起数据备份前,您可以通过断开当前会话再重新连接数据库的方式取消本次设置。
- 增量备份集的加密密码可以和全量备份集的加密密码相同,也可以不相同。
-- 连接到 root@sys 系统租户执行以下SQL语句,OceanBase 数据库 V4.x 版本中也可以直接在对应业务租户下去掉租户信息后执行。 MySQL [oceanbase]> SET ENCRYPTION ON IDENTIFIED BY 'xxx' ONLY; Query OK, 0 rows affected (0.000 sec) MySQL [oceanbase]> alter system backup incremental tenant=mysqlt; Query OK, 0 rows affected (0.010 sec) MySQL [oceanbase]> select * from cdb_ob_backup_jobs; +-----------+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+-------------------------------------------+----------------------------+---------------+--------+--------+---------+-------------+-------------------------------------+ | TENANT_ID | JOB_ID | INCARNATION | BACKUP_SET_ID | INITIATOR_TENANT_ID | INITIATOR_JOB_ID | EXECUTOR_TENANT_ID | PLUS_ARCHIVELOG | BACKUP_TYPE | JOB_LEVEL | ENCRYPTION_MODE | PASSWD | START_TIMESTAMP | END_TIMESTAMP | STATUS | RESULT | COMMENT | DESCRIPTION | PATH | +-----------+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+-------------------------------------------+----------------------------+---------------+--------+--------+---------+-------------+-------------------------------------+ | 1 | 2 | 1 | 0 | 1 | 2 | 1018 | OFF | INC | CLUSTER | PASSWORD | *d7163393bcdf63e68271250fe8a724f449684fd4 | 2024-09-19 12:14:54.257320 | NULL | DOING | 0 | | | | | 1018 | 2 | 1 | 2 | 1 | 2 | 1018 | OFF | INC | USER_TENANT | PASSWORD | *d7163393bcdf63e68271250fe8a724f449684fd4 | 2024-09-19 12:14:54.268441 | NULL | INIT | 0 | | | file:///obbackup/mysqlt/full_backup | +-----------+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+-------------------------------------------+----------------------------+---------------+--------+--------+---------+-------------+-------------------------------------+ 2 rows in set (0.009 sec) -- 需要等到该视图里面对应租户的记录为空才说明增量备份已经成功完成了 MySQL [oceanbase]> select * from cdb_ob_backup_jobs; Empty set (0.008 sec)在 sys 租户下执行租户恢复的任务,恢复时需要使用到全量数据集和增量数据集加密的密码。
说明
- 如果全量备份和增量备份设置的密码相同,则只需要输入一个密码。
- 如果全量备份和增量备份设置的密码不一样,则需要输入多个密码,密码之间使用英文逗号分隔(全量备份密码放在前面,增量备份密码放在后面)。
- 如果用户提供的全量备份集或增量备份集的密码错误,执行恢复命令均会遇到报错
ERROR 9047 (HY000): invalid password for backup。
-- 连接到 root@sys 系统租户执行以下SQL语句,OceanBase 数据库 V4.x 版本中也可以直接在对应业务租户下去掉租户信息后执行。 MySQL [oceanbase]> create resource unit unit_3c12g min_cpu=3, max_cpu=3, memory_size='12g'; Query OK, 0 rows affected (0.004 sec) MySQL [oceanbase]> create resource pool restore_pool unit='unit_3c12g', unit_num=1; Query OK, 0 rows affected (0.009 sec) MySQL [oceanbase]> set decryption identified by 'xxx','xxx'; Query OK, 0 rows affected (0.000 sec) MySQL [oceanbase]> ALTER SYSTEM RESTORE mysqlt_restore FROM 'file:///obbackup/mysqlt/full_backup,file:///obbackup/mysqlt/archive' WITH 'pool_list=restore_pool&concurrency=3'; Query OK, 0 rows affected (34.041 sec) MySQL [oceanbase]> select * from cdb_ob_restore_progress; +-----------+--------+---------------------+-------------------+--------------------+------------------+---------------------+---------------------------------------------------------------------+--------------------------------------+---------------------+----------------------------+----------------------------+----------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------+-------------+---------------------+------------------+--------------+---------------------+------------------+-------------+---------------------+--------------+----------------------+-------------+ | TENANT_ID | JOB_ID | RESTORE_TENANT_NAME | RESTORE_TENANT_ID | BACKUP_TENANT_NAME | BACKUP_TENANT_ID | BACKUP_CLUSTER_NAME | BACKUP_DEST | RESTORE_OPTION | RESTORE_SCN | RESTORE_SCN_DISPLAY | STATUS | START_TIMESTAMP | BACKUP_SET_LIST | BACKUP_PIECE_LIST | RECOVER_SCN | RECOVER_SCN_DISPLAY | RECOVER_PROGRESS | TABLET_COUNT | FINISH_TABLET_COUNT | RESTORE_PROGRESS | TOTAL_BYTES | TOTAL_BYTES_DISPLAY | FINISH_BYTES | FINISH_BYTES_DISPLAY | DESCRIPTION | +-----------+--------+---------------------+-------------------+--------------------+------------------+---------------------+---------------------------------------------------------------------+--------------------------------------+---------------------+----------------------------+----------------------------+----------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------+-------------+---------------------+------------------+--------------+---------------------+------------------+-------------+---------------------+--------------+----------------------+-------------+ | 1 | 11 | mysqlt_restore | 1020 | mysqlt | 1018 | hygon7490_clu2 | file:///obbackup/mysqlt/full_backup,file:///obbackup/mysqlt/archive | pool_list=restore_pool&concurrency=3 | 1726722761359211000 | 2024-09-19 13:12:41.359211 | WAIT_TENANT_RESTORE_FINISH | 2024-09-19 13:14:32.846387 | file:///obbackup/mysqlt/full_backup/backup_set_1_full,file:///obbackup/mysqlt/full_backup/backup_set_2_inc | file:///obbackup/mysqlt/archive/piece_d1001r1p1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | | 1020 | 11 | mysqlt_restore | 1020 | mysqlt | 1018 | hygon7490_clu2 | file:///obbackup/mysqlt/full_backup,file:///obbackup/mysqlt/archive | pool_list=restore_pool&concurrency=3 | 1726722761359211000 | 2024-09-19 13:12:41.359211 | RESTORING | 2024-09-19 13:14:32.846387 | file:///obbackup/mysqlt/full_backup/backup_set_1_full,file:///obbackup/mysqlt/full_backup/backup_set_2_inc | file:///obbackup/mysqlt/archive/piece_d1001r1p1 | 1 | NULL | 0.00 | 0 | 0 | NULL | 0 | 0.00MB | 0 | 0.00MB | | +-----------+--------+---------------------+-------------------+--------------------+------------------+---------------------+---------------------------------------------------------------------+--------------------------------------+---------------------+----------------------------+----------------------------+----------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------+-------------+---------------------+------------------+--------------+---------------------+------------------+-------------+---------------------+--------------+----------------------+-------------+ 2 rows in set (0.054 sec) -- 需要等到该视图里面的记录为空才说明租户恢复任务已经成功完成了 MySQL [oceanbase]> select * from cdb_ob_restore_progress; Empty set (0.025 sec) MySQL [oceanbase]> select * from dba_ob_tenants where tenant_name='mysqlt_restore'; +-----------+----------------+-------------+----------------------------+----------------------------+--------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID | +-----------+----------------+-------------+----------------------------+----------------------------+--------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+ | 1020 | mysqlt_restore | USER | 2024-09-19 13:14:49.231561 | 2024-09-19 13:18:06.838153 | RANDOM | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | STANDBY | NORMAL | 0 | 1726722761359211000 | 1726722761359211000 | 1726722761359211000 | 1726722761359211000 | NOARCHIVELOG | DISABLED | 1 | 4.2.4.0 | 1003 | +-----------+----------------+-------------+----------------------------+----------------------------+--------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+ 1 row in set (0.026 sec)连接到恢复出来的新租户,检查恢复出来的用户数据是否正确。
MySQL [test]> show tables; +----------------+ | Tables_in_test | +----------------+ | t1 | | t2 | | t3 | | t4 | +----------------+ 4 rows in set (0.006 sec) MySQL [test]> select * from t1; +------+-------+ | id | value | +------+-------+ | 1 | a | | 2 | b | | 3 | c | +------+-------+ 3 rows in set (0.106 sec) MySQL [test]> select * from t2; +------+-------+ | id | value | +------+-------+ | 4 | d | | 5 | e | | 6 | f | +------+-------+ 3 rows in set (0.010 sec) MySQL [test]> select * from t3; +------+-------+ | id | value | +------+-------+ | 7 | g | | 8 | h | | 9 | i | +------+-------+ 3 rows in set (0.010 sec) MySQL [test]> select * from t4; +------+-------+ | id | value | +------+-------+ | 10 | j | | 11 | k | | 12 | l | +------+-------+ 3 rows in set (0.010 sec)
备注二:
- OceanBase 数据库版本在 V3.2.2-20220304134610 及之后版本的租户才能进行租户级备份,不过 OceanBase 数据库 V3.x 版本的租户级备份本质上是租户级快照备份,OceanBase 数据库 V4.x 版本中实现了完整功能的租户级备份。
- OceanBase 数据库 V2.2.7x/V3.x/V4.x 版本中的恢复均是以租户为粒度进行恢复的。
- OceanBase 数据库 V2.2.7x/V3.x 版本中恢复出来的租户默认是一个主租户(
status=TENANT_STATUS_NORMAL),是可以进行数据的修改的。 - OceanBase 数据库 V4.x 版本中恢复出来的租户默认是一个备租户(
TENANT_ROLE=STANDBY),因此还是只读的。并且,使用默认的 RESTORE 命令创建的新备租户,不会连续同步主租户或源端备租户归档的日志,需要手动再执行 RECOVER 命令重新设置新备租户的恢复终点,开启日志持续同步模式。 - 相关 SQL 语句:
MySQL [oceanbase]> ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL UNLIMITED;。如果需要将备租户切换成主租户,可以在 sys 租户下执行:MySQL [oceanbase]> ALTER SYSTEM ACTIVATE STANDBY TENANT tenant_name;。
适用版本
OceanBase 数据库 V2.2.7x/V3.x/V4.x 版本。