PostgreSQL basebackup备份和恢复

news/2024/7/9 21:13:59 标签: postgresql, 数据库

一、概述

备份和恢复分为逻辑和物理,这里指物理备份和恢复。

PG的物理备份依赖basebackup,这差不多就是数据目录的拷贝,还依赖归档日志。

恢复分为完全恢复和PITR恢复,它们都需要归档日志,它们关键的差别是,PITR需要设置postgresql.conf中的参数recovery_target_time,还有PITR时,PG服务器恢复完后是只读状态,需要手动执行select pg_wal_replay_resume(),这样,其实是让管理员确认,恢复是否满足期望。

二、备份

PG的物理备份使用命令pg_basebackup,具体命令用法我就不写了,最终结果和对数据目录进行文件系统拷贝差不多,当然,还是有不同的,pg_basebackup时,PG服务器不需要停止服务,备份过程数据库可能会有增删改,不过没关系,这些修改都在WAL中,且开启了full_page_write。pg_basebackup出来的目录中会有backup_label这个文件,表示这是个备份。

备份:

pg_basebackup -D my_basebackup -U<username> -h<host> -p<port>

三、恢复

恢复分完全恢复和按时间点恢复(PITR),注意,这里有个前提,就是运行、备份、恢复时是开启归档日志的,且都放在一个目录下。

1)完全恢复

简单的讲,完全恢复需要basebackup + 归档日志,这里有个小细节,就是停库时,可能最新的WAL文件还没有存到归档目录,所以最好能把原数据目录下pg_wal的内容复制到basebackup目录下pg_wal,basebackup目录下pg_wal的内容其实可以删掉。

当然这个basebackup要做一些处理,里面要创建一个recovery.signal文件,告诉PG服务器,启动后要做恢复,还要设置restore_command,告诉PG服务器从哪里取归档日志。

对于完全恢复,不可以设置recovery_target_time等表示恢复终止点的参数,PG服务器会一直取归档日志并恢复,直到找不到文件为止。

# 停库

pg_ctl -D _data stop

# 复制数据目录(restore)

mv _data _data_bkp

cp -r my_basebackup _data

# 这里有一点,就是,如果是完全恢复到最新状态的话,

# restore后目录的pg_wal目录清空,

# 原来数据目录_data下的pg_wal里的WAL文件要拷贝到restore后目录的pg_wal下,

# 这样做是考虑到有可能最新的WAL文件还没有存到归档目录。

# 设置恢复参数

touch recovery.signal

vim _data/postgresql.conf

restore_command = 'cp /mnt/server/archivedir/%f %p'

# 启动

pg_ctl -D _data start

2)按时间点恢复

和完全恢复差不多,也是需要basebackup + 归档日志,创建recovery.signal,但与完全恢复不同的是:还要设置recovery_target_time,可能还有recovery_target_timeline,PG服务器恢复完后,并不是立即进入可用状态,而是需要管理员手动执行select pg_wal_replay_resume(),这样可以给管理员机会调整恢复的时间,而不需要完全重新做一次恢复。

# 停库

pg_ctl -D _data stop

# 复制数据目录(restore)

mv _data _data_bkp

cp -r my_basebackup _data

# 设置恢复参数

touch _data/recovery.signal

vim _data/postgresql.conf

recovery_target_time = '2021-02-05 14:00:37+08'

restore_command = 'cp /mnt/server/archivedir/%f %p'

# 启动

pg_ctl -D _data start

select pg_wal_replay_resume();

# psql登录查看一下数据库状态,是否是想要的状态,

# 如果是,就执行pg_wal_replay_resume();

# 如果不是,就停库,再修改recovery_target_time (时间上只能往后修改)

# 再启动,最后确定数据库达到想要的状态,就执行select pg_wal_replay_resume();

# 完成恢复。


http://www.niftyadmin.cn/n/5128603.html

相关文章

polyloss详解

1、常见的泰勒展开公式 2、polyloss引入动机 2.1、polyloss定义 polyloss通过泰勒展开来逼近损失函数的简单框架&#xff0c;将损失函数设计为多项式函数的线性组合 2.2、polyloss主要贡献 提出了一个新的框架来理解和设计损失函数 PolyLoss可以让多项式基根据目标任务和数…

matlab simulink ADRC控制样例

1、内容简介 略 3-可以交流、咨询、答疑 2、内容说明 用adrc控制传递函数&#xff0c;保证输出达到预期 ADRC控制器、传递函数 3、仿真分析 4、参考论文 略

yarn install 这个命令安装如何加速

yarn install 命令用来安装项目依赖&#xff0c;其速度受多种因素影响&#xff0c;如网络速度、npm/yarn包的源服务器、以及本地缓存等。以下是一些可能帮助你加速 yarn install 的方法&#xff1a; 1. 使用国内镜像 如果你在中国&#xff0c;可以使用淘宝的 npm 镜像&#x…

数学与经济管理

数学与经济管理&#xff08;2-4分&#xff09; 章节概述 最小生成树问题 答案&#xff1a;23 讲解地址&#xff1a;74-最小生成树问题_哔哩哔哩_bilibili 最短路径问题 答案&#xff1a;81 讲解地址&#xff1a;75-最短路径问题_哔哩哔哩_bilibili 网络与最大流量问题 真题 讲解…

Python异步编程小解一

Python异步编程 什么是异步&#xff0c;为什么是异步&#xff1f; 异步&#xff0c;意指你不用等到某个条件达成再去做某事&#xff0c;比如&#xff1a;你不用等到一切都准备好了才开始跳槽&#x1f415;.那么在 多线程 存在的情况下&#xff0c;我们为什么还要把目光投向 异…

centos中安装mysql5.7

建议第八步骤&#xff0c;和第九步骤对于生产者人员就不用配置了&#xff0c;风险大&#xff0c;我自己的也没有配置 1.首先切换到root用户下 2.更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 3.安装mysql yum库 rpm -Uvh https://repo.mysql.com//…

如何用 Python 实现 Excel 任务自动化

Excel 是一个很棒的数据分析常用工具。 数据分析人员可以随时用 Excel 修改、检查和显示大量的数据&#xff0c;更轻松地获得洞见并做出明智的选择。 Excel 的多功能性使用户可以进行各种数据分析活动&#xff0c;从简单的数学运算到复杂的统计分析。此外&#xff0c;Excel 通…

JVM虚拟机:Java对象的头信息有什么?

本文重点 在前面的课程中,我们学习了对象头,其中对象头包含Mark Word和class pointer,当然数组还会有一个数组长度。本文主要分析Mark Work中包含的信息。 Mark Word 以下两张图是一个意思: 32位 32位 64位 以上就是Mark Word会存储的信息,这个意思是说Java对象在不同…