PG备份与恢复

一、开启WAL归档

1、创建归档目录

我们除了存储数据目录pgdata之外,还要创建backups,scripts,archive_wals文件

mkdir -p /home/mydba/pgdata/arch
mkdir -p /home/mydba/pgdata/scripts
mkdir -p /home/mydba/backups
chown -R mydba.mydba /home/mydba

在这里插入图片描述

其中pgdata是数据库的数据目录,backups目录是用来存放基础备份,scripts目录用来存放一些任务脚本。arch目录用来存放归档。

2、修改wal_level参数

  • wal_level参数可选的值有minimal、replica和logical,从minimal到replica再到logical级别,WAL的级别依次增高,在WAL中包含的信息也越多。在minimal模式下无法开启归档,所以开启WAL归档wal_level至少设置为replica。设置方法如下:
ALTER SYSTEM SET wal_level = 'replica';

在这里插入图片描述

3、修改archive_mode参数

archive_mode参数可选的值有on、off和always,默认值为off,开启归档需要修改为on,修改方式如下:

ALTER SYSTEM SET archive_mode = 'on';

在这里插入图片描述

修改此参数需要重新启动数据库使之生效
在这里插入图片描述

4、修改archive_command参数

  • archive_command参数默认是个空字符串,它的值可以是一条shell命令或者是一个复杂的shell脚本。在archive_command的shell命令或者脚本可以使用“%p”表示将要归档的WAL文件的包含完整路径信息的文件名,用“%f”代表不包含路径信息的WAL文件的文件名。

  • 修改wal_level和archive_mode参数都需要重启数据库才可以生效,修改archive_command不需要重启,只要reload即可。但是要注意,当开启了归档,应该注意archive_command设置的归档命令是否执行成功,如果归档命令未执行成功,它会周期性的重试,在此期间已有的WAL文件将不会被复用,新产生的WAL文件会不断张永pg_wal的磁盘空间,直到pg_wal所在的文件系统被占满后数据库关闭。

  • 如果考虑到归档占用较多的磁盘空间,配置归档时可以将WAL压缩之后在归档,可以使用gzip、bzip2或lz4等压缩工具进行压缩。以下一lz为例子:

ALTER SYSTEM SET archive_command = '/usr/bin/lz4 -q -z %p /home/mydba/pgdata/arch/%f.lz4';show archive_command;

在这里插入图片描述

在这里插入图片描述

二、物理备份

这里是使用pg_basebackup的备份与恢复

pg_basebackup 也算是物理方式,是可以使用流协议。并且是热备范畴,备份的时候不需要停数据库,但,恢复的时候需要停数据库。
备份:使用pg_basebackup命令来进行备份,这个命令可以将postgresql的数据文件备份为两个压缩文件:base.tar和 pg_wal.tar。本别是数据文件和归档文件,恢复的时候,需要设置按照归档文件来恢复。那么,此种方式的备份可以备份自定义表空间。
恢复:需要先把备份的压缩文件替换当前的数据文件,然后修改postgresql.conf,因为这个配置文件在data文件夹中,所以只能是在把base.tar解压到数据库当前数据位置,也就是我们默认初始化指定的数据保存位置data文件夹中,才能修改配置,在配置好归档设置以后,可以启动pgsql服务,进行启动恢复。
在恢复过程中,会拷贝归档文件,进行数据恢复。
恢复成功,也就是数据库服务启动成功。这个时候我们访问数据库,它是作为归档状态存在的,所以只能读,不能写操作。
为了恢复数据库写操作,我们需要在命令行下执行切换数据库状态的指令。切换成功之后,才可以进行读写操作。

pg_basebackup -Ft -Pv -z -Z5 -p 5432 -D /home/mydba/backups/

-z -Z 5是压缩等级,范围是0-9, -Ft是tar包格式备份。
在这里插入图片描述

停止数据库:

pg_ctl stop

在这里插入图片描述

删除原库的数据文件:

