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

PostgreSql 备份恢复

一、概述

  数据库备份一般可分为物理备份和逻辑备份,其中物理备份又可分为物理冷备和物理热备,下面就各种备份方式进行详细说明(一般情况下,生产环境采取的定时物理热备+逻辑备份的方式,均是以下述方式为基础进一步研发编写适合自己业务环境的备份工具或脚本):

  • 物理冷备:在停库的状态下,直接复制 PostgreSQL 的数据文件。备份出来的文件仅可在相同的平台环境中恢复(操作系统+数据库版本相同),仅可全库备份全库恢复。
  • 物理热备:在不停库状态下,拷贝数据库的 data 目录及 wal 归档,基于数据库自身的时间点备份恢复技术(Point-In-Time Recovery),通过不停地重放 wal 日志将数据推到备份结束后的任意一个时间点。备份出来的文件仅可在相同的平台环境中恢复(操作系统+数据库版本相同),仅可全库备份全库恢复。
  • 逻辑备份:利用 PostgreSQL 中自带的 pg_dump、pg_dumpall 进行 sql 转储,或使用客户端管理工具进行备份(实际也是调用的 pg_dump、pg_dumpall 命令),备份出来的文件可跨平台恢复,且可针对具体的对象进行备份恢复。

数据量越大,备份速度越慢,下列表中所列备份速度为相同环境下,三种备份方式的相对速度:

物理冷备物理热备逻辑备份
停库不停库不停库
全库备份恢复全库备份恢复具体数据库对象备份恢复
相同平台环境恢复相同平台环境恢复可跨平台数据库版本恢复
备份速度快备份速度快二进制转储备份速度较快,sql 文本转储备份速度一般

二、物理冷备

2.1 备份

--停库
pg_ctl stop--打包数据目录
cd /data/pg13/
tar -cf backup_pg13.tar data

在这里插入图片描述

2.2 恢复

备份的机器本地恢复或传到其他相同环境的机器进行恢复,需确保操作系统和数据库版本相同。

--确保恢复环境的数据库没有运行,若运行需关闭
ps -ef|grep postg--将原 data 目录改名
cd /data/pg13
mv data data_old--将打的备份包解压至原 data 所在目录下
tar -xvf backup_pg13.tar--启动数据库
pg_ctl start

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

三、物理热备

  PostgreSQL 在数据目录的 pg_wal 子目录(10版本之前是 pg_xlog 子目录)中始终维护一个WAL日志文件。该日志文件记录了数据库数据文件的每次改变。最初设计该日志文件的主要目的是为了数据库异常崩溃后,能够通过重放最后一次 Checkpoint 点之后的日志文件,把数据库推到最终的一致状态,避免数据丢失或不一致。此日志文件的机制也提供了一种热备份方案:基础备份加上重放 wal 日志,将数据推到备份结束后的任意一个时间点。

3.1 备份

1)建立 wal 连续归档

  • 准备好归档目录,并确保空间充足。
  • wal_level 需要 replica 或以上级别。
  • 归档模式 archive_mode 开启。
  • archive_command 指定一个 shell 命令,且确保命令中的路径存在。
--在大的磁盘空间下,创建归档目录
mkdir /data/pg13/archive -p--将下列参数加入 postgresql.conf 文件中,并重启数据库。
wal_level = 'replica'
archive_mode = 'on'
archive_command = 'test ! -f /data/pg13/archive/%f && cp %p /data/pg13/archive/%f'  # Unix
archive_command = 'copy "%p" "C:\\data\\archive\\%f"'  # Windows

在这里插入图片描述

2)制作基础备份

方式一:pg_basebackup

pg_basebackup -D /data/pg13/dbbak

在这里插入图片描述

方式二:使用低级 API 制作非排他基础备份

允许其他并发备份运行,既包括那些使用同样的 API 开始的备份,也包括那些用 pg_basebackup 开始的备份。

--发出开始备份标识
select pg_start_backup('label', false, false);--另外窗口备份数据目录
cp /data/pg13/data /data/pg13/databak -rp--发出备份开始的同一窗口发出终止备份标识
select * FROM pg_stop_backup(false);
select pg_switch_wal();

在这里插入图片描述

在 PostgreSQL 9.6 之前,只能通过 API 排他备份方式(排他式备份方法已过时,应避免使用)。

--发出开始备份标识
select pg_start_backup('label',true);--另外窗口备份数据目录
cp /data/pg13/data  /data/pg13/databak -rp--发出备份开始的同一窗口发出终止备份标识
select * FROM pg_stop_backup();
select pg_switch_wal();

3.2 恢复

1)停止原数据库

pg_ctl stop

2)基础备份拷贝至原数据目录

mv /data/pg13/data /data/pg13/data_old
cp /data/pg13/dbbak /data/pg13/data -rp
  • 如果没有足够的空间,至少要保存集簇的 pg_wal 子目录的内容,因为它可能包含在系统垮掉之前还未被归档的日志。
  • 若在其他机器上恢复确保数据目录所有权及权限(所有权 postgres,权限 0700)。
  • 若使用了自定义表空间,确保 pg_tblspc 子目录中的软连接指向正确。

