GBase8a 集群管理 gcadmin
备份与恢复演练
备份恢复
集群级备份是对 8a 集群整体做备份,不能指定某个 VC 做备份恢复,备份时需要将 8a 集群设置为只读状态,如果数据量巨大,则备份时间很长,会影响数据库其他操作。对于大数据量的 8a 集群,为了减少备份时长对整个系统的影响,也为了减少备份空间,有些用户会选择只备份一个数据库或个别重要的表进行备份,而非所有数据全部备份。
支持集群级、库级、表级的备份恢复
下面以单库备份恢复为例,说明整个库级备份恢复操作过程。
库级备份目录要跟集群级备份目录不同,各节点重新创建库级备份目录,库级备份不要求集群状态必须为 readonly 只读状态。
库级恢复前要求恢复库名不存在才能执行恢复操作,恢复后不能直接查询库中的表数据,可重启 8a 服务或者 refresh 刷新库中的表才能查询表数据。
- 前期准备
备份数据库配置文件,主要为数据库集群,每个节点gcluster配置文件、gnode配置文件、show variables结果;
各个节点新建备份目录(实例级、库级、表级) mkdir -p /home/gbase/back mkdir -p /home/gbase/back_db/ mkdir -p /home/gbase/back_tb/ # gcadmin switchmode readonly # python $GCLUSTER_HOME/bin/gcrcman.py -p'gbase20110531' -d /home/gbase/back/ gbase> backup level 0 gbase> show backup gbase> quit # gcadmin switchmode normal --创建库db1,然后在db1下创建表t1并且插入数据 # gccli -vvv -e"create database db1;" # gccli -vvv -e"create table db1.t1(ID int, name varchar(10));" # gccli -vvv -e"insert into db1.t1 values (1,'zhang'),(2,'wang');" # gccli -vvv -e"select * from db1.t1;" |
- 集群级备份恢复
集群级备份是对所有的节点所有对象进行备份。
集群级备份前,新建集群级备份目录在各个节点上创建集群级备份目录 /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 |
2. 集群级备份前,数据库切换成只读状态。 备份前需要将集群切换成只读状态,只需在任一个管理节点执行即可。
$ gcadmin switchmode readonly switch pre mode: [NORMAL] switch after mode: [READONLY] 查看集群状态是 readonly 模式 [gbase@162 ~]$ gcadmin VIRTUAL CLUSTER MODE: READONLY ... |
3. 集群级进行全量备份:
第一次备份必须是全量备份(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 第一次全备生成 0 备份周期 0 备份点 |
4. 将8a集群设置为normal
[gbase@162 ~]$ gcadmin switchmode normal ========== switch cluster mode... switch pre mode: [READONLY] switch mode to [NORMAL] switch after mode: [NORMAL] |
5. 对8a集群数据库做一些SQL操作
[gbase@162 ~]$ gccli -uroot -p 新建一个 t1 表,插入 6 条数据。 gbase> show databases; +----------------------------+ +----------------------------+ | information_schema | +-----------------------------+ gbase> use test; 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; gbase> select count(*) from t1; +-----------+ |6 | gbase> exit Bye |
6. 执行一次增量备份操作
将集群设置为只读模式 用命令行方式执行增量备份命令(使用-e “backup level 1”参数执行)
[gbase@162 ~]$ gcadmin switchmode readonly "backup level 1" -P gbase8a -p begin success ========== switch cluster mode... switch pre mode: [NORMAL] switch mode to [READONLY] switch after mode: [READONLY] [gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -e gbase20110531 09.01 02:31:01 node (172.16.9.162) check topology 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.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 -------------------------------------------- |
7. 模拟误删除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; gbase> show tables; +-------------------+ +-------------------+ | t | +--------------------+ gbase> select count(*) from t1; +-----------+ | 6 | gbase> delete from t1; gbase> select count(*) from t1; +------------+ | 0 | gbase> exit |
8. 执行恢复前将8a集群切换到recovery状态**
数据库执行恢复命令前需将集群切换到 recovery 状态
$ gcadmin switchmode recovery
备注: 将全部数据恢复到备份的时间点,可能会丢失备份后操作的数据,正式环境谨慎操作!!
[gbase@162 ~]$ gcadmin switchmode recovery ========== switch cluster mode... switch pre mode: [NORMAL] -- 查看 8a 集群状态 VIRTUAL CLUSTER MODE: RECOVERY ... |
9. 执行集群级恢复命令
[gbase@162 ~]$ gcrcman.py -d /home/gbase/backup/ -P gbase8a -p gbase20110531 -- 查看备份记录,2 个备份,一个全备,一个增备 09.01 18:06:12 check cluster topology 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: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 ~]$ |
10. 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 集群级备份恢复实操过程。
- 库级备份恢复
集群级备份是对 8a 集群整体做备份,备份时需要将 8a 集群设置为只读状态,如果数据量巨大,则备份时间很长,会影响数据库其他操作。对于大数据量的 8a 集群,为 了减少备份时长对整个系统的影响,也为了减少备份空间,有些用户会选择只备份一个数据库或个别 重要的表进行备份,而非所有数据全部备份。
下面以单库备份恢复为例,说明整个库级备份恢复操作过程。 库级备份目录要跟集群级备份目录不同,各节点重新创建库级备份目录,库级备份不要求集群状态必 须为 readonly 只读状态。
库级恢复前要求恢复库名不存在才能执行恢复操作,恢复后不能直接查询库中的表数据,可重启 8a 服务或者 refresh 刷新库中的表才能查询表数据。
数据库级备份前,在集群节点上创建新的表备份目录
[gbase@162 ~]$ mkdir /home/gbase/db-back |
查询数据库信息
[gbase@162 ~]$ gccli -uroot -p Enter password: gbase> show databases; +---------------------------+ +---------------------------+ +-----------------------------+ 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: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 gcrcman>quit [gbase@162 ~]$ |
模拟在test1库中新创建表t2
[gbase@162 ~]$ gccli -uroot -p 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; Records: 6 Duplicates: 0 Warnings: 0 gbase> select count(*) from t2; +----------+ |6| 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:52 node (172.16.9.163) backup database success 09.01 23:43:52 node (172.16.9.164) backup database success -------------------------------------------- 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 查看数据,drop 删除数据库 test [gbase@162 ~]$ gccli -uroot -p Enter password: gbase> use test; gbase> drop database test; gbase> show databases; +-----------------------------+ +-----------------------------+ +-----------------------------+ 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:57:05 node (172.16.9.164) check database backup success -------------------------------------------- -------------------------------------------- 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 -------------------------------------------- -------------------------------------------- gcrcman>quit [gbase@162 ~]$ |
恢复操作完成后,查询库和库里的表
查询 test 数据库,发现里面表为空表没数据,可以使用 refresh tables; 刷新库里的表。
[gbase@162 ~]$ gccli -uroot -p GBase client 9.5.2.39.126761. Copyright (c) 2004-2022, GBase. All Rights Reserved. gbase> use test; gbase> select * from t1; gbase> select * from t2; 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; +-----+----+ | 1| a| gbase> exit Bye |
当然也可以每个节点重启一下 8a 服务,这样库的表数据也可以被刷新。
[gbase@162 ~]$ gcluster_services all restart [gbase@163 ~]$ gcluster_services all restart [gbase@164 ~]$ gcluster_services all restart |
以上就是数据库备份的所有操作。
- 表级备份恢复
下面以单表备份恢复为例,说明整个表级备份恢复操作过程。 各节点重新创建表级备份目录备份目录,表级备份不要求集群状态必须为 readonly 只读状态。
数据库级备份前,在集群节点上创建新的表备份目录
[gbase@162 ~]$ mkdir /home/gbase/t1-back |
查询t1表数据信息
[gbase@162 ~]$ gccli -uroot -p Enter password: gbase> use test; gbase> select count(*) from t1; +----------+ | 6| gbase> exit Bye [gbase@162 ~]$ |
对t1表做全量备份
[gbase@162 ~]$ gcrcman.py -d /home/gbase/t1-back -P gbase8a -p gbase20110531 gcrcman>backup table test.t1 level 0 -------------------------------------------- -------------------------------------------- |
模拟在误删除表数据
[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; gbase> delete from t1; gbase> select * from t1; gbase> exit Bye |
执行表恢复
恢复表不需要将集群设置成 recovery 状态,恢复时需要将恢复的表 drop 后,才能正常恢复单表,否则报错。生产系统要慎重操作!!
[gbase@162 ~]$ gcrcman.py -d /home/gbase/t1-back -P gbase8a -p gbase20110531 gcrcman>show backup 查看数据,drop 表 t1 [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; gbase> drop table t1; gbase> exit Bye |
然后再执行恢复单表操作
[gbase@162 ~]$ gcrcman.py -d /home/gbase/t1-back gcrcman>recover table test.t1 0 0 -------------------------------------------- -------------------------------------------- -------------------------------------------- -------------------------------------------- 09.02 01:30:16 node (172.16.9.162) recreate table success 09.02 01:30:16 refresh table test.t1 end -------------------------------------------- 09.02 01:30:16 node (172.16.9.163) Recover -------------------------------------------- gcrcman>quit [gbase@162 ~]$ |
恢复操作完成后,查询库和库里的表
查询 test.t1 表,发现里面表为空表没数据,需要刷新表才能查询表数据。
刷新表语句为 refresh table 表名;
[gbase@162 ~]$ gccli -uroot -p GBase client 9.5.2.39.126761. Copyright (c) 2004-2022, GBase. All Rights Reserved. gbase> use test; gbase> show tables; +-------------------+ +-------------------+ | t | +-------------------+ gbase> select count(*) from t1; +----------+ | 0 | gbase> refresh table t1; gbase> select count(*) from t1; +----------+ | 6 | gbase> exit |
以上就是单表备份的所有操作。
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528