前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PostgreSQL的pg_basebackup备份恢复详解

PostgreSQL的pg_basebackup备份恢复详解

作者头像
数据和云
发布2022-02-25 17:44:29
发布2022-02-25 17:44:29
3.7K00
代码可运行
举报
文章被收录于专栏:数据和云数据和云
运行总次数:0
代码可运行
备份
代码语言:javascript
代码运行次数:0
运行
复制
pg_basebackup -D /tmp/pg_backup/ -Ft -Pv -U postgres -h 1.15.57.253 -p5432 -R
  • -D 空文件,没有该目录会自动创建
  • F 格式话
  • t 打包为tar包
  • Pv 显示备份的详细过程
  • -u 用户
  • -p 端口

备份报错:

在配置文件pg_hba.conf增加一行:

备份流程:

代码语言:javascript
代码运行次数:0
运行
复制
pg_basebackup: initiating base backup, waiting for checkpoint to complete   #开始基础备份,等待检查点完成pg_basebackup: checkpoint completed                                         #已完成检查点pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1         #预写日志起始于时间点: 0/2000028, 基于时间轴1pg_basebackup: starting background WAL receiver                             #启动后台 WAL 接收进程pg_basebackup: created temporary replication slot "pg_basebackup_24583"     #已创建临时复制槽"pg_basebackup_24583"24598/24598 kB (100%), 1/1 tablespace                                                    pg_basebackup: write-ahead log end point: 0/2000138                         #预写日志结束点: 0/2000138pg_basebackup: waiting for background process to finish streaming ...       #等待后台进程结束流操作...pg_basebackup: syncing data to disk ...                                     #同步数据到磁盘pg_basebackup: base backup completed                                        #基础备份已完成

备份出来的结果:

恢复

代码语言:javascript
代码运行次数:0
运行
复制
[root@VM-0-9-centos data]# rm -rf /pgdata/12/data[root@VM-0-9-centos data]# rm -rf /pgdata/12/archtar -xvf base.tar -C /pgdata/12/datatar -xvf pg_wal.tar -C /pgdata/12/arch

vi postgresql.auto.conf 追加:

代码语言:javascript
代码运行次数:0
运行
复制
restore_command = 'cp /pgdata/12/arch/%f %p'
recovery_target = 'immediate'
touch /pgdata/12/recovery.signal

恢复成功:

注意:data目录需要有700权限。

需要进行操作:

select pg_wal_replay_resume();

恢复到某个时刻

假设每天凌晨有一次全备,某天中午14点误删数据,如何恢复?

恢复原理:

全备+归档+在线redo

模拟测试:

周一数据:

全备:

周二数据:

此时14点,误删了库:

切一下归档:

关库:

代码语言:javascript
代码运行次数:0
运行
复制
pg_ctl -D /pgdata/12/data stop -mi

删除数据:

代码语言:javascript
代码运行次数:0
运行
复制
rm -rf /pgdata/12/data/*

将备份解压到数据目录:

代码语言:javascript
代码运行次数:0
运行
复制
tar -xvf base.tar -C /pgdata/12/data

使用pg_waldump查看需要恢复到哪个事务之前。

恢复到502之前:

编辑配置文件:

postgresql.auto.conf追加:

代码语言:javascript
代码运行次数:0
运行
复制
restore_command = 'cp /pgdata/12/arch/%f %p'recovery_target_xid='501'

启动数据库:

代码语言:javascript
代码运行次数:0
运行
复制
pg_ctl -D /pgdata/12/data -l logfile start

将恢复停止:

代码语言:javascript
代码运行次数:0
运行
复制
select pg_wal_replay_resume();

恢复成功:


墨天轮原文链接:https://www.modb.pro/db/193193?sjhy

关于作者

陈家睿,云和恩墨MySQL技术顾问,拥有MySQL OCP、PGCE、OBCA、SCDP证书,长期服务于电信行业。现负责公司MySQL数据库、分布式数据库运维方面的技术工作;热衷于运维故障处理、备份恢复、升级迁移、性能优化的学习与分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档