Postgresql连续归档


前言

提示:只需要会一种操作系统的连续归档,其他什么操作系统都是一样的,
Linux的连续归档开启与还原跟windows一样的只不过没有图像化界面而已,
这里为了让大家看的更加直观懂理解一点,就选择Linux做操作。


一、连续归档是什么?

连续归档:就是通过一段一段的wal文件组成一个类似于区块链一样的东西,一长串的还原点 还原也是通过一段wal文件里的xlog记录的DML操作来还原的,还原也可以设置完全恢复 也可以设置不完全恢复。
不完全恢复:还原到指定某一个时间,之前的数据全部还原。
完全恢复:还原到wal日志最新位置

二、开始实战操作

1.开启归档,实现数据库备份Wal日志文件

修改配置文件:

主要修改如下几个参数:具体含义参考配置文件那一篇文章
archive_mode = on
wal_level = logical
archive_command = 'cp /var/lib/pgsql/12/data/%p /var/lib/pgsql/12/backups/walback/%f'
restore_command = 'cp /var/lib/pgsql/12/backups/walback/%f /var/lib/pgsql/12/data/%p'
注意的地方:如果是用root用户创建walback文件夹需要修改用户以及组
chmod 777 walback #根据自己的情况授予合适的权限,我直接设置最大
chgrp postgres walback #给当前文件夹设置用户组
chown postgres walback #给当前文件夹设置用户

在这里插入图片描述


2.开始基础备份

/usr/pgsql-12/bin/pg_basebackup -F t -Pv -X f -z -Z 9 -h 10.2.200.225 -p 5432 -U postgres -D /var/lib/pgsql/12/backups/back

在这里插入图片描述

2.删除一条数据

进行DML操作在去walback查看文件情况

DELETE from "Test" where name='喜羊羊'

在这里插入图片描述

执行手动归档

select pg_switch_wal()

在这里插入图片描述

查看wal文件情况

在这里插入图片描述


3.分析日志

开始分析定位

把分析里的数据放到wal.log中
/usr/pgsql-12/bin/pg_waldump 00000001000000000000001F > wal.log
打开wal.log进行分析
tail wal.log 
里面一些参数含义可以参考我的博客里的(连续归档分析wal参数说明重点)这篇文章

在这里插入图片描述
在这里插入图片描述

我前面删除的那条的数据的日志位置
可以通过下面这些参数来恢复
lsn:0/1F000358
tx:345170
时间:2020-09-06 23:04:10.330391

在这里插入图片描述

4.开始恢复

这里就演示一种恢复方式事务号吧,其他的都是一样的,相信小伙伴们都会的

停止数据库:systemctl stop postgresql-12
删掉data目录:rm -rf data/

在这里插入图片描述

解压之前基础备份到data目录里面
重新创建一个data目录:mkdir data
解压基础备份:tar -zxvf backups/back/base.tar.gz -C /var/lib/pgsql/12/data/

在这里插入图片描述
在这里插入图片描述

修改配置文件:根据事务号恢复
recovery_target_xid = '345170'

在这里插入图片描述

新建一个标记文件recovery.signal(标记我当前需要做数据恢复)
touch recovery.signal

在这里插入图片描述

由于之前那个data目录是自己创建的所有权限是默认设置的启动的时候会报错权限设置不对
重新设置一下:chmod 700 data(没有删除data目录删除里面数据忽略此操作)
启动服务:systemctl start postgresql-12
查看日志文件:tail postgresql-Sun.log 

在这里插入图片描述
检查数据发现数据回来了

上面报00000001000000000000001D文件没有是因为我之前有几次失败了walback目录文件有点多
显示不够直观可见,所以我删掉了,没事的只是演示

在这里插入图片描述

总结

一些常用的连续归档函数

手动归档:select pg_switch_wal() 
转换当前wal日志位置为文件名:Select pg_walfile_name(back)
获得当前wal日志写入位置:Select pg_current_wal_lsn() 
开启wal备份,完成本次数据恢复操作:Select pg_wal_replay_resume() 
创建还原点:select pg_create_restore_point('testel') 
----------------------------------------------------------
其他的函数可以去参考官方哦都有的。

喜欢博主的可以关注订阅一下哦有空,就会分享简单易懂,一看就会的文章😍。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值