号称史上最全的PostgreSQL备份恢复,送给有缘人...

📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,
备份恢复,安装迁移,性能优化、故障应急处理等。
📣📣📣

文章目录

    • 📣 1.备份恢复概述
    • 📣 2.逻辑方式
      • ✨ 2.1 pg_dump
      • ✨ 2.2 pg_dumpall
      • ✨ 2.3 COPY 与 \copy
    • 📣 3.物理方式
      • ✨ 3.1 冷备份
      • ✨ 3.2 pg_basebackup
      • ✨ 3.3 pg_rman
    • 📣 4.总结


PG的备份大致可以分为两类,逻辑备份和物理备份,各有优略,本文做了详细的说明

📣 1.备份恢复概述

备份大致可以分为两类:逻辑备份和物理备份。
虽然两者都有优点和缺点,但逻辑备份的一个缺点是它们可能非常耗时。
特别是,备份大型数据库可能需要很长时间,从备份数据恢复数据库可能需要更长的时间。
另一方面,可以更快地进行和恢复物理备份,使其成为实际系统中非常重要和有用的功能。

📣 2.逻辑方式

✨ 2.1 pg_dump

pg_dump 将表结构及数据以SQL语句的形式导出到文件中,
恢复数据时,将导出的文件作为输入,
执行其中的SQL语句,即可恢复数据。

pg_dump 能够对正在使用的PostgreSQL数据库进行备份,
并且不影响正常业务的读写。

pg_dump备份示例:
1 导出单表数据
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 –inserts > bak.sql
2 导出多个表数据
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 -t t2 –inserts > bak.sql
3 导出整个数据库
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db –inserts > bak.sql
4 只导出表结构,不导出数据
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -s > bak.sql
5 只导出数据,不导出表结构
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db –inserts -a > bak.sql
6.压缩导出
pg_dump --dbname=jmedb --format=custom --file=/pgbak/jmedb.dmp

pg_dump后如何恢复?
1.文本文件
drop database jmedb;
create database jmedb;
psql --file=jmedb.sql
psql --dbname=db2 --file=jmedb.sql

2.二进制文件
pg_restore --username=postgres
–host=192.168.1.54
–port=35432
–dbname=jmedb
/pgbak/jmedb.dmp

✨ 2.2 pg_dumpall

相对于pg_dump只能备份单个库,
pg_dumpall可以备份整个postgresql实例中所有的数据,
包括角色和表空间定义。

示例如下:
pg_dumpall -h 127.0.0.1
-U admin -p 5432
-W –inserts > bak.sql

1.pg_dump支持指定所要备份的对象:
可以单独备份表、schema或者database;
2.pg_dumpall仅支持导出全库数据。
3.pg_dump可以将数据备份为SQL文本文件格式,
也支持备份为用户自定义的压缩格式或者TAR包格式。

✨ 2.3 COPY 与 \copy

copy:适合单表或带条件sql结果导出
(可导出为csv或txt格式)

COPY 与 \copy
1.导出
COPY { table_name [ ( column_name [, …] ) ] | ( query ) }
TO { ‘filename’ | PROGRAM ‘command’ | STDOUT }
[ [ WITH ] ( option [, …] ) ]
2.导入
COPY table_name [ ( column_name [, …] ) ]
FROM { ‘filename’ | PROGRAM ‘command’ | STDIN }
[ [ WITH ] ( option [, …] ) ]
说明:
WITH csv:导入csv格式数据
HEADER:不导入第一行
encoding:指定编码

txt格式导出:
psql -ddb_name -Uuser_name -W
执行
COPY 表名 copy TO ‘/home/postgres/test.txt’
或者
\copy test_copy to ‘/home/postgres/test.txt’
导入txt文件
psql -ddb_name -Uuser_name -W
COPY 表名 copy FROM ‘/home/postgres/test.txt’
#或
\copy test_copy from ‘/home/postgres/test.txt’
备注:COPY是sql命令,
需要superuser权限,性能更好;
\copy是元命令,不需要superuser权限

导出csv文件
psql -ddb_name -Uuser_name -W
COPY products TO ‘/path/to/output.csv’ WITH csv;
导入csv文件
psql -ddb_name -Uuser_name -W
COPY products FROM ‘/path/to/input.csv’ WITH csv;
不导入第一行,指定编码为UTF-8
\copy tmp_3 FROM ‘/data/tmp_3.csv’ WITH csv HEADER encoding ‘UTF-8’;

可以导出指定的列
psql -ddb_name -Uuser_name -W
COPY products (name, price) TO ‘/path/to/output.csv’ WITH csv;
也可以配合查询语句
psql -dplatform -Ubom_rw -W
COPY (select * from temp_0524 where id=‘xxx’) TO ‘home/postgres/temp_0524.csv’ with csv header

📣 3.物理方式

✨ 3.1 冷备份

