首批通过分布式安全可靠测评,为关键业务系统打造
如何手工黑屏发起一次集群备份(全量备份+增量备份)
更新时间:2026-05-11 09:51
本文主要介绍如何手工黑屏发起一次集群备份(全量备份+增量备份)。
适用版本
OceanBase 数据库 V2.2.76 及之后版本(不包括 V4.0 及之后版本)。
操作步骤
集群备份主要分为以下三步:
第一步:设置备份路径 backup_dest,并启动日志备份。 第二步:发起全量数据备份,等待完成后;再进行增量数据备份。 第三步:通过查看数据备份历史任务的命令,检查全量备份和增量备份是否成功。
首先使用 root 用户登录数据库的 sys 租户。
obclient -h172.20.xx.x -uroot@sys -P2xxx -pOceanBasexxx -A oceanbase Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 3221497706 Server version: 5.7.25 OceanBase 3.2.3.3 (r107010022023021010-264a76a4fa7b5ff429149d60ca051391dc4176e9) (Built Feb 10 2023 10:47:00) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.先查看下
backup_dest的路径设置是否为空。这里value是空值,需要设置一下。obclient [oceanbase]> show parameters like 'backup_dest';查询结果如下。
+-------+----------+-------------+----------+-------------+-----------+-------+-------------+----------+---------+---------+-------------------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | +-------+----------+-------------+----------+-------------+-----------+-------+-------------+----------+---------+---------+-------------------+ | zone1 | observer | 172.xx.xx.x | 2882 | backup_dest | NULL | | backup dest | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | +-------+----------+-------------+----------+-------------+-----------+-------+-------------+----------+---------+---------+-------------------+ 1 row in set (0.004 sec)设置
backup_dest前,先把日志备份停下来。这里路径是空的,肯定是没启动日志备份,所以报错了。obclient [oceanbase]> alter system noarchivelog; ERROR 9024 (HY000): log archive backup is already disabled查看一下日志备份的状态,可以看到是
STOP。obclient [oceanbase]> select * from cdb_ob_backup_archivelog;返回结果如下。
+-------------+-------------------+-----------+--------+----------------+-----------------+----------------+---------------+-------------+--------------+-------------------+---------------------+----------------------+ | INCARNATION | LOG_ARCHIVE_ROUND | TENANT_ID | STATUS | START_PIECE_ID | BACKUP_PIECE_ID | MIN_FIRST_TIME | MAX_NEXT_TIME | INPUT_BYTES | OUTPUT_BYTES | COMPRESSION_RATIO | INPUT_BYTES_DISPLAY | OUTPUT_BYTES_DISPLAY | +-------------+-------------------+-----------+--------+----------------+-----------------+----------------+---------------+-------------+--------------+-------------------+---------------------+----------------------+ | 1 | 0 | 1 | STOP | 0 | 0 | | | 0 | 0 | NULL | 0.00MB | 0.00MB | +-------------+-------------------+-----------+--------+----------------+-----------------+----------------+---------------+-------------+--------------+-------------------+---------------------+----------------------+ 1 row in set (0.001 sec)这个是比较关键的一步,设置你需要备份的路径。
注意
这个路径要提前做过服务端挂载,不然备份可能会失败!同时确保目录为空。
obclient [oceanbase]> alter system set backup_dest='file:///obbackup'; Query OK, 0 rows affected (0.047 sec)再次查看
backup_dest的路径是否设置。这里value变成了file:///obbackup,说明 设置备份路径backup_dest已经设置成功了。obclient [oceanbase]> show parameters like 'backup_dest';返回结果如下。
+-------+----------+-------------+----------+-------------+-----------+------------------+-------------+----------+---------+---------+-------------------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | +-------+----------+-------------+----------+-------------+-----------+------------------+-------------+----------+---------+---------+-------------------+ | zone1 | observer | 172.xx.xx.x | 2882 | backup_dest | NULL | file:///obbackup | backup dest | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | +-------+----------+-------------+----------+-------------+-----------+------------------+-------------+----------+---------+---------+-------------------+ 1 row in set (0.004 sec)启动日志备份。这里会在指定路径下开始日志备份。
obclient [oceanbase]> alter system archivelog; Query OK, 0 rows affected (0.055 sec)查看一下日志备份的状态。可以看到是
BEGINNING,说明日志备份正在启动,需要等待它完全拉起。obclient [oceanbase]> select * from cdb_ob_backup_archivelog;返回结果如下。
+-------------+-------------------+-----------+-----------+----------------+-----------------+----------------------------+---------------+-------------+--------------+-------------------+---------------------+----------------------+ | INCARNATION | LOG_ARCHIVE_ROUND | TENANT_ID | STATUS | START_PIECE_ID | BACKUP_PIECE_ID | MIN_FIRST_TIME | MAX_NEXT_TIME | INPUT_BYTES | OUTPUT_BYTES | COMPRESSION_RATIO | INPUT_BYTES_DISPLAY | OUTPUT_BYTES_DISPLAY | +-------------+-------------------+-----------+-----------+----------------+-----------------+----------------------------+---------------+-------------+--------------+-------------------+---------------------+----------------------+ | 1 | 1 | 1 | BEGINNING | 0 | 0 | 2023-02-22 11:30:19.963182 | | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1001 | BEGINNING | 0 | 0 | 2023-02-17 15:09:50.988364 | | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1002 | BEGINNING | 0 | 0 | 2023-02-17 15:09:58.602044 | | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1003 | BEGINNING | 0 | 0 | 2023-02-17 15:10:05.785874 | | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1004 | BEGINNING | 0 | 0 | 2023-02-17 15:10:13.116938 | | 0 | 0 | NULL | 0.00MB | 0.00MB | +-------------+-------------------+-----------+-----------+----------------+-----------------+----------------------------+---------------+-------------+--------------+-------------------+---------------------+----------------------+ 5 rows in set (0.001 sec)再次查看一下日志备份的状态。可以看到是
DOING,说明日志备份已经完全起来了。说明第一步就完成了。obclient [oceanbase]> select * from cdb_ob_backup_archivelog;返回结果如下。
+-------------+-------------------+-----------+--------+----------------+-----------------+----------------------------+----------------------------+-------------+--------------+-------------------+---------------------+----------------------+ | INCARNATION | LOG_ARCHIVE_ROUND | TENANT_ID | STATUS | START_PIECE_ID | BACKUP_PIECE_ID | MIN_FIRST_TIME | MAX_NEXT_TIME | INPUT_BYTES | OUTPUT_BYTES | COMPRESSION_RATIO | INPUT_BYTES_DISPLAY | OUTPUT_BYTES_DISPLAY | +-------------+-------------------+-----------+--------+----------------+-----------------+----------------------------+----------------------------+-------------+--------------+-------------------+---------------------+----------------------+ | 1 | 1 | 1 | DOING | 0 | 0 | 2023-02-22 11:30:19.963182 | 2023-02-22 11:30:29.698303 | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1001 | DOING | 0 | 0 | 2023-02-22 11:30:19.963182 | 2023-02-22 11:30:29.698303 | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1002 | DOING | 0 | 0 | 2023-02-22 11:30:19.963182 | 2023-02-22 11:30:29.699315 | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1003 | DOING | 0 | 0 | 2023-02-22 11:30:19.963182 | 2023-02-22 11:30:29.699315 | 0 | 0 | NULL | 0.00MB | 0.00MB | | 1 | 1 | 1004 | DOING | 0 | 0 | 2023-02-22 11:30:19.963182 | 2023-02-22 11:30:29.698303 | 0 | 0 | NULL | 0.00MB | 0.00MB | +-------------+-------------------+-----------+--------+----------------+-----------------+----------------------------+----------------------------+-------------+--------------+-------------------+---------------------+----------------------+ 5 rows in set (0.001 sec) ```发起集群合并。发起备份前先做一次合并。
注意
OceanBase 数据库 V3.2 以后版本可以不做合并,直接发起备份。为了提高备份效率和性能,仍然建议备份前进行一次集群合并。
obclient [oceanbase]> alter system major freeze; Query OK, 0 rows affected (0.013 sec)这条命令可以查看到集群合并的状态。这里还是
MERGING状态,等待合并完成。obclient [oceanbase]> select * from __all_zone where name like 'merge_status';返回结果如下。
+----------------------------+----------------------------+-------+--------------+-------+---------+ | gmt_create | gmt_modified | zone | name | value | info | +----------------------------+----------------------------+-------+--------------+-------+---------+ | 2023-02-17 15:07:31.881643 | 2023-02-22 11:33:57.831798 | | merge_status | 1 | MERGING | | 2023-02-17 15:07:31.882696 | 2023-02-22 11:33:57.862263 | zone1 | merge_status | 1 | MERGING | +----------------------------+----------------------------+-------+--------------+-------+---------+ 2 rows in set (0.001 sec)查看到集群合并的状态。状态变成了
IDLE,说明合并完成了。obclient [oceanbase]> select * from __all_zone where name like 'merge_status';返回结果如下。
+----------------------------+----------------------------+-------+--------------+-------+------+ | gmt_create | gmt_modified | zone | name | value | info | +----------------------------+----------------------------+-------+--------------+-------+------+ | 2023-02-17 15:07:31.881643 | 2023-02-22 11:34:37.507944 | | merge_status | 0 | IDLE | | 2023-02-17 15:07:31.882696 | 2023-02-22 11:34:27.384210 | zone1 | merge_status | 0 | IDLE | +----------------------------+----------------------------+-------+--------------+-------+------+ 2 rows in set (0.002 sec)发起集群全量数据备份,等待完成。
obclient [oceanbase]> alter system backup database ; Query OK, 0 rows affected (0.618 sec)发起集群增量数据备份,等待完成。说明第二步全量备份和增量备份就完成了。
obclient [oceanbase]> alter system backup incremental database; Query OK, 0 rows affected (0.264 sec) ```查看集群两次备份的情况,可以发现全量备份和增量备份都成功了。
obclient [oceanbase]> select incarnation, tenant_id, bs_key, backup_type, start_time, completion_time from CDB_OB_BACKUP_SET_DETAILS order by start_time;返回结果如下。
+-------------+-----------+--------+-------------+----------------------------+----------------------------+ | incarnation | tenant_id | bs_key | backup_type | start_time | completion_time | +-------------+-----------+--------+-------------+----------------------------+----------------------------+ | 1 | 1 | 1 | D | 2023-02-22 11:37:11.656803 | 2023-02-22 11:38:01.775377 | | 1 | 1001 | 1 | D | 2023-02-22 11:37:11.656803 | 2023-02-22 11:37:59.059722 | | 1 | 1002 | 1 | D | 2023-02-22 11:37:11.656803 | 2023-02-22 11:37:59.866087 | | 1 | 1003 | 1 | D | 2023-02-22 11:37:11.656803 | 2023-02-22 11:38:00.720019 | | 1 | 1004 | 1 | D | 2023-02-22 11:37:11.656803 | 2023-02-22 11:38:01.564347 | | 1 | 1 | 2 | I | 2023-02-22 11:42:38.491200 | 2023-02-22 11:43:30.938047 | | 1 | 1001 | 2 | I | 2023-02-22 11:42:38.491200 | 2023-02-22 11:43:22.552796 | | 1 | 1002 | 2 | I | 2023-02-22 11:42:38.491200 | 2023-02-22 11:43:25.273293 | | 1 | 1003 | 2 | I | 2023-02-22 11:42:38.491200 | 2023-02-22 11:43:28.008605 | | 1 | 1004 | 2 | I | 2023-02-22 11:42:38.491200 | 2023-02-22 11:43:30.741481 | +-------------+-----------+--------+-------------+----------------------------+----------------------------+ 10 rows in set (0.001 sec)
更多信息
查看集群的合并状态
obclient [oceanbase]> SELECT *FROM __all_zone WHERE name='last_merged_version' OR name='frozen_version' OR name='merge_status';查看数据备份当前任务
obclient [oceanbase]> select* from CDB_OB_BACKUP_PROGRESS;查看数据备份历史任务
obclient [oceanbase]> select incarnation, tenant_id, bs_key, backup_type, start_time, completion_time from CDB_OB_BACKUP_SET_DETAILS order by start_time;backup_type=D表示全量备份,backup_type=I表示增量备份。