在这里插入图片描述

3)配置恢复参数

  恢复参数在 PostgreSQL12 版本之前是配置在 recovery.conf 文件中的,而自 PostgreSQL12 版本开始合并到了 postgresql.conf 文件中。默认情况下,恢复将会一直恢复到 WAL 日志的末尾,下面的参数可以被用来指定一个更早的停止点。在 recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 和recovery_target_xid 中, 最多只能使用一个。

--postgresql.conf 或 postgresql.auto.conf 中配置均可,当都配置时 postgresql.auto.conf 会覆盖 postgresql.conf 文件中的配置
#archive_mode = 'on'      #恢复期间先关闭归档模式,确认恢复的数据没问题后,再开启
restore_command = 'cp /data/pg13/archive/%f %p'
recovery_target_time = '2023-08-11 15:58:00'    #不配置该参数时,默认恢复到最新时间点restore_command = 'copy "C:\\data\\archive\\%f" "%p"'  # Windows

在这里插入图片描述

其他可选配置

--恢复到指定时间
recovery_target_time = '2023-08-10 14:00:00'
--恢复到一致状态后尽快结束
recovery_target = 'immediate'
--恢复到 pg_create_restore_point() 所创建还原点
recovery_target_name = 'string'
--恢复到指定事务ID
recovery_target_xid = 'string' 
--恢复将继续进行的预写日志位置的LSN
recovery_target_lsn = 'pg_lsn'
--指定是否在指定的恢复目标之后停止(on)或在恢复目标之前停止(off),适用于 recovery_target_lsn、recovery_target_time 或者 recovery_target_xid 被指定的情况。默认 on
recovery_target_inclusive = 'boolean' 
--恢复到指定时间线,可以是数字时间线 ID 或特殊值,默认 latest
recovery_target_timeline = 'string'
--达到恢复目标时服务器应该立刻采取的动作
pause:恢复将会被暂停(默认)。
promote:恢复处理将会结束并且服务器将开始接受连接。
shutdown:将在达到恢复目标之后停止服务器。recovery_target_action = 'enum' 

注意:

  • 由于在 recovery_target_action 被设置为 shutdown 时,recovery.signal 将不会被移除, 任何后续的启动都将会以立刻关闭为终结,除非该配置被改变或者 recovery.signal 文件被手工移除。
  • 如果没有设置恢复目标,如果没有启用 hot_standby,pause设置的动作将和shutdown一样。 如果在升级期间达到恢复目标,pause 的设置将与 promote的行为相同。
  • 在任何情况下,如果已配置了恢复目标,但归档恢复在达到目标之前结束,则服务器将关闭,并出现致命错误。

4)创建恢复标识文件

touch $PGDATA/recovery.signal

5)启动数据库

数据库在启动过程中自动应用配置文件中恢复设置,将数据库推进至指定位置

pg_ctl start

在这里插入图片描述

6)核对数据确认是否需要继续往下推进

当指定时间点恢复时,启动数据库后默认为只读状态,此时可查询数据进行检查,若不是想要的数据,可继续往后推进(只能向上次恢复的时间点后推进,不能向之前倒推)

--时间点继续推进
pg_ctl stop将 postgresql.auto.conf 中之间继续向后改recovery_target_time = '2023-08-11 15:59:00'pg_ctl start

数据库为只读状态,recovery.signal 恢复标识文件存在时,就可继续推进。
在这里插入图片描述

确认数据没问题后,可使用如下命令,结束恢复,数据库恢复读写模式:

select pg_wal_replay_resume();

此时 recovery.signal 恢复标识文件也会自动删除
在这里插入图片描述

四、逻辑备份

  pg_dumpall 工具可以将 PostgreSQL 中的所有数据库转储到一个文本文件,它会对集簇中的每个数据库调用 pg_dump 来完成该工作,由于 pg_dumpall 仅能转储文本文件(sql 脚本格式),当数据量大时,改方式效率较低,故一般仅用其导出全局对象(数据库、角色、表空间)的功能,备份数据库则使用 pg_dump 方式:

--导出数据库、角色、表空间定义
pg_dumpall -h localhost -U postgres --port=5432 -f backup.sql --globals-only  --clean

pg_dump 用法:https://xiaosonggong.blog.csdn.net/article/details/122743398

相关文章:

PostgreSql 备份恢复

