[[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)
由上,可以看見兩張表都存在,并且表里都有我們插入的數據,增量備份恢復成功。




