当前位置: 首页 > news >正文

Postgresql12基于时间点恢复

1、环境

centos 7系统
postgresql 12
docker 20.10.6

2、整体思路

1)进行一个pg+data目录的全量备份

2)通过wal日志恢复到故障发生之前某个时间点

3、操作步骤

配置postgresql.conf文件

#日志级别
wal_level = replica
#归档开关
archive_mode = on
#归档命令
archive_command = 'cp %p /home/archive/%f && echo %f >> /home/archive/archive.list' 
#用于指定pg_wal目录中保存的过去的wal文件(wal 段)的最小数量
wal_keep_segments=1024

重启pg

4、查看归档目录

此后数据库的操作都会记录wal日志文件到/home/archive目录下

ls /home/archive/
000000010000000000000001  000000010000000000000002  000000010000000000000003  000000010000000000000004  archive.list

如果归档目录中没有内容,需要执行强制日志归档命令

select pg_switch_wal();

如果还是没有,查看数据库日志
如果报错cp:can not create XXX permission denied
给创建的归档目录授权777 然后再次重启 并查看 日志 看该报错是否消失
如果消失则再去查看归档目录 看是否有上面类似内容
如果没有 则执行强制归档命令select pg_switch_wal();

chmod 777 /home/archive

5、使用pg_basebackup进行基础备份

pg_basebackup

/usr/local/pgsql/bin/pg_basebackup -h 127.0.0.1 -U postgres -p 5432 -Ft -Pv -Xf -z -Z5 -D /home/pgdata_bk

备份完成后,对应备份目录会出现基础备份 是一个压缩包

准备试验数据

在2022-03-10 16:40:00 创建表dog 并随意插入几条数据
等待适当时间,在16:43:00创建表cat 并随意插入几条数据
恢复时间点 2022-03-10 16:42:00 (创建两张表之间的时间点就行)
如果恢复后数据库中存在dog表,不存在cat表 则试验成功

模拟数据库故障

模拟数据库故障,停掉数据库

备份原来的data目录

cp -r _data data_bk  ##备份目录rm -rf _data/*   #删除原来data目录内容cp /home/pgdata_bk/base.tar.gz _data/  #将备份的压缩包复制到data目录中并解压
tar -zxvf base.tar.gzrm -rf base.tar.gz  #删除备份

修改postgresql.conf

设置归档命令和恢复时间点
设置恢复时间点的时候要注意时区问题

restore_command = 'cp /home/archive/%f %p > /home/archive/recovery.log 2>&1  '
recovery_target_time = '2022-03-10 16:42:00'

添加空白文件recovery.signal文件

data目录添加文件 提醒postgresql要做recovery

touch recovery.signal

重启查看数据

查看数据是否符合预期
恢复后的数据库为只读模式 需要执行

select pg_wal_replay_resume()

可能遇到的问题

1)pg_basebackup 操作FATAL: no pg_hba.conf entry for replication connection from host

在pg_hba.cnf中 单单指明 local all postgres  127.0.0.1/32 md5 不够
还需添加 host replication all 127.0.0.1/32 md5
参考:
https://www.cnblogs.com/zhenren001/p/15956270.html
链接:https://www.jianshu.com/p/a492706238a6
http://www.lryc.cn/news/138574.html

相关文章:

  • 【MySQL系列】Select语句单表查询详解(二)ORDERBY排序
  • C++学习第十九天----简单文件输入/输出和今日工作问题
  • 基于风险的漏洞管理
  • 命令行——Git基本操作总结
  • 验证评估守护关基安全 赛宁数字孪生靶场创新实践
  • R语言09-R语言中的字符函数和分布相关函数
  • pnpm无法加载文件 (解决方法 )
  • 做一个蛋糕店小程序需要哪些步骤?
  • Docker的革命:容器技术如何重塑软件部署之路
  • 【ARM-Linux】项目,语音刷抖音项目
  • Linux驱动开发:技术、实践与Linux的历史
  • # Go学习-Day5
  • 创建型(二) - 单例模式
  • 基于swing的图书借阅管理系统java jsp书馆书籍信息mysql源代码
  • Android相机-HAL-Rockchip-hal3
  • 基于Java+SpringBoot+vue前后端分离华强北商城二手手机管理系统设计实现
  • 【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)
  • HTML 网页中 自定义图像单击或鼠标悬停时放大
  • 从程序员进阶到架构师再到CTO,该如何破解焦虑?
  • 批量将excel文件转csv文件
  • 实现 CSS 文字渐变色效果
  • C++信息学奥赛1148:连续出现的字符
  • 【笔记】岂不怀归:三和青年调查
  • 使用Mavon-Editor编辑器上传本地图片到又拍云云存储(Vue+SpringBoot)
  • QT使用QXlsx实现对Excel的创建与文字的存取 QT基础入门【Excel的操作】
  • 前端遇到困扰怎么办?10年前端在线帮您解决问题,只需一杯下午茶
  • c#值类型和引用类型
  • 机器学习算法示例的收集;MetaAI编码工具Code Llama;“天工AI搜索”首发实测
  • 大模型一、大语言模型的背景和发展
  • Linux常用命令——dhcpd命令