Postgresql的三种备份方式_postgresql备份

这种方式可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。它会产生一个脚本文件,里面包含备份开始时,已创建的各种数据库对象的SQL语句和每个表中的数据。可以使用数据库提供的工具pg_dumpall和pg_dump来进行备份。pg_dump只备份数据库集群中的某个数据库的数据,它不会导出角色和表空间相关的信息,因为这些信息是整个数据库集群共用的,不属于某个单独的数据库。pg_dumpall,对集簇中的每个数据库调用pg_dump来完成该工作,还会还转储对所有数据库公用的全局对象(pg_dump不保存这些对象)。 目前这包括适数据库用户和组、表空间以及适合所有数据库的访问权限等属性。

例如,在我的计算机上,可使用如下命令对名为dbname的数据库进行备份:

pg_dump –h 127.0.0.1 -p 5432-U postgres -c -C –f dbname.sql dbname

使用如下命令可对全部pg数据库进行备份。

pg_dumpall–h 127.0.0.1–p 5432-U postgres –c -C –f db_bak.sql

恢复方式很简单。执行恢复命令即可:

psql–h 127.0.0.1-p5432-U postgres –f db_bak.sql

3. 连续归档

这种方式的策略是把一个文件系统级别的全量备份和WAL(预写式日志)级别的增量备份结合起来。当需要恢复时,我们先恢复文件系统级别的备份,然后重放备份的WAL文件,把系统恢复到之前的某个状态。这种备份有显著的优点:

  1. 不需要一个完美的一致的文件系统备份作为开始点。备份中的任何内部不一致性将通过日志重放来修正。
  2. 可以结合一个无穷长的WAL文件序列用于重放,可以通过简单地归档WAL文件来达到连续备份。
  3. 不需要重放WAL项一直到最后。可以在任何点停止重放,并使数据库恢复到当时的一致状态。
  4. 可以连续地将一系列WAL文件输送给另一台已经载入了相同基础备份文件的机器,得到一个实时的热备份系统。

如何进行连续归档呢?

下面的实例中,操作系统为windows 10,Postgresql的版本为9.6。

首先,需要修改postgresql.conf文件的几个参数修改如下:

wal_level = ‘replica’

archive_mode = ‘on’

archive_command = ‘copy /y “%p” “D:archive%f”’

archive_command执行时,%p会被要被归档的文件路径所替代,而%f只会被文件名所替代。如果你需要在命令中嵌入一个真正的%字符,可以使用%%。 “D:archive”替换为归档日志的存放路径,要确保归档的目录是存在的。

之后需要重启数据库使配置生效。

接下来需要制作一个非排他的基础备份。Postgresql提供了排他备份和非排他备份两种备份方式,推荐使用非排他的备份方式。

1. 作为一个具有运行 pg_start_backup 权利的用户连接到服务器(不在乎是哪个数据库)并且发出命令:

Select pg_start_backup(‘backup_label’, false, false);

2. 对数据库进行一次文件系统级别的备份。即将postgresql的安装目录下的data目录及其内容复制到其他位置。

3. 在同一个连接中,发出命令:

select * from pg_stop_backup(false);

这个命令代表结束一次非排他的备份。

现在来看基于时间点的恢复。

假如你的数据库出现了故障,需要恢复到之前的某个时刻的一致的状态,就需要进行基于时间点的恢复。

其过程是:

  1. 如果服务器仍在运行,停止它。

  2. 如果你具有足够的空间,将整个集簇数据目录和表空间复制到一个临时位置。注意最好是拷贝而不是移动。如果你没有足够的空间,你至少要保存集簇的pg_xlog子目录的内容,因为它可能包含在系统垮掉之前还未被归档的日志。

  3. 移除data 目录及其所有子文件和子目录。

  4. 从文件系统备份中恢复数据库文件。注意它们要使用正确的用户恢复并且使用正确的权限。如果你在使用表空间,你应该验证pg_tblspc/中的符号链接被正确地恢复。

5.现在已经从备份中恢复了整个数据目录,接下来,你需要部分或全部删除数据目录中的下列文件,如果它们存在:

(1) postmaster.pid;(必须)

(2)pg_xlog中的文件;(必须)

(3)pgsql_tmp开头的临时文件;(可选)

(4)postgresql.auto.conf.tmp;(可选)

(5)pg_replslot目录中的文件;(可选)

(6)pg_stat_tmp目录中的文件。(可选)

  1. 如果你有在第2步中保存的未归档WAL段文件,把它们拷贝到pg_xlog/中或WAL日志的归档目录中。

