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

PG物理备份与恢复之pg_basebackup

PG物理备份与恢复之pg_basebackup

  • 开启WAL日志归档
  • pg_basebackup备份工具
  • 全库恢复:recovery.conf

🐘 数据库版本:PostgreSQL 10.4

开启WAL日志归档

通过数据库的全量备份和WAL日志,可以将数据库恢复到任意时间点。每个WAL日志文件大小通常是16MB。WAL日志文件个数增长到wal_keep_segments + 1个后,会覆盖已有的WAL日志文件。因此最好根据业务需求定时对WAL日志进行归档。

🕷 在PG 13版本中,wal_keep_segments被参数wal_keep_size取代。

创建归档目录:

mkdir /pg_arch
chown -R postgres:postgres /pg_arch

编辑配置文件postgresql.conf

wal_level = replica
archive_mode = on
archive_command = 'DATE=`date +%Y%m%d`; DIR="/pg_arch/$DATE"; (test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f'
wal_keep_segments = 128

其中,%p表示包含完整路径的WAL日志文件名,%f表示不包含路径信息的WAL日志文件名。

重启数据库:

pg_ctl stop
pg_ctl start

手动触发日志切换:

postgres=# checkpoint;               --刷新内存脏页到磁盘
CHECKPOINTpostgres=# select pg_switch_wal();   --手动归档WAL日志pg_switch_wal 
---------------0/50003C0
(1 row)

验证归档:

[postgres@dbhost ~]$ ls -lh /pgdata/pg_wal/
total 32M
-rw------- 1 postgres postgres 16M Oct 26 11:17 000000010000000000000009
-rw------- 1 postgres postgres 16M Oct 26 11:17 00000001000000000000000A
drwx------ 2 postgres postgres 244 Oct 26 11:17 archive_status[postgres@dbhost ~]$ ls -lh /pg_arch/20231026/
total 16M
-rw------- 1 postgres postgres 16M Oct 26 11:17 000000010000000000000009

pg_basebackup备份工具

从PostgreSQL 9.1开始,支持使用pg_basebackup进行数据库物理备份(热备份)。pg_basebackup通过replication协议连接到数据库,因此在pg_hba.conf中要允许replication连接。

[postgres@dbhost ~]$ cat /pgdata/pg_hba.conf | grep replica | grep -v '^#'
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    replication     repl            0.0.0.0/0               md5

出于安全考虑,也可以创建单独的流复制用户配置到pg_hba.conf中,并禁用其他replication连接。

create role repl nosuperuser replication login connection limit 32 encrypted password 'Pwdabc123';

对本地数据库进行全库备份:

[postgres@dbhost ~]$ pg_basebackup -Urepl -Ft -Xf -z -Z5 -R -Pv -D /home/postgres/backup
39635/39635 kB (100%), 2/2 tablespaces[postgres@dbhost ~]$ ls backup/
16386.tar.gz  base.tar.gz  pg_wal.tar.gz

其中,纯数字命名的备份文件是对/pgdata/pg_tblspc目录下表空间的备份。

pg_basebackup支持的常用参数选项如下:

  • -h host:指定要连接的源数据库地址;
  • -p port:指定要连接的源数据库端口;
  • -U username:指定连接用户名;
  • -D path:指定备份的存放路径。如果不存在,会自动创建;如果已存在且非空,则会执行失败。
  • -F p|t:指定备份输出格式,默认为plain,t表示备份为tar包。
  • -X f|fetch|s|stream:f或fetch表示把备份过程中产生的xlog文件也备份。需要设置wal_keep_segments参数以保证备份过程中WAL日志不会被覆写。s或stream表示备份开始后,启动另一个连接从源库接收WAL日志。需要设置max_wal_senders参数至少大于2。
  • -R:生成用于恢复的recovery.conf文件。
  • -z:与-Ft连用,表示对备份输出的tar包进行gzip压缩,得到格式为.tar.gz的备份文件。
  • -Z level:指定gzip的压缩级别,取值范围为1~9,数字越大压缩率越高。
  • -l label:为备份指定标签,便于识别和管理备份文件。
  • -P:在备份过程中实时显示备份进度。
  • -v:备份过程中显示详细信息。

全库恢复:recovery.conf

利用pg_basebackup备份恢复整个数据库。

检查表空间备份对应的恢复路径:

[postgres@dbhost ~]$ ll /pgdata/pg_tblspc/
total 0
lrwxrwxrwx 1 postgres postgres 14 Oct 26 13:08 16386 -> /pgdata/sekiro

