PGsql通过归档恢复到指定位置实验

AI 摘要 / TL;DR

PGsql通过归档恢复到指定位置实验 点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!! 1 当前环境: 2 归档配置 因为本次实验需要通过归档来恢复数据,所以需要开启pgsql的归档模式。重启生效。 修改postgresql.conf参数文件: 3 前期准备 1)测试数据准备 2)备份

来源: https://www.ucloud.cn/yun/129500.html 作者: IT那活儿 发布日期: 发布于2023-01-11 13:19

PGsql通过归档恢复到指定位置实验

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

1

当前环境:

2

归档配置

因为本次实验需要通过归档来恢复数据,所以需要开启pgsql的归档模式。重启生效。

--修改postgresql.conf参数文件:

vim postgresql.confarchive_mode = onarchive_command = test ! -f /pgdata/archive/%f && cp %p /pgdata/archive/%f

3

前期准备

1)测试数据准备

2)备份数据

---执行备份:

pg_basebackup -D /pgdata/pg_backup -Ft -Pv -Upostgres -h 192.168.168.123 -p 1921

3)备份后继续创建测试数据

test=# create table test3 (id int);CREATE TABLEtest=# insert into test3 values(123);INSERT 0 1test=# insert into test3 values(125);

4)切换归档日志

postgres=# select pg_switch_wal();pg_switch_wal---------------0/9012CB0(1 row)

4

故障模拟

1)模拟误操作删除database

test=# c postgresYou are now connected to database "postgres" as user "postgres".postgres=# drop database test;DROP DATABASE

2)关闭pgsql

--关闭:

pg_ctl stop

3)删除数据

--删除:

rm -rf /pgdata/12/data/*‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

5

恢复到drop前的状态

1)恢复数据

--恢复数据文件:

tar xf base.tar -C /pgdata/12/data/

--恢复归档:

tar xf pg_wal.tar -C /pgdata/archive/

**注:**本次实验虽然删除了数据文件,但归档仍保留;所以在这一步中,恢复归档作用不大,因为后续需要用的归档是完全备份后生成的归档,而不是备份文件中的归档文件。

2)查看归档

--查看最近的归档文件中内容:

pg_waldump 000000040000000000000009

3)选择xid

通过查看最近的归档可以看到,tx为499的记录中有drop操作记录。而当前需要恢复到drop操作之前的位置。

所以选择tx为498的位置。

4)修改postgresql.auto.conf文件

--添加恢复参照:

restore_command = cp /pgdata/archive/%f %precovery_target_xid=498

注:这里的参数设置中需要注释recovery_target = immediate;否则使用后会将误删除操作一并恢复。

5)恢复

---进入恢复模式:

touch /pgdata/12/data/recovery.signalpg_ctl start

6)验证drop的database是否恢复

---关闭恢复模式:

select pg_wal_replay_resume();

至此,pgsql通过归档恢复到指定位置完成。

END

本文作者:胡晓明

本文来源:IT那活儿(上海新炬王翦团队)