备份数据恢复
恢复全量数据
[udb@udb-81 data]$ mkdir /data/udb
[udb@udb-81 data]$ cp /data/backup/base_2022-08-23-134814/* /data/udb
[udb@udb-81 udb]$ tar zxf tar zxf base.tar.gz -C /data/udb
[udb@udb-81 udb]$ tar zxf /data/udb/ud_wal.tar.gz -C /data/udb/ud_wal/
[root@udb-81 udb]# chown -R udb.udb /data/udb
[root@udb-81 udb]# systemctl start unvdb
[root@udb-81 udb]# ud_sql
ud_sql (2.4)
Type "help" for help.
unvdb=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+-------------+-------------+-------------------
a | unvdb | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
b | unvdb | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
此时数据已完整恢复到备份时的状态。
结合归档备份,恢复到指定时间
模拟误操作
unvdb=# create database a;
CREATE DATABASE
#创建数据库a
unvdb=# drop database a;
DROP DATABASE
#不小心删除了数据库a,下面尝试恢复它
unvdb=# select pg_switch_wal() ;
#手动触发归档,实际环境会根据wal归档规则自动处理
pg_switch_wal
---------------
0/18003B38
(1 row)
分析要恢复的时间点
gunzip < /data/backup/archive/20220823/000000070000000000000018 > /tmp/000000070000000000000018#解压归档,分析wal,定位要恢复的时间点或lsn位置
ud_waldump /tmp/000000070000000000000018
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/18000028, prev 0/170019E0, desc: RUNNING_XACTS nextXid 53112 latestCompletedXid 53111 oldestRunningXid 53112
rmgr: XLOG len (rec/tot): 49/ 6057, tx: 0, lsn: 0/18000060, prev 0/18000028, desc: FPI_FOR_HINT , blkref #0: rel 1664/0/1262 blk 0 FPW
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/18001810, prev 0/18000060, desc: RUNNING_XACTS nextXid 53112 latestCompletedXid 53111 oldestRunningXid 53112
rmgr: XLOG len (rec/tot): 49/ 545, tx: 0, lsn: 0/18001848, prev 0/18001810, desc: FPI_FOR_HINT , blkref #0: rel 1664/0/2671 blk 1 FPW
rmgr: Heap2 len (rec/tot): 60/ 60, tx: 53112, lsn: 0/18001A70, prev 0/18001848, desc: NEW_CID rel 1664/0/1262; tid 0/25; cmin: 0, cmax: 4294967295, combo: 4294967295
rmgr: Heap len (rec/tot): 291/ 291, tx: 53112, lsn: 0/18001AB0, prev 0/18001A70, desc: INSERT off 25 flags 0x00, blkref #0: rel 1664/0/1262 blk 0
rmgr: Btree len (rec/tot): 64/ 64, tx: 53112, lsn: 0/18001BD8, prev 0/18001AB0, desc: INSERT_LEAF off 2, blkref #0: rel 1664/0/2671 blk 1
rmgr: Btree len (rec/tot): 53/ 553, tx: 53112, lsn: 0/18001C18, prev 0/18001BD8, desc: INSERT_LEAF off 23, blkref #0: rel 1664/0/2672 blk 1 FPW
rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/18001E48, prev 0/18001C18, desc: RUNNING_XACTS nextXid 53113 latestCompletedXid 53111 oldestRunningXid 53112; 1 xacts: 53112
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/18001E80, prev 0/18001E48, desc: CHECKPOINT_ONLINE redo 0/18001E48; tli 7; prev tli 7; fpw true; xid 0:53113; oid 32810; multi 1; offset 0; oldest xid 727 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 53112; online
rmgr: Database len (rec/tot): 42/ 42, tx: 53112, lsn: 0/18001EF8, prev 0/18001E80, desc: CREATE copy dir 1663/1 to 1663/24619
#在这里创建了数据库
rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/18001F28, prev 0/18001EF8, desc: RUNNING_XACTS nextXid 53113 latestCompletedXid 53111 oldestRunningXid 53112; 1 xacts: 53112
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/18001F60, prev 0/18001F28, desc: CHECKPOINT_ONLINE redo 0/18001F28; tli 7; prev tli 7; fpw true; xid 0:53113; oid 32810; multi 1; offset 0; oldest xid 727 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 53112; online
rmgr: Transaction len (rec/tot): 46/ 46, tx: 53112, lsn: 0/18001FD8, prev 0/18001F60, desc: INVALIDATION ; inval msgs: catcache 21
rmgr: Transaction len (rec/tot): 66/ 66, tx: 53112, lsn: 0/18002020, prev 0/18001FD8, desc: COMMIT 2022-08-23 14:45:41.510217 CST; inval msgs: catcache 21; sync
#commit提交
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/18002068, prev 0/18002020, desc: RUNNING_XACTS nextXid 53113 latestCompletedXid 53112 oldestRunningXid 53113
rmgr: XLOG len (rec/tot): 49/ 6325, tx: 0, lsn: 0/180020A0, prev 0/18002068, desc: FPI_FOR_HINT , blkref #0: rel 1664/0/1262 blk 0 FPW
rmgr: Heap2 len (rec/tot): 60/ 60, tx: 53113, lsn: 0/18003958, prev 0/180020A0, desc: NEW_CID rel 1664/0/1262; tid 0/25; cmin: 4294967295, cmax: 0, combo: 4294967295
rmgr: Heap len (rec/tot): 54/ 54, tx: 53113, lsn: 0/18003998, prev 0/18003958, desc: DELETE off 25 flags 0x00 KEYS_UPDATED , blkref #0: rel 1664/0/1262 blk 0
rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/180039D0, prev 0/18003998, desc: RUNNING_XACTS nextXid 53114 latestCompletedXid 53112 oldestRunningXid 53113; 1 xacts: 53113
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/18003A08, prev 0/180039D0, desc: CHECKPOINT_ONLINE redo 0/180039D0; tli 7; prev tli 7; fpw true; xid 0:53114; oid 32810; multi 1; offset 0; oldest xid 727 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 53113; online
rmgr: Database len (rec/tot): 38/ 38, tx: 53113, lsn: 0/18003A80, prev 0/18003A08, desc: DROP dir 1663/24619
#这里是删除操作
rmgr: Transaction len (rec/tot): 46/ 46, tx: 53113, lsn: 0/18003AA8, prev 0/18003A80, desc: INVALIDATION ; inval msgs: catcache 21
rmgr: Transaction len (rec/tot): 66/ 66, tx: 53113, lsn: 0/18003AD8, prev 0/18003AA8, desc: COMMIT 2022-08-23 14:45:48.894563 CST; inval msgs: catcache 21; sync
#删除提交
rmgr: XLOG len (rec/tot): 24/ 24, tx: 0, lsn: 0/18003B20, prev 0/18003AD8, desc: SWITCH
从日志得出要恢复的时间点是2022-08-23 14:45:41.510217
开始恢复到指定时间点
[root@udb-81 data]# su udb
[udb@udb-81 data]$ mkdir /data/udb
#准备空白目录
[udb@udb-81 data]$ tar zxf /data/backup/base_2022-08-23-134814/base.tar.gz -C /data/udb/
#解压全量备份
[udb@udb-81 data]$ tar zxf /data/backup/base_2022-08-23-134814/ud_wal.tar.gz -C /data/udb/ud_wal/
[udb@udb-81 data]$ cp -pa /data/backup/archive/20220823 /data/udb/archive
#复制增量归档文件
vi /data/udb/unvdbsvr.conf
restore_command = 'gunzip < /data/udb/archive/%f > %p'
recovery_target_time ='2022-08-23 14:45:41.510217'
#配置要恢复的时间点
touch /data/udb/recovery.signal
#创建恢复标志
chmod -R 0750 /data/udb
chown udb.udb -R /data/udb/
#修改文件权限
[root@udb-81 udb]# systemctl start unvdb
#启动服务
[root@udb-81 udb]# ud_sql
ud_sql (2.4)
Type "help" for help.
unvdb=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+-------------+-------------+-------------------
a | unvdb | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
#验证数据,已成功恢复想要的数据