可以得知16386.tar.gz是表空间sekiro的备份。

也可以查询pg_tablespace系统表获知:

postgres=# select oid,* from pg_tablespace;oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+------------+----------+--------+------------1663 | pg_default |       10 |        | 1664 | pg_global  |       10 |        | 16386 | sekiro     |    16384 |        | 
(3 rows)

切换WAL日志:

postgres=# checkpoint;
postgres=# select pg_switch_wal();

删除数据:

#停库
pg_ctl stop#移除数据目录下所有数据库文件
cd /pgdata && rm -rf *#解压基础备份到数据目录
tar -xvf /home/postgres/backup/base.tar.gz -C /pgdata#解压表空间备份到对应的数据库表空间路径(如果有)
tar -xvf /home/postgres/backup/16386.tar.gz -C /pgdata/sekiro#解压日志备份到WAL日志路径(如果有)
tar -xvf /home/postgres/backup/pg_wal.tar.gz -C /pgdata/pg_wal

$PGDATA路径下创建用于恢复的配置文件recovery.conf

cp /usr/local/pgsql/share/recovery.conf.sample /pgdata/recovery.conf
chmod 600 recovery.conf

recovery.conf中添加恢复命令,拷贝归档日志到数据库原始路径下;

echo "restore_command='cp /pg_arch/20231026/%f %p'" > /pgdata/recovery.conf
echo "recovery_target_timeline = 'latest'" >> /pgdata/recovery.conf

启动数据库,自动读取recovery.conf进入恢复恢复:

[postgres@dbhost ~]$ pg_ctl start -D /pgdata
waiting for server to start....2023-10-26 14:08:30.862 CST [10503] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2023-10-26 14:08:30.862 CST [10503] LOG:  listening on IPv6 address "::", port 5432
2023-10-26 14:08:30.864 CST [10503] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-10-26 14:08:30.939 CST [10503] LOG:  redirecting log output to logging collector process
2023-10-26 14:08:30.939 CST [10503] HINT:  Future log output will appear in directory "log".done
server started

恢复完成后,recovery.conf会被重命名为recovery.done

检查告警日志中的恢复信息:

[postgres@dbhost ~]$ tail -f /pgdata/log/server_Thu.log 
cp: cannot stat ‘/pg_arch/20231026/000000020000000000000010’: No such file or directory
2023-10-26 14:08:31.609 CST [10505] LOG:  redo done at 0/F0000D0
2023-10-26 14:08:31.621 CST [10505] LOG:  restored log file "00000002000000000000000F" from archive
cp: cannot stat ‘/pg_arch/20231026/00000003.history’: No such file or directory
2023-10-26 14:08:32.032 CST [10505] LOG:  selected new timeline ID: 3
2023-10-26 14:08:32.531 CST [10505] LOG:  archive recovery complete
2023-10-26 14:08:32.533 CST [10505] LOG:  restored log file "00000002.history" from archive
2023-10-26 14:08:32.638 CST [10503] LOG:  database system is ready to accept connections

References
【1】https://blog.csdn.net/jnrjian/article/details/129945206
【2】https://www.postgresql.org/docs/9.4/runtime-config-replication.html
【3】https://www.modb.pro/db/332203

相关文章:

PG物理备份与恢复之pg_basebackup

PG物理备份与恢复之pg_basebackup 开启WAL日志归档pg_basebackup备份工具全库恢复:recovery.conf 🐘 数据库版本:PostgreSQL 10.4 开启WAL日志归档 通过数据库的全量备份和WAL日志,可以将数据库恢复到任意时间点。每个WAL日志文件…...

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

1 bug描述 使用vscode执行npm run dev指令时出现 “npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次 “ 的错误提示,原因是系统里没有安装n…...

Android 13.0 通过驱动实现禁用usb鼠标和usb键盘功能

1.概述 在13.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb…...

Ubuntu 22.04配置/etc/rc.local开机自启文件

1.查看系统版本 rootbogon-virtual-machine:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy rootbogon-virtual-machine:~ 2. 解决 /etc/rc.local 开机启动问题 看rc-loc…...

python爬虫之正则表达式解析实战

文章目录 1. 图片爬取流程分析2. 实现代码—爬取家常菜图片 1. 图片爬取流程分析 先获取网址,URL:https://www.xiachufang.com/category/40076/ 定位想要爬取的内容使用正则表达式爬取导入模块指定URLUA伪装(模拟浏览器)发起请求…...