在集簇数据目录中创建一个恢复命令文件recovery.conf。如果你想恢复到最近的一致状态,在recovery.conf写入如下两行:

restore_command = ‘copy /y D:archive %f%p’

recovery_target_timeline = ‘latest’

其中,restore_command的内容表示将归档日志文件夹中的内容拷贝到pg_xlog,其参数的含义与上文archive_command的参数含义完全相同;recovery_target_timeline = ‘latest’ 表示恢复到最近的时间点。

7. 如果要阻止普通用户在成功恢复之前连接,请修改pg_hba.conf。

8. 启动服务器。服务器将会进入到恢复模式并且进而根据需要读取归档WAL文件。恢复可能因为一个外部错误而被终止,可以简单地重新启动服务器,这样它将继续恢复。恢复过程结束后,服务器将把recovery.conf重命名为recovery.done(为了阻止以后意外地重新进入恢复模式),并且开始正常数据库操作。

9. 检查数据库的内容来确保你已经恢复到了期望的状态。如果没有,返回到第1步。如果一切正常,通过恢复pg_hba.conf为正常来允许用户连接。

这样就完成了一次文件系统级别的全量备份,并实现了WAL文件级别的增量备份。

**附:**pg_start_backup() **pg_stop_backup()**做了什么?

1. pg_start_backup()

pg_start_backup() 的函数原型如下:

pg_start_backup(label text [, fast boolean [, exclusive boolean ]])

其中label是用来唯一标识这次备份操作的任意字符串,fast 表示是否立即执行强制的检查点,exclusive 表示该备份是否是一个排他备份。

使用该函数时,推荐将exclusive设置为false,即非排他方式备份。

执行下面的命令:

Select pg_start_backup(‘backup_label’, false, false);

这条命令会产生三个动作:

1. 在缓冲区中创建两个变量:label_file和tblspc_map_file。前者包含WAL的起始位置、检查点的起始位置、备份方法、备份模式、备份开始时间和备份标签的名称(本例中,名称为“backup_label”)等信息;后者包含 “pg_tblspc/”中表空间符号链接的信息,如果它们存在。

2. 强制发生一次检查点。将检查点开始前提交的事务对数据库的修改刷新到磁盘。

3. 置写日志标志为:XLogCtl->Insert.forcePageWrites = true。把这个标志设置为true后,如果在备份期间时有其他事务修改数据库,那么系统会把被修改的数据页在修改前的完整页面都记录到WAL中,而不仅仅是记录页面中的变化的部分。

为什么要将完整的页面记录到WAL中呢?

原因是在备份过程中,其他事务修改数据库,可能会造成备份后的数据存在新旧数据混合的情况,甚至同一数据页面也会出现这种情况。假如WAL日志中仅仅记录变化的那部分的内容,就无法将数据库恢复到上次备份结束时刻的状态。所以要将修改后的完整页面写入WAL中,以保证数据库恢复后的一致性。

  1. pg_stop_backup()

pg_stop_backup()的函数原型如下:

pg_stop_backup([, exclusive boolean ]);

exclusive 表示该备份是否是一个排他备份。

如果采用非排他方式备份,执行:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965767.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目,新建 2.新建目录 3.选择目标机器,直接搜索at89c52选择,然后点击OK 4.是否添加起吊文件,一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键,添加…

基础篇05-直方图操作

本节将简要介绍Halcon中有关图像直方图操作的算子,重点介绍直方图获取和显示两类算子,以及直方图均衡化处理算子。 目录 1. 引言 2. 获取并显示直方图 2.1 获取(灰度)直方图 (1) gray_histogram (2) gray_histo_abs (3) gr…

3.攻防世界 weak_auth

题目描述提示 是一个登录界面,需要密码登录 进入题目页面如下 弱口令密码爆破 用1 or 1 #试试 提示用admin登录 则尝试 用户名admin密码:123456 直接得到flag 常用弱口令密码(可复制) 用户名 admin admin-- admin or -- admin…

金蛇祈福,鸿运开年!广州白云皮具城2025开市大吉!

锣鼓一响,黄金万两!2月6日大年初九,广州白云皮具城举行盛大的醒狮开市仪式!象征吉祥如意的醒狮,将好运、财运传递给全体商户和八方来客。 醒狮点睛 金鼓一响黄金万两,十头醒狮登台,董事总经理刘…

【Axure教程】标签版分级多选下拉列表