一、概述 数据库备份一般可分为物理备份和逻辑备份,其中物理备份又可分为物理冷备和物理热备,下面就各种备份方式进行详细说明(一般情况下,生产环境采取的定时物理热备逻辑备份的方式,均是以下述方式为基础进一步研发编…...

鲲鹏916/920处理器性能比较

CPUKunpeng916Kunpeng920指令集Cotex-A75TaiShan-V110主频2.4GHz2.6GHz/3.0GHz核数3224/32/48/64CacheL1: 48 KB instruction cache and 32 KB data cache L2: 256 KB private per core L3: 32 MB L1: 64 KB instruction cache and 64 KB data cache L2: 512 KB private per co…...

《Go 语言第一课》课程学习笔记(八)

基本数据类型 Go 原生支持的数值类型有哪些? Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中,我们日常 Go 编码中使用最多的就是基本数据类型,而基本数据类型中使用占比最大的又是数值类型。 整型 Go 语言的…...

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——联选言

文章目录 第五节 联言+选言-摩根定理-非(A或B)=非A且非B,非(A且B)=非A或非B真题(2013-49)-联言+选言-摩根定理-非(A或B)=非A且非B,非(A且B)=非A或非B真题(2012-33)-联言+选言-摩根定理-非(A或B)=非A且非B,非(A且B)=非A或非B真题(2014-42)-联言+选言-摩根定理-非(A或B…...

CAS 一些隐藏的知识,您了解吗

目录 ConcurrentHashMap 一定是线程安全的吗 CAS 机制的注意事项 使用java 并行流 ,您要留意了 ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 内部使用的是数组加链表加红黑树的结构,通过CASvolatile或synchronized的方式来保证线程安全的,这些原理…...

ChatGPT逐句逐句地解释代码并分析复杂度的提示词prompt

前提安装chrome 插件 AI Prompt Genius, 请参考 3 个 ChatGPT 插件您需要立即下载 你是首席软件工程师。请解释这段代码:{{code}} 添加注释并重写代码,用注释解释每一行代码的作用。最后分析复杂度。快捷键 / 选择 Explain Code 输入代码提…...

【Lua语法】算术、条件、逻辑、位、三目运算符

1.算术运算符 加减乘除取余: - * / % Lua中独有的:幂运算 ^ 注意: 1.Lua中没有自增自减(、–),也没有复合运算符(、-) 2.Lua中字符串可以进行算术运算符操作,会自动转成number 如:“10.3” 1 结果为11.3…...

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录 一、安装C、C编译环境需要的包1. 选择gcc-core、gcc-g2. 选择gdb3. 选择mingw64下的gcc-core、gcc-g4. 选择make5. 选择cmake6. 确认更改7. 查看包安装状态 二、C、C 项目编译示例step1:解压缩sed-4.9.tar.gzstep2:执行./configure生成Makefile…...

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图)效果一览基本介绍程…...

【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互

目录 专栏导读 6 图形绘制与动画效果 6.1 绘制基本图形、文本和图片 6.2 实现动画效果和过渡效果 7 数据可视化 7.1 使用 Matplotlib绘制图表 7.2 使用PyQtGraph绘制图表 7.3 数据的实时刷新和交互操作 7.3.1 数据的实时刷新 7.3.2 交互操作 7.4 自定义数据可视化…...

Java课题笔记~ Ajax

1.1 概述 AJAX (Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。 我们先来说概念中的 JavaScript 和 XML,JavaScript 表明该技术和前端相关;XML 是指以此进行数据交换。 1.1.1 作用 AJAX 作用有以下两方面: 与服…...

调整mysql 最大传输数据 max_allowed_packet=500M

查看 -- show VARIABLES like %max_allowed_packet%; -- set global max_allowed_packet 1024*1024*64;-- show variables like %timeout%; -- show global status like com_kill; show global variables like max_allowed_packet; -- set global max_allowed_packet1024*102…...

【工具】 删除Chrome安装的“创建快捷方式”

创建Chrome的快捷方式,可以放在桌面,想用时双击就可以打开网页,比书签(brookmark)结构化管理更方便。 但是,安装一时爽,卸载有问题。 如果用 windows 控制面板\所有控制面板项\程序和功能 卸载…...

windows上的docker自动化部署到服务器脚本

1、mvn install后,双击这个bat,实现docker build后上传到124服务器,并且重启124服务器 **echo offsetlocal:: 定义镜像名称和版本变量 set IMAGE_NAMEweb set IMAGE_VERSION1.3.1:: 清理本地文件 echo Cleaning up... del service-%IMAGE_N…...

VoxWeekly|The Sandbox 生态周报|20230814

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区&#xf…...

Aurora 8B/10B

目录 1. Overview2. Feature List2. Block Diagram3. Ports Description3.1. User InterfaceFraming InterfaceStreaming InterfaceUser Flow Control(UFC)Native Flow Control(NFC) 3.2. Status and Control Ports3.3. Transceiv…...

如何关闭“若要接收后续google chrome更新,您需使用windows10或更高版本”

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Policies\Google\Chrome] "SuppressUnsupportedOSWarning"dword:00000001 如何关闭“若要接收后续 google chrome 更新,您需使用 windows 10 或更高版本” - 知乎...

python中使用xml快速创建Caption和URL书签管理器应用程序

导语: 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一…...

分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测

分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测 目录 分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分…...

Vue中使用v-bind:class动态绑定多个类名

Vue.js是一个流行的前端框架,它可以帮助开发者构建动态交互的UI界面。在Vue.js开发中,经常需要动态绑定HTML元素的class(类名)属性,以改变元素的外观和行为。本文将介绍采用v-bind:class指令在Vue中如何动态绑定多个类…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...