• 直接拷贝PostgreSQL 中用来存储数据的文件。
• 你可以用任何方式来进行通常的系统文件备份,比如:
– tar -cf backup.tar /usr/local/pgsql/data
• 为了得到一个可用的备份,数据库服务器必须关闭。
• 文件系统级别的备份只为完全备份,并且恢复整个数据集合实例。

✨ 3.2 pg_basebackup

pg_basebackup 则是一个用于制作数据库集群物理备份的工具,
它会生成一个完整的数据库集群副本,
包括所有数据文件、WAL 文件和其他必要文件。
这种备份方式更利于快速恢复,并支持流复制初始化从库。

基于事务的恢复案例:
插入3000条记录,但是,只找回其中的2000条
--全备任务
pg_basebackup -Fp -P -v -D pgdata_bak
--发起插入的数据
postgres=$ create table test(id int,info text);
postgres=$ begin;
postgres=$ select txid_current();txid_current 
--------------839
postgres=$ insert into test select n,'test' from generate_series(1,2000) as n;
postgres=$ commit;
--再次插入数据
postgres=$ begin;
postgres=$ select txid_current();txid_current 
--------------840
postgres=$ insert into test select n,'test' from generate_series(1,1000) as n;
postgres=# commit;--删除数据切日志
postgres=# delete from test;
postgres=# select pg_switch_wal();pg_switch_wal 
---------------
0/1007E250--编辑恢复的文件
[postgres@centos79 ~]$ vi pgdata_bak/postgresql.confrestore_command = 'cp /home/postgres/archive_dir/%f %p'
recovery_target_xid = '839'
port=5558--生成文件
touch pgdata_bak/recovery.signal--启动备份实例
[postgres@centos79 ~]$ pg_ctl -D pgdata_bak start

基于时间点的恢复案例
# Place archive logs under /mnt/server/archivedir directory.
restore_command = 'cp /mnt/server/archivedir/%f %p'
recovery_target_time = "2024-1-1 12:05 GMT"$ touch /usr/local/pgsql/data/recovery.signal
全备脚本:pg_basebackup.sh
#!/bin/bash
#auth:cuckooDATE=$(date '+%Y%m%d')
sevendays_time=$(date -d -7days '+%Y%m%d')
pgpath=/opt/pgsql/bin/
port=15432
pguser=postgres
bkpath=/u01/pg_backup/basebackup
bktmp=$bkpath/backups-tmp#START BACKUP
echo "START BACKUP..............."
rm -rf $bkpath/base_$sevendays_time.tar.gz                  
$pgpath/pg_basebackup -Ft -Pv -Xf -z -Z5 -p $port -U $pguser -D $bktmp
mv $bktmp/base.tar.gz $bkpath/base_$DATE.tar.gz
$pgpath/psql -p $port -U $pguser -c "select pg_switch_wal()"
echo "BACKUP  END"

✨ 3.3 pg_rman

pg_rman是一个开源的PG备份软件,第三方,
本质是一个文件的拷贝,必须和Server安装在一起
支持基于时间的恢复,支持在线的全备和增备
同时还可以支持WAL的备份过期删除

如何备份?
–初始化,创建一个目录,用于存放备份
pg_rman init -B /rmanbk
全备脚本
pg_rman backup --backup-mode=full -B /rmanbk
pg_rman validate -B /rmanbk
增备脚本
jem_db=# select * from test1;
pg_rman backup --backup-mode=incremental -B /rmanbk

–如何恢复呢?
pg_ctl stop
pg_rman restore -B /rmanbk
pg_ctl start

📣 4.总结

通过备份和恢复来保护数据,避免数据丢失,在发生灾难或人为误操作的情况下,能够进行恢复是DBA的日常最重要的工作。不仅要保证能够成功备份,还要保证备份数据能够恢复

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

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

相关文章

ftp在linux部署及其安装

安装ftp服务 yum install -y vsftpd 查看一下是否安装成功 rpm -qa |grep ‘vsftpd’ ftp的配置文件主要有三个,位于/etc/vsftpd/目录下,分别是: ftpusers:用来指定哪些用户不能访问ftp服务器 user_list::这个文…

java的Math类,System类,Runtime类和BigDemical类常用的API

Math类: 代表数学,是一个工具类; public static int abs(int a) Returns the absolute value of an int value. If the argument is not negative, the argument is returned. If the argument is negative, the negation of the argument i…

​慧天[HTWATER]可以与与SWMM模型之间实现转换吗?

​慧天[HTWATER]软件简介 针对城市排水系统基础设施数据管理的需求,以及水文、水力及水质模拟对数据的需求,实现了以数据库方式对相应数据的存储。可以对分流制排水系统及合流制排水系统进行地表水文、管网水力、水质过程的模拟计算。可以对城市低影响开…

SwiftUI Swift 显示隐藏系统顶部状态栏

Show me the code // // TestHideSystemTopBar.swift // pandabill // // Created by 朱洪苇 on 2024/4/1. //import SwiftUIstruct TestHideSystemTopBar: View {State private var isStatusBarHidden falsevar body: some View {Button {withAnimation {self.isStatusBa…

有单片机基础,准备过一遍freertos,之后再学linux