rm -rf /home/mydba/pgdata/*

解压备份文件到对应路径:

# 恢复基本数据文件
tar zxvf /home/mydba/backups/base.tar.gz -C /home/mydba/pgdata
# 恢复wal日志
tar zxvf /home/mydba/backups/pg_wal.tar.gz -C /home/mydba/pgdata/arch

修改postgresql.conf文件:
任选一种恢复方式:

  • 立刻恢复
restore_command = 'cp /home/mydba/pgdata/arch/%f %p' 
recovery_target = 'immediate'
  • 可以按时间线恢复到最新
# 恢复到最新:  
restore_command = 'cp /home/mydba/pgdata/arch/%f %p' 
recovery_target_timeline = 'latest'
  • 按时间点恢复
restore_command = 'cp /home/mydba/pgdata/arch/%f %p'  
recovery_target_time = '2024-06-13 14:16:16.007657+08'

如果不想进入备份模式,直接数据库启动就可以用,那么就使用promote。

recovery_target_action  #指定在达到恢复目标时服务器采取的动作。  
pause  #默认值,表示恢复将被暂停 
promote  #表示恢复结束且服务器将开始接受连接 
shutdown #表示在达到恢复目标之后停止服务器。

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

启动数据库

pg_ctl -D /home/mydba/pgdata/ start

在这里插入图片描述

报错
创建恢复文件

touch recovery.signal

再次启动数据库

pg_ctl -D /home/mydba/pgdata/ start

在这里插入图片描述

启动成功,经过检验,数据恢复成功。
在这里插入图片描述

查询数据库状态:

pg_controldata

在这里插入图片描述

此时数据库的状态是备份模式,需要恢复一下

pg_ctl promote

在这里插入图片描述

再次查询
在这里插入图片描述

或者进入sql执行以下命令也可以解决。

select pg_wal_replay_resume();

三、逻辑备份

热备热恢复
首选当然是pg_dump啦,这个备份工具是和pg_restore配套的,也可以看成是一个组合。
该备份工具的特点是稳定,高效,冷热备份恢复都可以,可以选择数据库部分表备份,只备份表结构,因此,该工具的使用比较复杂,这点是相对物理备份来说的。
物理备份有一种暴力的美学感觉,简单的方法有时候更为高效。逻辑备份比较枯燥,复杂。
pg_dump常用参数

-h host,指定数据库主机名,或者IP
-p port,指定端口号
-U user,指定连接使用的用户名
-W,按提示输入密码
-F, --format=c|d|t|p output file format (备份文件的格式是自定义,目录,tar包,纯文本,不使用该参数,将会是纯文本默认)
-d 指定连接的数据库名称,实际上也是要备份的数据库名称。
-a,–data-only,只导出数据,不导出表结构,该选项只对纯文本格式有意义。
-c,–clean,是否生成清理该数据库对象的语句,比如drop table,该选项只对纯文本格式有意义。
-C,–create,是否输出一条创建数据库语句,该选项只对纯文本格式有意义。
-f file,–file=file,输出到指定文件中
-n schema,–schema=schema,只转存匹配schema的模式内容
-N schema,–exclude-schema=schema,不转存匹配schema的模式内容
-O,–no-owner,不设置导出对象的所有权
-s,–schema-only,只导致对象定义模式,不导出数据
-t table,–table=table,只转存匹配到的表,视图,序列,可以使用多个-t匹配多个表
-T table,–exclude-table=table,不转存匹配到的表。
–inserts,使用insert命令形式导出数据,这种方式比默认的copy方式慢很多,但是可用于将数据导入到非PostgreSQL数据库。
–column-inserts,导出的数据,有显式列名

备份前数据库mydb的表内容:

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

备份t1单表
备份命令

pg_dump -h localhost -U mydba --port=5432 -d mydb -t t1 -f /home/mydba/t1-bak1.sql 

在这里插入图片描述

如果有迁移到其它数据库,比如oracle的计划,那么,最好还是添加参数–inserts,上面的命令修改为如下:

pg_dump -h localhost -U mydba --port=5432 -d mydb -t t1 -f /home/mydba/t1-bak2.sql --inserts

在这里插入图片描述

如果希望恢复的时候不需要切换数据库,那么,应该使用参数大C,命令如下:

pg_dump -h localhost -U mydba --port=5432 -d mydb -t t1 -C -f /home/mydba/t1-bak3.sql --inserts

在这里插入图片描述

pg_dump的恢复命令

进入pg命令行直接执行备份的SQL文件即可(执行SQL语句前需要切换数据库到mydb):

\i /home/mydba/t1-bak1.sql

归档文件分类

归档格式的备份文件又分为两种,最灵活的输出文件格式是“custom”自定义格式(使用命令项参数“-Fc”来指定),它允许对归档元素进行选取和重新排列,并且默认是压缩的;另一种是tar格式(使用命令项参数“-Ft”来指定),这种格式的文件不是压缩的,并且加载时不能重新排序,但是它也很灵活,可以用标准UNIX下的tar工具进行处理。custom自定义格式比较常用。
不带-F参数的时候,默认是纯文本模式(纯文本模式备份的文件可以使用记事本打开,里面都是SQL语句)
归档格式的备份文件必须与pg_restore一起使用来重建数据库,这种格式允许pg_restore选择恢复哪些数据,甚至可以在恢复之前对需要恢复的条目重新排序。
pg_dump可以将整个数据库备份到一个归档格式的备份文件中,而pg_restore则可以从这个归档格式的备份文件中选择性地恢复部分表或数据库对象,而不必恢复所有的数据。
归档模式的时候,必须使用pg_restore工具来进行恢复
以下仍然是单表的备份和恢复,备份文件名做了一个时间格式化,恢复的时候是使用pg_restore命令,使用psql将会报错。

pg_dump -h localhost -U mydba --port=5432 -d mydb -t t1  -Fc   -f /home/mydba/$(date +'%Y-%m-%dT%H:%M:%S.%2N%z')-t1-bak1.sql   
pg_restore -d mydb /home/mydba/2024-06-14T10:05:56.46+0800-t1-bak1.sql

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

pg_dump 热备单库热恢复(热恢复指的是不需要停止数据库服务)

pg_dump -h localhost -U mydba --port=5432 -d mydb -C -f /home/mydba/mydb-bak.sql --inserts

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

pg_dumpall
此工具是全库备份,但,一般是不使用这个的,因为,数据库有可能会很大,进而备份的时候出现问题,此工具可以备份用户信息,例如下面这个命令(全局对象里包括用户,因此,如果是仅备份用户信息,也可以使用参数r即可):

pg_dumpall -h localhost -U mydba --port=5432 -f myglobals.sql --globals-only

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

API接口知识小结

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

ANSYS Electronics 电磁场仿真工具下载安装,ANSYS Electronics强大的功能和灵活性

ANSYS Electronics无疑是一款在电磁场仿真领域表现卓越的软件工具。它凭借强大的功能和灵活性,帮助用户在产品设计阶段就能精确预测和优化电磁场性能,从而极大地降低了实际测试成本,并显著提升了产品的可靠性。 这款软件不仅在电子设计领域有…

Python | Leetcode Python题解之第204题计数质数

题目: 题解: MX5000000 is_prime [1] * MX is_prime[0]is_prime[1]0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):#循环每次增加iis_prime[j] 0 class Solution:def countPrimes(self, n: int) -> int:return sum(is_prim…

如何利用ChatGPT改善日常生活:一个普通人的指南

当你打开 ChatGPT,显现的是一个简洁的聊天界面。 许多人利用 ChatGPT 进行日常对话。 然而,ChatGPT 的功能远不止于此。 对话只是其众多能力中的一种,如果仅将其视为高级版的聊天机器人,那未免低估了它。 AI 在信息处理方面的…

【SpringMVC】_SpringMVC实现留言墙

目录 1. 需求分析 2. 接口定义 2.1 提交留言 2.2 获取全部留言 3. 响应数据 4. 服务器代码 4.1 MessageInfo 文件 4.2 MessageController 文件 5. 前端页面代码 5. 运行测试 1. 需求分析 实现如下页面: 1、输入留言信息,点击提交后&#xff0…

【算法专题--链表】两数相加 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 模拟进位 (使用哨兵位头节点) 🥝 什么是哨兵位头节点? 🍇思路解析 🍍案例图解 四、总结与提炼 五、共勉 一、前言 两数相加 这道题,可以说是--…

如何用一个二维码实现企业固定资产管理?

固定资产管理中普遍存在盘点难、家底不清、账实不一致、权责不清晰等问题。如果平时不规范化执行,年终面对上上下下、大大小小、成百上千件物资要进行盘点整理的时候,会是十分痛苦且低效的事情。 今天这篇文章就来给大家推荐几家便宜好用的二维码固定资…

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时,经常会遇到不能自动创建离散端口的问题,原因有很多,比如:缺少元器件封装、开路端口、多端子模型等等,这个时候,很多人会选择手动进行端口创建,但是&a…

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数: 函数二 函数三 主函数 运行结果 src: model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征,实现高准确度的身份识别。…

镜头下的光学

说实话,当我看到几何光学的内容全是初中的解析几何的时候,我就觉得讲的方式太原始了,而且太过复杂也看不懂。所以我尝试做了数学建模,发现建模之后模型可以解释一些物理现象,也不会有矛盾的地方,那就算过得…

Tips汇总

爬虫领域 1. 加密参数值 Failed to load 在采集时遇到一个加密参数 Token,搜索 Token 的值,如果是从前面包中返回的,那相对比较好解决,因此进行搜索,却没有搜索到,那我就认为它是加密的算法。 这里其实有…

【全球首个开源AI数字人】DUIX数字人-打造你的AI伴侣!

目录 1. 引言1.1 数字人技术的发展背景1.2 DUIX数字人项目的开源意义1.3 DUIX数字人技术的独特价值1.4 本文目的与结构 2. DUIX数字人概述2.1 定义与核心概念2.2 硅基智能与DUIX的关系2.3 技术架构2.4 开源优势2.5 应用场景2.6 安全与合规性 3. DUIX数字人技术特点3.1 开源性与…

学习gateway网关路由时遇到的问题

遇到这个问题先别慌,我们首先要检查是哪里出问题了,从报错信息中我们可以看到,他说 Unable to find GatewayFilterFactory with name -AddRequestHeader 找不到这个路由过滤器,所以导致网关设置失败,从这条信息上我…

我的北航MEM成长之旅

领完毕业证,2年的学业生涯到此结束。为了方便大家理解后续的内容,这里我们先解释下基本信息,比如MEM到底是个啥?以及北航的MEM都学什么? 1 MEM解读 1.1 MEM是什么? MEM是"Master of Engineering Ma…

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变(Gradients)是一种让两种或多种颜色平滑过渡的视觉效果,广泛应用于网页背景、按钮、边框等,以创造丰富的视觉体验。CSS提供了线性渐变(Linear Gradients)和径向渐变(Radial…

用英文介绍美国总统:Barack Obama First African-American President (2009 – 2017)

Barack Obama: First African-American President (2009 – 2017) Link: https://www.youtube.com/watch?vwHCBI3yypmE&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index44 Introduction Barack Obama made history as the first African-American elected to the pre…

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符: and or not 1.案例一 需求: 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求: # 1. 获取用户输入的用户名和密码 # 2. 判断…

linux的常用系统维护命令

1.ps显示某个时间点的程序运行情况 -a :显示所有用户的进程 -u :显示用户名和启动时间 -x :显示 没有控制终端的进程 -e :显示所有进程,包括没有控制终端的进程 -l :长格式显示 -w :宽…

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收,标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台,用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括&#xff1…