上一节(https://blog.csdn.net/bendywu/article/details/124628719?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124628719%22%2C%22source%22%3A%22bendywu%22%7D&ctrtid=4iBKUhttps://blog.csdn.net/bendywu/article/details/124628719?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124628719%22%2C%22source%22%3A%22bendywu%22%7D&ctrtid=4iBKU)我们通过一个案例了解了如何恢复到指定时间点,本节将继续介绍另一个很有用的还原方式,即还原到指定还原点。
前提参考上一节
步骤 【开启归档模式(postgres.conf或命令行)】参考上一节
【创建基备】参考上一节
【创建还原点】语法:
select pg_create_restore_point('还原点名称');
可以在一些重要业务节点手工创建,也可以用自动任务来定期创建
5 * * * * echo `date +%F %T` psql -c "select pg_create_restore_point('`date +%Y%m%d%H%M`');" >>/var/lib/postgresql/14/archivelog/restore_pnt.log 2>&1
上述语句表示按5分钟的频率创建一个还原点,还原点命名方式yyyymmddhh24mi,如:202202011235
【数据库恢复】恢复的步骤通常遵循下列顺序(和上一节相同,只是恢复参数换了一下):
- 关闭postgresql服务:systemctl stop postgresql
- 修改恢复参数(在postgresql.conf文件中),实验下来有的参数只能通过修改文件的方式生效,命令行方式不行。
- 把源库的pg_wal目录下未归档的WAL段文件转储到归档目录
- 删除源库的数据目录(可以由PGDATA指定的),如果有表空间目录,一样要清空
- 如果是重建了数据目录和表空间目录,则要重新chmod -R 0700 $PGDATA;
- 恢复基础备份 tar -vxf <基础备份文件> -C <目标数据目录>
- 在数据目录touch recovery.signal文件
- 启动数据库,执行:select pg_wal_replay_resume();
- 验证数据
和上一节一样,我们先模拟出误 *** 作
su - postgres
psql
create table t_demo1(id int);
insert into t_demo1 values(1);
--手动切换WAL
checkpoint;
--创建基础备份
pg_basebackup -F t -z -D /var/lib/postgresql/14/archivelog/`date +%F`
insert into t_demo1 values(2);
--手动切换WAL
checkpoint;select pg_create_restore_point('202203010102');
drop table t_demo1;
我们希望恢复到还原点<202203010102>
第一步 先关闭数据库,创建归档用的目录systemctl stop postgresql
su - postgres
mkdir /var/lib/postgresql/14/archivelog
第二步 修改postgresql.conf
cd /etc/postgresql/14/main
vi postgresql.conf
设置以下参数
restore_command = 'cp /var/lib/postgresql/14/archivelog/%f "%p"'
recovery_target_name = '202203010102'
recovery_target_name='';--目标恢复点,pg_create_restore_point(name)所创建
restore_command 恢复数据库必须的参数,这里是从归档目录重放WAL段文件,%fWAL文件名,%p数据目标目录
第三步 把pg_wal未归档的WAL日志转储到归档目录cd /var/lib/postgresql/14/archivelog
cp /var/lib/postgresql/14/main/pg_wal/000000010000000000000009 000000010000000000000009
第四步 删除原数据库下的所有文件(这里删除了整个目录)
export PGDATA=/var/lib/postgresql/14/main
rm -rf $PGDATA
mkdir $PGDATA
第五步 给新的数据库授权
chmod -R 0700 $PGDATA
第六步 选择一个基础备份恢复到目标数据目录
tar -vxf /var/lib/postgresql/14/archivelog/2022-05-07/base.tar.gz -C $PGDATA
第七步 创建recovery.signal(这步是必须的)
touch /var/lib/postgresql/14/main/recovery.signal
#重启数据库
systemctl start postgresql
第八步 重放WAL日志
psql
select pg_wal_replay_resume();
第九步 验证
select * from t_demo1;
--有数据再确认一下是否符合预期
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)