[[toc]]
1.实验环境
主机名 | IP | 数据库版本 | 操作系统 |
---|---|---|---|
Amogdb | 192.168.213.40 | MogDB V3.0.1 | CentOS 7 x86_64 |
2. gs_probackup工具介绍
gs_probackup是一个用于管理MogDB数据库备份和恢复的工具。它可以对MogDB实例进行定期备份,以便在数据库出现故障时能够恢复服务器。其适用于数据量大的场景,主要用于全量数据备份恢复,也可对整个数据库中的WAL归档日志和运行日志进行备份。属于物理备份。其优点是恢复时可以直接恢复到某个备份点,在备份上的库上启动数据库,恢复速度快。
- 使用前提:
1> 可以正常连接MogDB数据库
2> 如果要使用PTRACK增量备份,需在postgresql.conf中手动添加参数“enable_cbm_tracking = on”。
3. 准备工作
3.1 设置参数
由于本实验会进行增量备份,所以需要将enable_cbm_tracking设置为on。
- enable_cbm_tracking
gs_guc reload -N all -I all -c "enable_cbm_tracking=on"
回显如下:
[omm@amogdb datal$ gs_guc reload -N all -I all -c "enable_cbm_tracking-on"
The gs_guc run with the folloving ar guments : [gs_guc -N all -I all -c enable_cbm_tracking=on reload ].
NOTICE: Turn on cbm tracking function.
Begin to perform the total nodes: 2.
Popen countis 2,Popen success count is 2, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
command count is command success count is 2, command failure count is 0.
Total instances: 2. Failed instances: 0.
ALL: Success to perform gs_guc!
3.2 停掉mogha服务(单机部署不需要考虑)
在执行数据还原时,需要停库操作。但是在一主多备的环境下,如果安装了mogha工具,在主库停止的时候,它会主动拉起主库,导致停库操作不能继续进行。所以在进行恢复之前需要关闭mogha服务。
4. 全量备份
4.1 初始化备份目录
[omm@Amogdb data]$ gs_probackup inti -B /data/mogdb/data/bak_20220815
INFO: Backup catalog 'data/mogdb/data/bak_20220815' successfully inited
gs_probackup init -B backup-path [–help]
初始化备份路径backup-path中的备份目录,该目录将存储已备份的内容。如果备份路径backup-path已存在,则backup-path必须为空目录。
4.2 添加备份实例
[omm@Amogdb data]$ gs_probackup add-instance --instance test1 -B /data/mogdb/data/bak_20220815 -D /data/mogdb/data/dn/
INFO: Instance 'test1' successfully inited
在备份路径backup-path内初始化一个新的备份实例,并生成pg_probackup.conf配置文件,该文件保存了指定数据目录pgdata-path的gs_probackup设置。
相反的,如果想要删除某备份实例,命令如下:
gs_probackup del-instance -B backup-path --instance=instance_name
4.3 将相关设置添加到pg_probackup.conf配置文件中
[omm@Amogdb data]$ gs_proback set-config --instance=test1 -B /data/mogdb/data/bak_20220815 -d postgres -p15400
将指定的连接、压缩、日志等相关设置添加到pg_probackup.conf配置文件中,或修改已设置的值。不推荐手动编辑pg_probackup.conf配置文件。
4.4 连接数据库,创建测试表
MogDB=# create table test_3 (id int);
CREATE TABLE
MogDB=# Insert into test_3 values (1);
INSERT 0 1
MogDB=# Insert into test_3 values (2);
INSERT 0 1
MogDB=# select * from test_3;
id
---
1
2
(2 rows)
4.5 执行全量备份
[omm@Amogdb data]$ gs_probackup backup -B /data/mogdb/data/bak_20220815 --instance test1 -b full
-b backup-mode, --backup-mode=backup-mode
指定备份模式,支持FULL和PTRACK。
FULL:创建全量备份,全量备份包含所有数据文件。
PTRACK:创建PTRACK增量备份。
部分回显如下:
INFO:Backup start,gs_probackup version:2.4.2,instance:test1,backup ID: RGNOMW,backup mode: FULL, wal mode:STREAM,remote:false,compress-algorithm:none,compress-level:1
LOG: Backup destination is initialized
LOG: This openGauss instance was initialized with data block checksums. Data block corruption will be detected
LOG: Database backup start
LOG: started streaming WAL at 0/D3000000 (timeline 1)
[2022-08-15 11:35:21]:check identify system success
[2022-08-15 11:35:21]:send START_REPLICATION 0/D3000000 success
[2022-08-15 11:35:21]: keepalive message is received
INFO: Cannot parse path "base"
[2022-08-15 11:35:21]: keepalive message is received
INFO: PDATA size: 769MB
INFO: Start transferring data files
LOG: Creating page header map "/data/mogdb/data/bak_20220815/backups/testl/RGNOMw/page_header_map"
INFO: Data files are transferred, time elapsed: 15
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
LOG: pg_stop Lsn: 0/D30001E8
LOG: Looking for LSN 0/D300018 in segment: 0000000100000000000000D3
Log: Found WAL segment: /data/mogdb/data/bak_20220815/backups/test1/RCNOMW/database/px_log/0000000100000000000000D3
......
INFO: Backup files are synced, time elapsed: 25 х000000 INFO: Validating backup RGNOMW
INFO: Backup RGNOMw data files are valid
INFO:Backup RGNOMW resident size:801MB
INFO: Backup RGNOMW completed
5. 增量备份
5.1 创建新表,插入数据
在4.5执行权量备份后,接着做下一步:
[omm@amogdb data]$ gsql -d postgres -p15400
gsql ((MogDB 3.0.1 build 1a363a9) compiled at 2022-08-05 18:01:26 commit 0 last mr
Non-55L connection (SSL connection is recommended when requiring high-security)
туре"help" for help.
MogDB=# create table test_4 (id int);
CREATE TABLE
MogDB=# Insert into test_4 values (1);
INSERT 0 1
MogDB=# Insert into test_4 values C2);
INSERT 0 1
MogDB# Select * from test_4;
id
---
1
2
(2 rows)
5.2 执行增量备份
执行以下命令创建增量备份
[omm@Amogdb data]$ gs_probakup backup -B /data/mogdb/data/bak_20220815/ --instance test1 -b PTRACK
若回显如下:
......
INFO: Backup xxxxxx datafiles are valid
INFO: Backup xxxxxx resident size: xxxMB
INFO: Backup xxxxxx complete
表示创建增量备份成功
6. 恢复
6.1 停掉当前数据库(集群)
gs_om -t stop
stopping cluster.
============================================
Successfully stopped cluster
============================================
End stop cluster
6.2 查看当前所有备份
使用pg_probackup show命令
gs_probackup show -B /data/mogdb/data/bak_20220815
BACKUP INSTANCE 'test1'
================================================================================================================================================
INSTANCE Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status
================================================================================================================================================
test1 9.2 RGN0Q9 2022-08-15 11:37:21+08 PTRACK STREAM 1/1 5s 310MB 16MB 1.00 0/D5000028 0/D50001E8 OK
test1 9.2 RGN0MW 2022-08-15 11:35:22+08 FULL STREAM 1/0 8s 785MB 16MB 0.98 0/D3000028 0/D30001E8 OK
6.3 恢复全量备份
#创建新的全量还原目录
[omm@Amogdb data]$ mkdir testful
[omm@Amogdb data]$ gs_probackup restore -B /data/mogdb/data/bak_20220815/ --instance test1 -D /data/mogdb/data/dn -i RGNOMW
......
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapased:2s
INFO: Restore of backup RGN0MW completed
6.4 验证全量备份的恢复
- 启动数据库
gs_ctl start -D /data/mogdb/data/testful
- 查看数据库数据
[omm@Amogdb data]$ gsql -d postgres -p15400
MogDB=# \d
List of relations
Schema | Name | Type | owner | storage
--------+--------+--------+---------+--------------------------------------------
public | test_3 | table | omm | {orientation=row,compression=no,storage_type=USTORE}
(1 rows)
MogDB=# select * from test_3;
id
----
1
2
(2 rows)
在这之前,我们是在创建表test_4之前完成全量备份的,所以理论上恢复这个全量备份是看不见test_4表的,但是能看到test_3表以及其中的数据。实践证明确实如此。
6.5 恢复增量备份
- 停库操作
gs_om -t stop
stopping cluster.
============================================
Successfully stopped cluster
============================================
End stop cluster
- 查看当前增量备份
gs_probackup show -B /data/mogdb/data/bak_20220815
BACKUP INSTANCE 'test1'
================================================================================================================================================
INSTANCE Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status
================================================================================================================================================
test1 9.2 RGN0Q9 2022-08-15 11:37:21+08 PTRACK STREAM 1/1 5s 310MB 16MB 1.00 0/D5000028 0/D50001E8 OK
test1 9.2 RGN0MW 2022-08-15 11:35:22+08 FULL STREAM 1/0 8s 785MB 16MB 0.98 0/D3000028 0/D30001E8 OK
ID RGN0Q9即为增量备份。
- 创建新的增量恢复目录
mkdir /data/mogdb/data/testapen
- 恢复
[omm@Amogdb data]$ gs_probackup restore -B /data/mogdb/data/bak_20220815/ --instance test1 -D /data/mogdb/data/testapen -i RGN0Q9
......
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapased:3s
INFO: Restore of backup RGN0Q9 completed
6.6 验证增量备份的恢复
- 启动数据库
gs_ctl start -D /data/mogdb/data/testapen
- 查看数据库数据
[omm@Amogdb data]$ gsql -d postgres -p15400
MogDB=# \d
List of relations
Schema | Name | Type | owner | storage
--------+--------+--------+---------+--------------------------------------------
public | test_3 | table | omm | {orientation=row,compression=no,storage_type=USTORE}
public | test_4 | table | omm | {orientation=row,compression=no,storage_type=USTORE}
(1 rows)
MogDB=# select * from test_3;
id
----
1
2
(2 rows)
MogDB=# select * from test_4;
id
----
1
2
(2 rows)
由上,可以看见两张表都存在,并且表里都有我们插入的数据,增量备份恢复成功。