什么是虚拟dom?

虚拟DOM是利用js描述元素与元素的关系,用js对象来表示真实的dom树结构,创建一个虚拟的dom对象。 虚拟DOM的原理是根据真实DOM生成一个js对象,里面有元素、属性和文本,这些与真实DOM中的元素、属性、文本一一对应。虚拟DOM可以更好…...

大数据学习(18)-任务并行度优化

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…...

C++学习笔记之四(标准库、标准模板库、vector类)

C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器2.1.4、vector与算法 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray),它定义了十个大类…...

IDEA部署SSM项目mysql数据库MAVEN项目部署教程

如果 SSM 项目是基于 Maven 构建的,则需要配置 maven 环境,否则跳过这一步 步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默…...

uniapp 将流转化为视频并播放 微信小程序

该问题最关键的一步是将后端传回来的流,转化成视频,并播放。 1、从服务器请求数据流到前端 2、新建一个临时文件,将数据流写入这个文件里面,并自定义路径命名。 const fs wx.getFileSystemManager(); //获取全局唯一的文件管理…...

【软考】系统集成项目管理工程师(十)项目质量管理【3分】

一、质量概念 1、定义 国际:反应实体满足主体明确和隐含需求的能力的特性总和 国内:一组固有特性满足要求的程度 2、质量与等级 质量:作为实现的性能或成果,是一系列内在特性满足要求的程度ISO9000 等级:作为设计意…...

七层负载均衡 HAproxy

一、HAproxy 1、负载均衡类型: (1) 无负载均衡: 没有负载均衡,用户直接连接到 Web 服务器。当许多用户同时访问服务器时,可能无法连接。 (2) 四层负载均衡: 用户访问负载均衡器,负载均衡器将用户的请求…...

SQL SELECT TOP, LIMIT, ROWNUM

SQL SELECT TOP 子句 SELECT TOP 子句用于指定要返回的记录数量。 SELECT TOP子句在包含数千条记录的大型表上很有用。返回大量记录会影响性能。 注:并不是所有的数据库系统都支持SELECT TOP子句。MySQL支持LIMIT子句来选择有限数量的记录,而Oracle使用…...

vue3-admin-element框架登录如何修改?

1、找到vite.config.js文件 配置反向代理 2、找到src文件下的user.js文件 3、找到views文件下的login文件 打开找到comp文件夹找到LoginFrom.vue页面进去 把这个改成自己的账户数据(密码不一致自行更改) 4、找到store文件下的modules下的user.js 5、找到…...

基于mysql的请假系统,java/springboot/jsp/javaweb/tomcat

系统分为 学生/辅导员/超级管理员 登录注册、修改头像、个人资料。 学生登录可以提交请假申请。 辅导员登录可以管理学生信息、管理班级信息、管理课程信息。 超级管理员登陆可以管理用户信息、管理学生信息、管理辅导员信息、管理班级信息、管理二级学院信息、管理课程信息、…...

【Python机器学习】零基础掌握partial_dependence检验、检查

在医疗健康的领域,有一个问题一直困扰着专家——如何从多个健康指标中找出影响患者健康最关键的因素?在这样的场景下,做出准确的预测非常关键,因为它直接关联到患者的生命安全。 解决这一问题的一个有效方法是利用机器学习算法,具体来说就是通过偏依赖图(Partial Depend…...

前端Vue页面中如何展示本地图片

<el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"imgUrl" label"图片"><template v-slot"scope"><img :src "http://localhost:8888/image/ scope.row.imgUrl&qu…...

基于PHP的图像分享社交平台

有需要请加文章底部Q哦 可远程调试 基于PHP的图像分享社交平台 一 介绍 此图像分享社交平台基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。平台角色分为用户和管理员。用户可注册登录&#xff0c;发布图像&#xff0c;修改个人信息&#xff0c;评论图像…...

【算法|动态规划No.31 | 01背包问题】01背包模板题

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

Azure - 机器学习:使用 Apache Spark 进行交互式数据整理

目录 本文内容先决条件使用 Apache Spark 进行交互式数据整理Azure 机器学习笔记本中的无服务器 Spark 计算从 Azure Data Lake Storage (ADLS) Gen 2 导入和整理数据从 Azure Blob 存储导入和处理数据从 Azure 机器学习数据存储导入和整理数据 关注TechLead&#xff0c;分享AI…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...