分级多选下拉列表是指一个下拉列表,它包含多个层次的选项,用户可以选择一个或多个选项。这些选项通常是根据某种层级关系来组织的,例如从上到下有不同的分类或者过滤条件,用户选择上层选项后,下层选项会发生变化&#…

SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置?2. Spring Boot 中如何实现多环境配置?3. 多环境配置的应用场景4. 如何实现配置隔离? Spring B…

SOME/IP报文格式及发现协议详解

在之前的文章中,我们介绍了SOME/IP协议的几种服务接口。在本篇博客中,主要介绍some/ip协议传输的header报文格式以及SOME/IP-SD发现协议。 目录 流程 报文格式 Message ID Length Request ID protocal version/Interface Version Message Type…

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包,如同安装软件一样,直接安装即可 win中默认为C盘,如果需要修改到其他盘,查找具体教程 运行list命令,检查是否安装成功 2、修改模型下载的…

约束布局属性学习

1、layout_constraintHorizontal_bias layout_constraintHorizontal_bias 是 ConstraintLayout 中的一个重要属性,用于控制一个视图在父视图或相关视图中水平位置的偏移。这种偏移通过在0到1之间的浮点值来设置,0代表完全靠近左边或起始位置&#xff0c…

Windows双网卡冲突导致网页加载过慢的解决方法 (修改跃点无效 远程桌面连接)

【本文发布于https://blog.csdn.net/Stack_/article/details/145494160,未经许可不得转载,转载须注明出处】 办公室内,我的笔记本和台式机都连接WIFI进行上网,网段是192.168.0.x,网关192.168.0.101 现在要通过Windows自…

轻量级服务器http-server

安装 sudo npm install http-server -g 运行 1. 直接去到要跑起来的目录,在终端输入 cd xxxx文件夹http-server //只输入http-server的话,更新了代码后,页面不会同步更新http-server -c-1 //同步更新页面http-server -a 127.0.0.1 -p 808…

代码随想录算法【Day38】

Day38 322. 零钱兑换 思路 完全背包 代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j <…

python+opencv+open3d实现鼠标手画多边形裁剪分割点云操作

👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… ​💫签名:面朝大海,春暖花开! python+opencv+open3d实现鼠标手画多边形裁剪分割点云操作 引言使用效果:代码pcd_roi_crop.py:引言 当我们想对一个不规则物体的图像或者点云裁剪时,直接手动输入…

STM32的HAL库开发---通用定时器(TIMER)---定时器脉冲计数

一、脉冲计数实验原理 1、 外部时钟模式1&#xff1a;核心为蓝色部分的时基单元&#xff0c;时基单元的时钟源可以来自四种&#xff0c;分别是内部时钟PCLK、外部时钟模式1&#xff0c;外部时钟模式2、内部定时器触发&#xff08;级联&#xff09;。而脉冲计数就是使用外部时钟…

Redis05 - 性能调优和缓存问题

Redis性能调优和缓存问题 文章目录 Redis性能调优和缓存问题一&#xff1a;链路追踪判断是不是redis出了问题二&#xff1a;redis变慢原因1&#xff1a;使用复杂度过高的命令(*)1.1&#xff1a;查看redis慢日志1.2&#xff1a;延迟变大原因分析1.3&#xff1a;解决方案 2&#…

漫步 C++ 之途,领略引用的独特风姿

在C中&#xff0c;引用&#xff08;Reference&#xff09;是一种非常有用的特性&#xff0c;它允许为一个变量创建一个别名&#xff08;Alias&#xff09;。引用在很多情况下可以替代指针&#xff0c;但使用起来更加方便和安全。以下是对C引用的详细介绍&#xff0c;包括其定义…

Spring Boot Web 入门

目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块&#xff0c;它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南&#xff0c;涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …

Java 多线程、线程同步、线程池

一. 线程 1. 线程&#xff1a;线程(Thread)是一个程序内部的一条执行流程。 2. 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 二. 多线程 多线程是指从硬件上实现多条执行流程的技术(多条线程由CPU负责调度) Javas是通过java.lang.Thread类的对象来代…

20.[前端开发]Day20-王者荣耀项目实战(三)

01_(掌握)王者荣耀-main-赛事新闻列表实现 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

【Langchain学习笔记(一)】Langchain介绍

Langchain介绍 Langchain介绍前言1、Langchain 是什么2、为什么要用 Langchain3、Langchain 的核心4、Langchain 的底层原理5、Langchain 的应用场景 Langchain介绍 前言 想象一下&#xff0c;如果你能让聊天机器人不仅仅回答通用问题&#xff0c;还能从你自己的数据库或文件…