目录
数据库中的数据是很重要的要素,DBA主要职责要要保障数据库系统不间断运行。在生产环境中,可能发生硬件故障、软件故障、自然灾害、黑客攻击及人为的误操等因素,从而导致数据丢失的情况发生。
GBase 8a MPP Cluster(以下简称8a集群) 作为MPP分析型集群,在备份恢复与OLTP事务数据库有较大差异。如事务数据库具有完备的WAL(write ahead logging)事务日志,可以通过事务日志实现数据库的备份、双活复制、异地容灾等;MPP分析型数据库为追求大吞吐性能去掉了事务日志支持,无法采用基于事务日志方式实现备份恢复、容灾备份方案。
8a集群提供专用的备份恢复工具(gcrcman)实现本地备份;对于容灾备份,提供异步双活集群、实时双活集群和两地三中心灾备方案,满足数据安全、业务连续要求。本文详细介绍备份恢复工具gcrcman使用方法。
一、备份恢复工具gcrcman
GBase 8a MPP Cluster 提供专用的备份恢复工具(gcrcman),让用户可以方便地对整个集群中的数据进行备份和恢复,防止数据丢失或损坏对用户业务造成不利影响,保障在异常情况下能够快速恢复系统。备份恢复工具 gcrcman.py 随集群的安装自动安装在$GCLUSTER_BASE/server/bin 目录下。
1、gcrcman的具体功能:
- 支持集群级、库级、表级的全量备份
- 支持集群级、库级、表级的增量备份
- 支持集群级、库级、表级恢复到指定备份周期的指定备份点
- 支持集群级、库级、表级恢复到最新备份周期最新备份点
- 支持异地备份恢复(nfs 挂载异地备份恢复数据存放磁盘)
- 支持删除备份和清除无效备份数据
- 支持查看备份信息
- 支持删除备份数据
- 支持删除垃圾备份数据
2、 执行gcrcman的注意事项
gcrcman.py 是备份恢复工具执行文件,执行时注意事项如下:
- 必须是安装数据库时指定的 dbauser(例如:gbase)账号执行备份恢复操作
- 每次只能运行一个gcrcman.py程序,只需在即安装 gcware 服务又有gcluster服务的Coordinator任一节点执行备份操作即可
- 集群上每个节点需要建立一个同样名称的备份目录,可nfs到异地备份文件服务器目录上,dbauser对该备份目录具有读写权限,不能将 $GCLUSTER_BASE、$GBASE_BASE、$GCWARE_BASE 这三个目录及其子目录设置为备份目录名称
- 执行备份时要求8a集群各节点运行正常,没有offline节点,没有event事件日志。
- 执行 gcrcman.py 命令,需要确定操作系统已安装 pexpect 包(未安装会报错 “gcrcman error:No module named pexpect”)。
3、 gcrcman.py 语法
$ python $GCLUSTER_BASE/server/bin/gcrcman.py [options] <-d|--path BACKUP_PATH>
可使用 gcrcman.py -h 查看具体参数信息,常用参数说明如下:
| 参数名称 | 说明 |
|---|---|
| -h,–help | 显示帮助信息 |
| -V,–version | 显示 gcrcman 的版本信息 |
| -d ,–path | 必选参数。用于设定备份数据的存放路径。该路径必须是绝对路径,路径中支持“~”的使用,在每个节点下面都要有 path 参数指定 的 路 径 , 且 该 路 径 要 求 有 写 权 限 。 不 能 将 $GCLUSTER_BASE 或 者 GBASE_BASE 或 者GCWARE_BASE 这三个目录及子目录设置为 path 的路径。 |
| -e --execute | 指定要执行的备份或恢复命令,执行完自动退出。具体命令参考表。当使用-e 这种简称参数时,建议-e 和后面的参数之间使用一个空格,提高可读性。 |
| -P --ospassword | 指定数据库管理员的操作系统用户密码。默认是 gbase 用户,不可指定,此处填写操作系统用户 gbase 的密码。 |
| -p , --dbpassword | 指定数据库管理员的数据库用户密码。备份恢复工具有些操作需要访问数据库,因此需要指定数据库用户密码。数据库用户默认是 gbase,不可指定。 |
| -r , --parallel | 用于设置备份恢复工具执行的并行度,取值范围为[1,128],默认值为 4。 |
备份恢复命令说明:backup level < 0 | 1 > 0表示全备,1表示增备
恢复命令:recover [<cycle_id> [point_id]]
备份恢复命令说明
| 参数名称 | 说明 |
|---|---|
| show backup | 显示备份信息 |
| backup level <0|1> | 集群级备份。设置备份级别,0 表示全备,1 表示增备。 |
| backup database [vcname.] |
数据库级备份。 |
| backup table [vcname.]<dbname.tablename> level <0|1> | 表级备份。 |
| recover [<cycle_id> [point_id]] | 实例级恢复。 |
| recover database [vcname.] |
数据库级恢复 |
| recover [force] table [vcname.]<dbname.tablename> [<cycle_id> [point_id]] | 表级恢复 |
| delete <cycle_id | last> | 删除备份数据 |
| cleanup | 清除无效备份数据 |
| quit | 退出 |
| help | 显示帮助信息 |
说明:
- 设置备份级别:0 表示全备,1 表示增备。
- cycle_id 表示备份周期,不写表示最新的备份周期
- point_id 指定的备份点,不写表示恢复到最新的备份点
- 执行集群级备份命令前,需要将8a集群模式设置为readonly只读才能执行备份命令;
- 执行数据库级或表级备份命令,则不需要将8a集群模式设置为readonly只读模式,备份时该数据库中的表或备份的表会锁住。
4、 两种执行模式
gcrcman.py 支持两种执行模式
- 交互式模式
适合DBA手动执行备份恢复命令,进入 gcrcman>提示符下,进行备份恢复的相关操作命令。
[gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -P gbase8a -p gbase20110531
gcrcman>help
gcrcman>backup level 0
gcrcman>quit
说明:交互式方式下如果输入了错误字符想删除,需使用 Ctrl+Backspace 清除错误字符
- 命令行模式
使用-e 参数,gcrcman 启动后,仅执行-e 指定的命令,执行完毕后自动退出。
命令行模式适合执行一条具体的备份恢复命令,常用在脚本中,或者cron定时任务命令。
[gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -e "show backup" -P gbase8a -p gbase20110531
no backup data
-e 参数:表示后面跟一个备份恢复命令
5、支持三种级别备份恢复
gcrcman.py 支持三种级别备份恢复
-
集群级备份集群数据
不分VC集群所有节点的所有数据的全备或增备,备份前需将8a集群设置为readonly只读状态,备份操作完成后,将集群设置为normal状态正常操作;使用集群级恢复操作前,需将8a集群设置为recovery恢复状态,备份操作完成后,将集群设置为normal状态正常操作;
执行命令: backup level < 0 | 1 > -
库级备份
将 GBase 8a MPP Cluster 数据库中的某个库中所有表全量/增量备份至指定路径中。
执行命令:backup database [vc_name].<database_name>level < 0 | 1 > -
表级备份
将 GBase 8a MPP Cluster 数据库中的某个表全量备份至指定路径中。
执行命令:backup table [vcname].. level < 0 | 1 >
二、使用备份恢复工具gcrcman 实操练习
1、 8a集群环境说明
使用3个节点的8a集群进行实操,3个节点集群安装的兼容模式的集群,非多VC部署。
[gbase@162 ~]$ gcadmin CLUSTER STATE: ACTIVE VIRTUAL CLUSTER MODE: NORMAL =============================================================== | GBASE COORDINATOR CLUSTER INFORMATION | =============================================================== | NodeName | IpAddress | gcware | gcluster | DataState | --------------------------------------------------------------- | coordinator1 | 172.16.9.162 | OPEN | OPEN | 0 | --------------------------------------------------------------- | coordinator2 | 172.16.9.163 | OPEN | OPEN | 0 | --------------------------------------------------------------- | coordinator3 | 172.16.9.164 | OPEN | OPEN | 0 | --------------------------------------------------------------- ========================================================================================================= | GBASE DATA CLUSTER INFORMATION | ========================================================================================================= | NodeName | IpAddress | DistributionId | gnode | syncserver | DataState | --------------------------------------------------------------------------------------------------------- | node1 | 172.16.9.162 | 1 | OPEN | OPEN | 0 | --------------------------------------------------------------------------------------------------------- | node2 | 172.16.9.163 | 1 | OPEN | OPEN | 0 | --------------------------------------------------------------------------------------------------------- | node3 | 172.16.9.164 | 1 | OPEN | OPEN | 0 | ---------------------------------------------------------------------------------------------------------
3个节点都安装 pexpect 依赖包
[root@162 yum.repos.d]# yum install pexpect
[root@163 yum.repos.d]# yum install pexpect
[root@164 yum.repos.d]# yum install pexpect
查看gcrcman的版本9.5.2.39
[gbase@162 ~]$ gcrcman.py -V
gcrcman 9.5.2.39.124109
2、 进行集群级备份恢复操作
集群级备份是对所有的节点所有对象进行备份。目前版本不能指定某个VC做备份恢复。
- 集群级备份前,新建集群级备份目录
在3个节点上创建集群级备份目录 /home/gbase/backup,gbase用户具有读写权限
[gbase@162 ~]$ mkdir -p /home/gbase/backup
[gbase@163 ~]$ mkdir -p /home/gbase/backup
[gbase@164 ~]$ mkdir -p /home/gbase/backup
- 集群级备份前,数据库切换成只读状态。
备份前需要将集群切换成只读状态,只需在任一个管理节点执行即可。
-
兼容模式(单VC)部署,设置只读状态命令:
$ gcadmin switchmode readonly -
多VC部署,要求把每个VC设置成recovery状态。例如:有两个VC1和VC2,分别设置只读状态。
$ gcadmin switchmode readonly vc vc1
$ gcadmin switchmode readonly vc vc2
[gbase@162 ~]$ gcadmin switchmode readonly
========== switch cluster mode...
switch pre mode: [NORMAL]
switch mode to [READONLY]
switch after mode: [READONLY]
查看集群状态是readonly模式
[gbase@162 ~]$ gcadmin CLUSTER STATE: ACTIVE VIRTUAL CLUSTER MODE: READONLY ...
- 集群级进行全量备份:
第一次备份必须是全量备份(backup level 0) ,有了全备之后,才可以执行增量备份,增量备份要在全量备份的基础上进行。
gcrcman.py参数说明: -d 备份目录 -P linux账户gbase密码 -p 数据库gbase用户密码
[gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -P gbase8a -p gbase20110531 gcrcman>backup level 0 09.01 02:16:16 BackUp start -------------------------------------------- 09.01 02:16:16 node (172.16.9.162) backup begin 09.01 02:16:16 node (172.16.9.163) backup begin 09.01 02:16:16 node (172.16.9.164) backup begin 09.01 02:16:49 node (172.16.9.162) backup success 09.01 02:16:49 node (172.16.9.163) backup success 09.01 02:16:49 node (172.16.9.164) backup success -------------------------------------------- 09.01 02:16:50 BackUp end gcrcman>show backup cycle point level time 0 0 0 2022-09-01 02:16:16 gcrcman>quit
第一次全备生成0备份周期 0 备份点
- 将8a集群设置为normal
[gbase@162 ~]$ gcadmin switchmode normal ========== switch cluster mode... switch pre mode: [READONLY] switch mode to [NORMAL] switch after mode: [NORMAL]
- 对8a集群数据库做一些SQL操作
[gbase@162 ~]$ gccli -uroot -p
-- 新建一个t1表,插入6条数据。
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| test |
+--------------------+
6 rows in set (Elapsed: 00:00:00.00)
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> create table t1(i int ,j varchar(20));
Query OK, 0 rows affected (Elapsed: 00:00:00.17)
gbase> insert into t1 values(1,'a'),(2,'b'),(3,'c');
Query OK, 3 rows affected (Elapsed: 00:00:00.11)
Records: 3 Duplicates: 0 Warnings: 0
gbase> insert into t1 select * from t1;
Query OK, 3 rows affected (Elapsed: 00:00:00.21)
Records: 3 Duplicates: 0 Warnings: 0
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (Elapsed: 00:00:00.04)
gbase> exit
Bye
- 执行一次增量备份操作
将集群设置为只读模式
用命令行方式执行增量备份命令(使用-e “backup level 1”参数执行)
[gbase@162 ~]$ gcadmin switchmode readonly
========== switch cluster mode...
switch pre mode: [NORMAL]
switch mode to [READONLY]
switch after mode: [READONLY]
[gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -e "backup level 1" -P gbase8a -p gbase20110531
09.01 02:30:57 check cluster topology begin
09.01 02:30:57 node (172.16.9.162) check topology begin
09.01 02:31:01 node (172.16.9.162) check topology success
09.01 02:31:01 check cluster topology end
09.01 02:31:01 BackUp start
--------------------------------------------
09.01 02:31:01 node (172.16.9.162) backup begin
09.01 02:31:01 node (172.16.9.163) backup begin
09.01 02:31:01 node (172.16.9.164) backup begin
09.01 02:31:38 node (172.16.9.162) backup success
09.01 02:31:38 node (172.16.9.163) backup success
09.01 02:31:38 node (172.16.9.164) backup success
--------------------------------------------
09.01 02:31:38 BackUp end
- 模拟误删除t1数据
将8a集群设置为normal,然后删除t1表所有数据
[gbase@162 ~]$ gcadmin switchmode normal
========== switch cluster mode...
switch pre mode: [READONLY]
switch mode to [NORMAL]
switch after mode: [NORMAL]
[gbase@162 ~]$ gccli -uroot -p
Enter password:
GBase client 9.5.2.39.126761. Copyright (c) 2004-2022, GBase. All Rights Reserved.
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t |
| t1 |
+----------------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (Elapsed: 00:00:00.05)
gbase> delete from t1;
Query OK, 6 rows affected (Elapsed: 00:00:00.12)
gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (Elapsed: 00:00:00.03)
gbase> exit
Bye
- 执行恢复前将8a集群切换到recovery状态**
数据库执行恢复命令前需将集群切换到recovery状态
-
兼容模式(单VC)部署
$ gcadmin switchmode recovery -
多VC部署,要求把每个VC设置成recovery状态。例如:有两个VC1和VC2,分别设置状态。
$ gcadmin switchmode recovery vc vc1
$ gcadmin switchmode recovery vc vc2
备注: 将全部数据恢复到备份的时间点,可能会丢失备份后操作的数据,正式环境谨慎操作!!
[gbase@162 ~]$ gcadmin switchmode recovery ========== switch cluster mode... switch pre mode: [NORMAL] switch mode to [RECOVERY] switch after mode: [RECOVERY] -- 查看8a集群状态 [gbase@162 ~]$ gcadmin CLUSTER STATE: ACTIVE VIRTUAL CLUSTER MODE: RECOVERY ...
- 执行集群级恢复命令
[gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -P gbase8a -p gbase20110531 -- 查看备份记录,2个备份,一个全备,一个增备 gcrcman>show backup cycle point level time 0 0 0 2022-09-01 02:16:16 0 1 1 2022-09-01 02:31:01 gcrcman>recover 0 1 09.01 18:06:12 check cluster topology begin 09.01 18:06:12 node (172.16.9.162) check topology begin 09.01 18:06:16 node (172.16.9.162) check topology success 09.01 18:06:16 check cluster topology end 09.01 18:06:16 check BackUp start -------------------------------------------- 09.01 18:06:16 node (172.16.9.162) check backup begin 09.01 18:06:16 node (172.16.9.163) check backup begin 09.01 18:06:16 node (172.16.9.164) check backup begin 09.01 18:06:38 node (172.16.9.162) check backup success 09.01 18:06:38 node (172.16.9.163) check backup success 09.01 18:06:38 node (172.16.9.164) check backup success -------------------------------------------- 09.01 18:06:38 check BackUp success 09.01 18:06:38 Recover start -------------------------------------------- 09.01 18:06:39 node (172.16.9.162) Recover begin 09.01 18:06:39 node (172.16.9.163) Recover begin 09.01 18:06:39 node (172.16.9.164) Recover begin 09.01 18:07:19 node (172.16.9.162) Recover success 09.01 18:07:19 node (172.16.9.163) Recover success 09.01 18:07:19 node (172.16.9.164) Recover success -------------------------------------------- 09.01 18:07:20 Recover success gcrcman>quit [gbase@162 ~]$
- 8a集群切换为normal状态
恢复操作完成后,将8a集群切换到normal状态
[gbase@162 ~]$ gcadmin switchmode normal ========== switch cluster mode... switch pre mode: [RECOVERY] switch mode to [NORMAL] switch after mode: [NORMAL]
然后查看test.t1表,发现t1表数据恢复了。
[gbase@162 ~]$ gccli -uroot -p -D test
Enter password:
GBase client 9.5.2.39.126761. Copyright (c) 2004-2022, GBase. All Rights Reserved.
gbase> select * from t1;
+------+------+
| i | j |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 1 | a |
| 2 | b |
| 3 | c |
+------+------+
6 rows in set (Elapsed: 00:00:00.07)
以上是完整的8a集群级备份恢复实操过程。
3、 进行库级备份恢复操作
集群级备份是对8a集群整体做备份,不能指定某个VC做备份恢复,备份时需要将8a集群设置为只读状态,如果数据量巨大,则备份时间很长,会影响数据库其他操作。对于大数据量的8a集群,为了减少备份时长对整个系统的影响,也为了减少备份空间,有些用户会选择只备份一个数据库或个别重要的表进行备份,而非所有数据全部备份。
下面以单库备份恢复为例,说明整个库级备份恢复操作过程。
库级备份目录要跟集群级备份目录不同,各节点重新创建库级备份目录,库级备份不要求集群状态必须为readonly只读状态。
库级恢复前要求恢复库名不存在才能执行恢复操作,恢复后不能直接查询库中的表数据,可重启8a服务或者refresh刷新库中的表才能查询表数据。
- 数据库级备份前,在集群节点上创建新的表备份目录
[gbase@162 ~]$ mkdir /home/gbase/db-back [gbase@163 ~]$ mkdir /home/gbase/db-back [gbase@164 ~]$ mkdir /home/gbase/db-back
- 查询数据库信息
[gbase@162 ~]$ gccli -uroot -p
Enter password:
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| test |
+--------------------+
6 rows in set (Elapsed: 00:00:00.00)
gbase> exit
Bye
[gbase@162 ~]$
- 对test数据库做全量备份
[gbase@162 ~]$ gcrcman.py -d /home/gbase/db-back -P gbase8a -p gbase20110531
gcrcman>backup database test level 0
09.01 23:33:38 BackUp database test start
--------------------------------------------
09.01 23:33:39 node (172.16.9.162) backup database begin
09.01 23:33:39 node (172.16.9.163) backup database begin
09.01 23:33:39 node (172.16.9.164) backup database begin
09.01 23:34:10 node (172.16.9.162) backup database success
09.01 23:34:10 node (172.16.9.163) backup database success
09.01 23:34:10 node (172.16.9.164) backup database success
--------------------------------------------
09.01 23:34:10 BackUp database test end
gcrcman>show backup
cycle point level time
0 0 0 2022-09-01 23:33:39
gcrcman>quit
[gbase@162 ~]$
- 模拟在test1库中新创建表t2
[gbase@162 ~]$ gccli -uroot -p
Enter password:
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> create table t2(a int,b varchar(20));
Query OK, 0 rows affected (Elapsed: 00:00:00.15)
gbase> insert into t2 select * from t1;
Query OK, 6 rows affected (Elapsed: 00:00:00.16)
Records: 6 Duplicates: 0 Warnings: 0
gbase> select count(*) from t2;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (Elapsed: 00:00:00.03)
gbase> exit
Bye
- 对test库做增量备份
[gbase@162 ~]$ gcrcman.py -d /home/gbase/db-back -P gbase8a -p gbase20110531
gcrcman>backup database test level 1
09.01 23:43:19 BackUp database test start
--------------------------------------------
09.01 23:43:20 node (172.16.9.162) backup database begin
09.01 23:43:20 node (172.16.9.163) backup database begin
09.01 23:43:20 node (172.16.9.164) backup database begin
09.01 23:43:52 node (172.16.9.162) backup database success
09.01 23:43:52 node (172.16.9.163) backup database success
09.01 23:43:52 node (172.16.9.164) backup database success
--------------------------------------------
09.01 23:43:52 BackUp database test end
gcrcman>show backup
cycle point level time
0 0 0 2022-09-01 23:33:39
0 1 1 2022-09-01 23:43:19
gcrcman>quit
- 执行库恢复
恢复库不需要将集群设置成recovery状态
恢复时如果数据库存在,会报错,需要drop删除数据库后才能执行恢复操作,生产系统要慎重操作!!
[gbase@162 ~]$ gcrcman.py -d /home/gbase/db-back -P gbase8a -p gbase20110531
gcrcman>recover database test 0 1
database test exist, please drop database at first
gcrcman>quit
查看数据,drop删除数据库test
[gbase@162 ~]$ gccli -uroot -p
Enter password:
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> drop database test;
Query OK, 3 rows affected (Elapsed: 00:00:00.10)
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
+--------------------+
5 rows in set (Elapsed: 00:00:00.00)
gbase> exit
Bye
[gbase@162 ~]$
- 然后再执行恢复单库操作
[gbase@162 ~]$ gcrcman.py -d /home/gbase/db-back -P gbase8a -p gbase20110531
gcrcman>recover database test 0 1
09.01 23:56:43 check database BackUp start
--------------------------------------------
09.01 23:56:43 node (172.16.9.162) check database backup begin
09.01 23:56:43 node (172.16.9.163) check database backup begin
09.01 23:56:43 node (172.16.9.164) check database backup begin
09.01 23:57:05 node (172.16.9.162) check database backup success
09.01 23:57:05 node (172.16.9.163) check database backup success
09.01 23:57:05 node (172.16.9.164) check database backup success
--------------------------------------------
09.01 23:57:05 check database BackUp success
09.01 23:57:05 recover prepare start
--------------------------------------------
09.01 23:57:05 node (172.16.9.162) recover prepare begin
09.01 23:57:06 node (172.16.9.163) recover prepare begin
09.01 23:57:06 node (172.16.9.164) recover prepare begin
09.01 23:57:14 node (172.16.9.162) recover prepare success
09.01 23:57:14 node (172.16.9.163) recover prepare success
09.01 23:57:14 node (172.16.9.164) recover prepare success
--------------------------------------------
09.01 23:57:14 recover prepare finish
09.01 23:57:14 recreate database test start
09.01 23:57:14 recreate database test end
09.01 23:57:14 recreate tablespace start
09.01 23:57:14 recreate tablespace end
09.01 23:57:14 recreate database test tables start
09.01 23:57:14 node (172.16.9.162) recreate database tables begin
09.01 23:57:19 node (172.16.9.162) recreate database tables success
09.01 23:57:19 recreate database test tables end
09.01 23:57:19 Recover database test start
--------------------------------------------
09.01 23:57:19 node (172.16.9.162) Recover database begin
09.01 23:57:19 node (172.16.9.163) Recover database begin
09.01 23:57:19 node (172.16.9.164) Recover database begin
09.01 23:57:40 node (172.16.9.162) Recover database success
09.01 23:57:40 node (172.16.9.163) Recover database success
09.01 23:57:40 node (172.16.9.164) Recover database success
--------------------------------------------
09.01 23:57:40 Recover database test success, please refresh it!
gcrcman>quit
[gbase@162 ~]$
- 恢复操作完成后,查询库和库里的表
查询test数据库,发现里面表为空表没数据,可以使用refresh tables; 刷新库里的表。
[gbase@162 ~]$ gccli -uroot -p
Enter password:
GBase client 9.5.2.39.126761. Copyright (c) 2004-2022, GBase. All Rights Reserved.
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> select * from t1;
Empty set (Elapsed: 00:00:00.05)
gbase> select * from t2;
Empty set (Elapsed: 00:00:00.03)
gbase> refresh tables;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> select * from t1;
+------+------+
| i | j |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 1 | a |
| 2 | b |
| 3 | c |
+------+------+
6 rows in set (Elapsed: 00:00:00.04)
gbase> select count(*) from t2;
+------+------+
| a | b |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 1 | a |
| 2 | b |
| 3 | c |
+------+------+
6 rows in set (Elapsed: 00:00:00.04)
gbase> exit
Bye
当然也可以每个节点重启一下8a服务,这样库的表数据也可以被刷新。
[gbase@162 ~]$ gcluster_services all restart [gbase@163 ~]$ gcluster_services all restart [gbase@164 ~]$ gcluster_services all restart
以上就是数据库备份的所有操作。
对于表级的备份恢复操作,跟库级的类似,不再单独说明。




