1. 程式人生 > 其它 >KingbaseES V8R6備份恢復案例之---sys_waldump解析wal日誌PITR恢復

KingbaseES V8R6備份恢復案例之---sys_waldump解析wal日誌PITR恢復


案例說明:
復現使用者刪除表(drop table)誤操作,通過wal日誌解析找到誤操作時間點,執行基於時間點的恢復(PITR)。
適用版本:
KingbaseES V8R6

一、模擬業務現場操作

1、檢視當前物件資訊

prod=# \d
               List of relations
 Schema |        Name         | Type  | Owner
--------+---------------------+-------+--------
 public | dual                | view  | system
 public | sys_stat_statements | view  | system
 public | t_centerprises      | table | system
 public | t1                  | table | system
 public | TB1                 | table | system
 public | tb2                 | table | system
 public | tbl_test            | table | system
(7 rows)

2、執行事務操作

prod=# select count(*) from t1;
 count
-------
 10000
(1 row)

prod=# insert into t1 values(generate_series(1001,2000),'usr'||generate_series(1001,2000));
INSERT 0 1000
prod=# select count(*) from t1;
 count
-------
 11000
(1 row)

# 當前wal對應lsn
prod=# select sys_current_wal_lsn();
 sys_current_wal_lsn
---------------------
 0/3D000058
(1 row)

prod=# insert into t1 values(generate_series(11001,20000),'usr'||generate_series(11001,20000));
INSERT 0 9000

prod=# select count(*) from t1;
 count
-------
 20000
(1 row)

# 檢視資料庫當前wal日誌檔案
prod=# select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
 pg_current_wal_lsn |     pg_walfile_name      |      pg_walfile_name_offset
--------------------+--------------------------+-----------------------------------
 0/3D0A5090         | 00000001000000000000003D | (00000001000000000000003D,675984)
(1 row)

# 使用者誤刪除表
prod=# drop table t1;
DROP TABLE

二、檢視當前資料庫的物理備份

如下圖所示:以下是使用者誤操作時間點之前的物理備份。

三、sys_waldump解析wal日誌(檢視誤操作準確時間點)
Tips:
對於使用者的誤操作,要執行PITR的恢復,需要找到誤操作的準確時間點,在生產環境中,可以根據誤操作大概的時間點,對時間點前後的歸檔及線上日誌進行解析,本案例為了簡化操作,只解析了一個wal日誌。
[kingbase@node102 sys_wal]$ /opt/Kingbase/ES/V8R6_C6/Server/bin/sys_waldump 00000001000000000000003D -s '0/3D000058'

1、Insert操作日誌解析

prod=#  select oid,relname from sys_class where oid=16500;
  oid  | relname
-------+---------
 16500 | t1
(1 row)

2、更新pg_statistic系統表日誌

prod=#  select oid,relname from sys_class where oid=2696 or oid=2619;
 oid  |             relname
------+----------------------------------
 2619 | pg_statistic
 2696 | pg_statistic_relid_att_inh_index
(2 rows)

3、drop table日誌解析

# drop table 將清理系統表中物件的資訊
prod=#  select oid,relname from sys_class where oid=2608;
 oid  |  relname
------+-----------
 2608 | pg_depend
(1 row)

=如上圖所示,從wal日誌中可以解析到‘drop table’事務commit的時間點,“COMMIT 2022-09-27 11:09:45.005736 CST”,可以以此時間點作為PITR恢復的時間點,來恢復使用者誤刪除的表。=

四、執行基於時間點(PITR)恢復

Tips:
對於生產環境可以異地恢復,在另外的例項執行PITR的恢復,將恢復出的資料,再匯入到生產例項中。本案例是從本例項恢復,需要將資料庫服務關閉。

1、關閉資料庫服務並備份資料庫檔案

[kingbase@node102 bin]$ ./sys_ctl stop -D /data/kingbase/v8r6_c6/data
[kingbase@node102 v8r6_c6]$ mv data data.bk

2、執行PIRT恢復

[kingbase@node102 bin]$ /opt/Kingbase/ES/V8R6_C6/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=king  --type=time --target='2022-09-27 11:09:45'  restore

.......
2022-09-27 13:34:05.234 P00   INFO: Restore Process: FILE: 2605 / 2605 100%       SZIE: 105160230 bytes / 105160230 bytes 100.3MB / 100.3MB 100%
2022-09-27 13:34:05.239 P00   INFO: write updated /data/kingbase/v8r6_c6/data/kingbase.auto.conf
2022-09-27 13:34:05.244 P00   INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)
2022-09-27 13:34:05.245 P00   INFO: restore size = 100.3MB, file total = 2605
2022-09-27 13:34:05.246 P00   INFO: restore command end: completed successfully (2308ms)

3、檢視恢復後的資料
1)檢視kingbase.auto.conf配置

[kingbase@node102 data]$ cat kingbase.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

# Recovery settings generated by sys_rman restore on 2022-09-27 13:39:58
restore_command = '/opt/Kingbase/ES/V8R6_C6/KESRealPro/V008R006C006B0013/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=king archive-get %f "%p"'
recovery_target_time = '2022-09-27 11:09:45'

2)啟動資料庫服務
[kingbase@node102 bin]$ ./sys_ctl start -D /data/kingbase/v8r6_c6/data

3)檢視sys_log日誌

4)檢視恢復後的資料

5)清理kingbase.auto.conf檔案後重啟資料庫

[kingbase@node102 bin]$ ./sys_ctl restart -D /data/kingbase/v8r6_c6/data

四、總結
對於歸檔模式的資料庫在資料庫備份及wal日誌(歸檔和線上)儲存完整的情況下,可以通過基於時間點的恢復操作,恢復使用者的誤操作丟失的資料。對於使用者誤操作的時間點,可以藉助wal日誌的解析獲取到準確的事務操作的時間點。