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.mzph.cn/bicheng/37795.shtml

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

相关文章

docker网络功能介绍

一、 网络启动过程二、 修改容器dns和主机名① 临时处理(容器终止或重启后不会保存)② 通过参数指定 三、 容器内访问控制① 容器访问外部网络② 容器间互相访问(1)访问所有端口(2)访问指定端口 四、 docke…

解读环境工程乙级资质中对专业技术人员职称与执业资格的双重要求

1. 职称要求 职称是中国专业技术人员职业资格的一种体现,反映了个人在某一专业领域的学术水平、专业技能和工作经验。职称分为初级(助理级)、中级、副高级(高级)和正高级(教授级)。在环境工程乙…

SpringDataJPA系列(1)JPA概述

SpringDataJPA系列(1)JPA概述 SpringDataJPA似乎越来越流行了,我厂的mysql数据库和MongoDB数据库持久层都依赖了SpringDataJPA。为了更好的使用它,我们内部还对MongoDB的做了进一步的抽象和封装。为了查漏补缺,温故而知新,整理下…

工作中常用的linux命令整理-文本和文件处理

VI 显示行号“: set number”统计查找字符串“ORA”个数:“:%s/ORA//gn”复制:yy粘贴:p删除: dd删除第一行到第十行: :1,10d删除第5行至最后一行: :5,$d跳转到指定行:“:n”跳转到最后一行:ShiftGS向下查找&#xff1…

Dataway,又一款告别 Controller、Service、Dao...的神器

Dataway 让 Spring Boot 不再需要 Controller、Service、DAO、Mapper... Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。 整个接口配置、测试、冒烟、发布。一站式都通过 D…

统计分析利器:深入解读卡方检验与单因素方差分析的应用案例【练习题】

一、卡方检验 1.对400人进行问卷调查,询问对于教学改革的看法,调查结果如下表所示,请问不同学科不同性别的人意见是否相同。 学科 男生 女生 工科 80 40 理科 120 160 (性别,学科均无序分类>卡方检验&am…

grpc学习golang版( 二、入门示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、环境二、编写protobuf文件三、编写server服务端四、编写Clie…

前端路由管理

前端路由管理简介: 当谈到前端路由管理时,通常指的是在单页面应用程序(SPA)中管理页面间导航和URL的过程。路由管理器是一个工具,可以帮助前端开发者定义应用程序的不同视图之间的关系,同时能够响应URL的改…

深入理解SQL中的LEFT JOIN操作

深入理解SQL中的LEFT JOIN操作 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 什么是LEFT JOIN? 在SQL中,JOIN操作用于合并两个或多个…

Uboot重定位

Uboot重定位 一、重定位的意义二、介绍一些重定位相关的表项结构(节)三、uboot的重定位过程:一、重定位的意义 uboot的重定位有两次,第一次是在编译成镜像后,在makefile中调用进行处理的,其调用tools/riscv_prelink.c的代码进行重定位处理(主要就是对重定位表中的R_RIS…

如何快速使用JNI

文章目录 1_JNI是什么?2_使用3_扩展 1_JNI是什么? JNI 是Java Native Interface的缩写,通过JNI,允许Java代码与其他语言(通常是C或C)编写的本地应用程序或库进行交互。简而言之就是,Java可以通…

Leetcode40 无重复组合之和

题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 思路分析 这个题是…

VUE的快速使用

使用步骤 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&…

二进制常用知识整理<java>

1、进制转换&#xff1a; int转二进制&#xff1a; public static void main(String[] args) {int a 0b100;//0b表示后面的为二进制表示&#xff0c;0开始表示八进制System.out.println(a);System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toStr…

ctfshow-web入门-命令执行(web56、web57、web58)

目录 1、web56 2、web57 3、web58 1、web56 命令执行&#xff0c;需要严格的过滤 新增过滤数字&#xff0c;只能采用上一题临时文件上传的方法&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…

技术周总结2024.06.17~06.23(Doris数据库)

文章目录 一、06.18 周二1.1&#xff09; 问题01&#xff1a; doris数据表写入使用 stream load好还是 inser into好 一、06.18 周二 1.1&#xff09; 问题01&#xff1a; doris数据表写入使用 stream load好还是 inser into好 对于Doris数据表的写入操作&#xff0c;通常推荐…

2024-6-29 石群电路-33

2024-6-29&#xff0c;星期六&#xff0c;17:23&#xff0c;天气&#xff1a;雨转多云&#xff0c;心情&#xff1a;晴。经历了两周的雨天&#xff0c;今天终于见点儿阳光啦&#xff0c;虽然有点热&#xff0c;但是心情更好了&#xff0c;上午去给用了三年的电脑做了清灰换硅脂…

【python - 数据】

一、序列 序列&#xff08;sequence&#xff09;是一组有顺序的值的集合&#xff0c;是计算机科学中的一个强大且基本的抽象概念。序列并不是特定内置类型或抽象数据表示的实例&#xff0c;而是一个包含不同类型数据间共享行为的集合。也就是说&#xff0c;序列有很多种类&…

影响数据库性能与稳定性的几个重要参数 --待补充

作者介绍&#xff1a;老虎刘,原oracle 研发部门 Real-World Performance TEAM 成员&#xff0c;现在售后部门SSC专职做数据库性能优化&#xff0c;主要为银行、通信、证券、制造等大型企业提供服务。 今天谈谈下面这几个参数对数据库性能和稳定性的影响&#xff1a; cursor_sh…

Ubuntu22.04 源码安装 PCL13+VTK-9.3+Qt6,踩坑记录

Ubuntu 22.04LTS;cmake-3.25.0;VTK-9.3;PCL-1.13;Qt6.6 PCL可以通过 apt 命令直接安装(sudo apt install libpcl-dev),apt 命令安装的 VTK 是简略版,没有对 Qt 支持的包,所以笔者使用源码安装 PCL 和 VTK。 1. 安装 VTK 1) 安装 ccmake 和 VTK 依赖项: sudo apt-g…