应届生我觉得继续把单片机深入一下比较好。 站在公司的角度思考一下,个人觉得应该有以下结论: 1 大公司具备技术资金等优势,因此喜欢学历好,理论扎实能够攻坚的人。倾向于培养各个领域的专家,共同构建自己产品的竞争…

strormpot对象池

设计思想 Stormpot 是一个用 Java 编写的高性能对象池库,设计思想侧重于提供高吞吐量和低延迟的对象分配,同时保证线程安全和轻量级。其核心思想是通过一个高效的对象池来管理对象的生命周期,确保对象的重用,并减少垃圾收集器的压…

金三银四求职季,最新面试题分享和解析,建议收藏

随着金三银四招聘旺季的到来,在这个竞争激烈的时刻,了解最新的软件测试面试题,充分准备面试,对求职者来说显得尤为重要。本文将分享一些金三银四期间最新的软件测试面试题,帮助求职者更好地应对面试挑战。 一.登录页面…

企业如何通过AARRR模型完成快速扩张?

在竞争激烈的市场环境中,企业要想实现持续的用户增长,就需要采用一套有效的策略和模型。AARRR模型→(【1日1词】AARRR用户增长模型--互联网运营经典模型)是一个帮助企业实现用户增长的有效方法。下面将详细阐述企业在营销运营过程…

OpenHarmony实战开发-如何通过Stage模型实现一个简单的游戏卡片

介绍 本示例展示了如何通过Stage模型实现一个简单的游戏卡片。 通过卡片支持的点击事件进行交互,让用户通过点击的先后顺序把一个乱序的成语排列成正确的成语。使用了C和TS的混合编程方式,将获取随机数的能力下沉到C实现,并通过NAPI的能力将…

Adaboost集成学习 | Matlab实现基于GRU-Adaboost门控循环单元结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于GRU-Adaboost门控循环单元结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 股票价格预测是一个具有挑战性的时间序列预测问题,可以使用深度学习模型如门控循环…

常用运动模型

运动模型 常用运动模型: CV、CA、CTRV、CTRV、CTRA、CSAV和CCA/CSAA模型微分多项式模型辛格模型半马尔科夫模型机动目标"当前模型"二维转弯运动模型三维模型比列导引模型 恒定速度模型(Constant Velocity, CV) 恒定加速度模型(C…

websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

基本介绍 WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和&am…

CSS3 高级- 复杂选择器、内容生成、变形(transform)、过渡(transition)、动画(animation)

文章目录 一、复杂选择器兄弟选择器:选择平级元素的唯一办法属性选择器:1、通用:基本用不着,太泛了2、自定义:4种伪类选择器:1、目标伪类:2、结构伪类:3、元素状态伪类:4、伪元素选择器:应用于文字,使网页看起来想杂志5、否定伪类:选择器:not([本选择器的条件]) /*…

【算法刷题day14】Leetcode:144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历

文章目录 二叉树递归遍历解题思路代码总结 二叉树的迭代遍历解题思路代码总结 二叉树的统一迭代法解题思路代码总结 草稿图网站 java的Deque 二叉树递归遍历 题目: 144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历 解析:代码随想录解析…

Vue3学习和进阶

Vue的简介 一、什么是vue? Vue是一款用于构建用户界面的javascript框架。它基于标准的HTML、CSS、JS进行构建,并且提供的一套声明式的,组件化的编程模型,进而帮助我们高效开发用户界面。无论是复杂还是简单的界面,我们都可以用…

mongodb的简单操作

文章目录 前言数据库的创建和删除集合的创建和删除文档的插入和查询异常处理更新数据局部修改符合条件的批量更新加操作 删除文档删除全部数据删除符合条件的数据 统计count统计有多少条数据统计特定条件有多少条数据 分页查询排序查询正则查询比较查询包含查询条件连接查询索引…

【文件操作API的使用】

1.概念 这对聪明的你们来说简直就是,对吗。 那什么是文件操作符,文件操作又有哪些步骤呢? 文件操作符通常用于指代在计算机编程中用于处理文件的特殊符号或标识符。在很多编程语言中,文件操作符被用于打开、关闭、读取和写入文件…

香港科技大学广州|数据科学与分析学域硕博招生宣讲会—天津大学专场

时间:2024年4月12日(星期五)14:00 地点:天津大学北洋园校区55楼B204 报名链接:https://www.wjx.top/vm/Q0cKTUI.aspx# 跨学科研究领域 *数据驱动的人工智能和机器学习 *统计学习和建模 工业和商业分析 *特定行业的数…

两阶段提交-mysql

二阶段提交的 prepare 阶段,InnoDB 主要做五件事。 第 1 件,把分配给事务的所有 undo 段的状态从 TRX_UNDO_ACTIVE 修改为 TRX_UNDO_PREPARED。 进入二阶段提交的事务,都至少改变过(插入、更新、删除)一个用户表的一…

工艺品wordpress外贸主题

工艺品wordpress外贸主题 简约大气的wordpress外贸主题,适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377