号称史上最全的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.conf

restore_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:cuckoo

DATE=$(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的日常最重要的工作。不仅要保证能够成功备份,还要保证备份数据能够恢复

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

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

相关文章

开抖店内行人都不说的秘密:这几个细节新手必犯!干货建议收藏!

哈喽~我是电商月月 开抖音小店必交的钱就是店铺的保证金 虽说店铺保证金最后店铺不开了,保证金还能退回 但只有开始运作时才知道,中间扣除你保证金的点有很多,要想继续开抖音小店,就得把扣的保证金补齐才能继续运行 但新手开店…

PostgreSql 01 安装,创建用户,创建数据库,创建关系

01.安装postgresql postgreSql 是在linux上 去官网找按照的方式 选择好postgreSql 的版本,已经Linux的发行版本 拿到命令,直接扔到Linux中运行即可 # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpm…

《web应用技术》第一次课后练习

上机任务(利用好chatgpt,文心一言等工具。): 1、下载软件,并安装。相关安装文件已上传至群文件。 JDK,TOMCAT,IDEA 2、学会用记事本编写jsp文件,并放进tomcat的相关目录下,运行。 …

vSAN vs SmartX 超融合:BI 数仓跑批效率对比测试

在《VMware 与 SmartX 分布式存储缓存机制浅析与性能对比》中,我们分析了 vSAN 7 缓存击穿的问题及其原因。近期,某金融用户在进行数据仓库分布式存储选型时,同样遭遇了测试过程中 vSAN 出现缓存击穿而难以完成全量跑批任务的问题。随后&…

时序数据库IoTDB:功能详解与行业应用

一文读懂时序数据库 IoTDB。 01 为什么需要时序数据库 解释时序数据库前,先了解一下何谓时序数据。 时序数据,也称为时间序列数据,是指按时间顺序记录的同一统计指标的数据集合。这类数据的来源主要是能源、工程、交通等工业物联网强关联行业…

【算法】二分查找(红绿灯法)

引言 该方法来自b站算法大师兄,可用作通用模版处理二分查找问题,不用特意考虑边界临界值等情况。 方法描述 红色节点是小于target,绿色节点是大于等于target。 我们首先定义两个下标代表左和右,分别为-1和n。然后用红箭头和绿箭…

如何在Linux系统运行RStudio Server并实现无公网IP远程访问【内网穿透】

文章目录 推荐 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

干货必读: 测试开发既然都这么厉害了!为啥不直接转业务开发?

前段时间,在后台收到一则留言:“请问一下,你觉得开发技术好,还是测试技术好,如果测试技术好,为什么不直接开发,干嘛做测试?” 这是一则很有意思且大多数技术新人普遍存在的困惑&…

kubernetes-dashboard 安装配置

k8s 1.23以上的版本 https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 执行命令: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 安装完成后&#x…

[问题记录] oracle问题汇总记录

plsql问题 1、oracle-initialization error could not locate OCI.dll 下载plsql客户端后,登录显示如图所示的错误 解决方法,点击下方链接,下载64位客户端 Instant Client for Microsoft Windows (x64) 64-bit (oracle.com) 2、显示中文乱…

百度语音识别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、建号—获取试用KEY二、测试代码三、运行四、运行结果五、验证五、总结 一、建号—获取试用KEY https://console.bce.baidu.com/ai/#/ai/speech/overview/index…

【Spring】SpringBoot整合MybatisPlus的基本应用

📝个人主页:哈__ 期待您的关注 一、MybatisPlus简介 先来看一下官方的简介吧。 MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。Myb…

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

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

基于LSB(最低有效位)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

学习使用echats因xAxis值过多,可以滚动的柱状图解决方案

学习使用echats因xAxis值过多,可以滚动的柱状图解决方案 效果图柱状图代码关键代码 效果图 柱状图代码 function echarts() {// 基于准备好的dom,初始化echarts实例var myChart echarts.init(document.getElementById(echart4));let xaxisData [1, 2,…

数据库 06-01 事务

01.定义 02.性质 03.简单事务模型 例子:

数据采集工具如何使用呢?那么设置数据采集的方法又是什么呢?

数据采集工具将能够非常有效地解决面临的各种问题。这款工具被设计成一种自动化数据采集工具,特别适用于对日志文件数据的采集。一旦完成设置,该工具将在后台实时进行数据采集,并自动对收集到的数据进行清洗,以确保最终保存到的数…

zIO: Accelerating IO-Intensive Applications with Transparent Zero-Copy IO——论文泛读

OSDI 2022 Paper 论文阅读笔记整理 问题 零拷贝IO一直是一个长期的性能目标。复制会引入内存和CPU开销,限制IO密集型应用程序的性能。IO数据复制在IO堆栈内、通过其应用程序编程接口(API)和应用程序内执行。现有工作的重点是开发零拷贝IO A…

紫光展锐P7885核心板详细参数介绍_5G安卓智能模块开发方案

紫光展锐P7885核心板采用了先进的6nm EUV制程工艺,集成了高性能的应用处理器和金融级安全解决方案,为用户带来了全新的性能体验。 P7885核心板搭载了先进的6nm制程工艺SoC P7885,其中包含四核A76和四核A55,主频可达2.7Ghz&#xf…

MySQL-linux安装-万能RPM法

一、MySQL的Linux版安装 1、 CentOS7下检查MySQL依赖 1. 检查/tmp临时目录权限(必不可少) 由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。执行 : chmod -R 777 /tmp2. …