[[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)
复制
由上,可以看见两张表都存在,并且表里都有我们插入的数据,增量备份恢复成功。