postgresql 备份恢复相关知识点整理归纳 —— 筑梦之路

概述

PG一般有两种备份方式:逻辑备份和物理备份

逻辑备份对于数据量大的场景下耗时较长,恢复也会耗时较长

物理备份拷贝文件的方式相对来说耗时较短,跟磁盘读写性能和网络传输性能有关

逻辑备份

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

 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包格式。

 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

 物理备份

冷备份

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

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"

 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

 

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

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

相关文章

传感器展会现场直击!道合顺传感邀您共鉴气体传感器前沿技术

4月14日,#深圳国际传感器#与应用技术展览会在深圳会展中心(福田)如期举办。道合顺传感亮相本届大会并展示了对气体传感器的探索和最新研究成果,获得了传感器业内的广泛关注。 多年来,道合顺传感依托于雄厚的研发实力&a…

有了一站式知识库服务平台,再也不用担心工作效率了!

你是否记得无数次在海量文件和邮件里搜索资料的烦恼?又或者是在急需某个信息时,却发现它埋藏在某个早已遗忘的文件夹深处?如果你的答案是肯定的,那么一站式知识库服务平台的出现,无疑是你提高工作效率的得力助手。 知识…

Android IPC机制

在Android系统中,IPC(Inter-Process Communication,进程间通讯)是指在不同进程之间传送数据和通讯的机制。Android中的应用通常运行在独立的沙箱环境中的进程里,由于安全限制,这些进程无法直接访问彼此的内…

arxiv文章导出的bibtex格式是misc导致latex引用不正确

问题 在arxiv官网上右下角导出bibtex,发现是misc格式,然后我用的是springer的期刊latex模板,发现引用不正确。 引用效果如下,就只有一个2024。 解决方案: 把上面那个bibtex手动改成下面这个。 article{liu2024in…

2024最新 PyCharm 2024.1 更新亮点看这篇就够了

2024最新 PyCharm 2024.1 更新亮点看这篇就够了 文章目录 2024最新 PyCharm 2024.1 更新亮点看这篇就够了🚀 PyCharm 2024.1 发布:全面升级,助力高效编程!摘要引言 🚀 快速掌握 Hugging Face:模型与数据集文…

Python leetcode 2844 生成特殊字的最少操作,力扣练习,贪心解法代码实践

今天又来练习力扣了,又是向大佬学习的一天,leetcode 2844 生成特殊字的最少操作 1.题目 给你一个下标从 0 开始的字符串 num ,表示一个非负整数。 在一次操作中,您可以选择 num 的任意一位数字并将其删除。请注意,如果…

顶切,半顶切是什么意思?

齿轮加工及刀具中有一些特定名词或者叫法,不熟悉的小伙伴可能最开始会有一些困惑,这不,最近有小伙伴问了一个问题:顶切是说齿顶的倒角吗? 今天就给大家说说顶切和半顶切。 一、顶切 Topping 从字面上可以看到可以想到…

Python学习笔记20 - 模块

什么叫模块 自定义模块 Python中的包 Python中常用的内置模块 第三方模块的安装与使用

Python7种运算符及运算符优先级

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 零基础学Python 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python视频教程以及Python相关电子书合集 私信未回可以加V:hacker0327 备注零基础学Python 订阅专…

CloudFlare R2 搭建个人图床教程

为什么搭建自己的图床 平时写博客都是使用 md 格式,要在多个平台发布时,图片需要有外链后续如果博客迁移时,国内的博客网站,比如掘金,简书,语雀等都做了防盗链,图片不好迁移 为什么是CloudFla…

AIX7.2上安装mysql-8.0.17

一、安装 提示:不要采用源码编译方式,根本编译不过去,各种bug,需要针对AIX系统添加各种patch才可以,因此最简单的方式就是直接使用已经编译好的rpm包,如果没有rpm直接放弃就可以了。 1.1. 下载软件依赖包…

一文学会 Jsonp (JSON_with_Padding) 跨域请求

文章目录 流程缺点名称由来demoJSONP安全性问题CSRF攻击5XSS漏洞服务器被黑,返回一串恶意执行的代码 封装工具函数真实案例:获取淘宝搜索关键字推荐 流程 script 标签 src 属性发起的请求不受同源策略的限制,并且 script 标签默认类型是text…

Leetcode刷题(位运算)

一、 476. 数字的补数 根据题意写即可 代码 class Solution:def findComplement(self, num: int) -> int:l list(bin(num)[2:])for i in range(len(l)):if l[i]0:l[i]1else:l[i]0return int("0b""".join(l),2)位运算 class Solution:def findComple…

Android Surface的跨进程绘制,如何绘制xml布局给Surface,全网独一份

工作中遇到了这样一个需求 需求:需要将一个自定义View或者自定义布局通过跨进程方式传递给第二个应用来展示,第一个应用负责布局的渲染,第二个应用不需要关心第一个应用的业务和实现,仅提供SurfaceView占位及展示 方案&#xff…

AliyunCTF 2024 - BadApple

文章目录 前言环境搭建漏洞分析漏洞利用参考 前言 本文首发于看雪论坛 https://bbs.kanxue.com/thread-281291.htm 依稀记得那晚被阿里CTF支配的恐惧,今年的阿里CTF笔者就做了一道签到PWN题,当时也是下定决心要学习 jsc pwn 然后复现这道 BadApple 题目…

30元腾讯云服务器搭建幻兽帕鲁Palworld多人联机游戏,畅玩

幻兽帕鲁太火了,官方palworld服务器不稳定?不如自建服务器,基于腾讯云幻兽帕鲁服务器成本32元全自动部署幻兽帕鲁服务器,超简单有手就行,全程自动化一键部署10秒钟即可搞定,无需玩家手动部署幻兽帕鲁游戏程…

Python基础整理(一万三千字)(一)

目录 一、Python解释器 解释器的作用: 下载Python解释器: 安装Python解释器: 二、注释 三、变量 定义变量: 标识符: 命名习惯: 变量使用: 变量的数据类型: 四、输出 格式化输出 …

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(二十六): 聚酰亚胺PI材料为什么难于粘接

聚酰亚胺PI材料为什么难于粘接 聚酰亚胺(PI)材料难以粘接主要是由于其特殊的化学结构和物理性质: 化学稳定性:聚酰亚胺PI材料具有出色的化学稳定性,这使其对大多数化学溶剂和酸碱溶液都表现出良好的抵抗性,…

23电赛D题 CORDIC算法实践——Chisel计算对数函数

一、介绍 在本专栏之前的文章中:用Chisel快速搭建FFT流水线电路Chisel实践 —— 短时傅里叶变换模块的实现与测试 已经介绍到了如何使用Chisel开发FFT运算模块和STFT模块,此篇文章将详细介绍如何使用Chisel进行对数运算模块的开发。 如何使用硬件语言实现对数运算&…

得帆用户有福了!全新社区论坛携手AI助手华丽上线,积分好礼等你拿!

盼望着,盼望着,春天的脚步近了,得帆云社区迎来全新升级,社区论坛携手AI知识库助手上线了! 得帆云官方社区论坛: https://edu.definesys.cn/community/community-forum 您也可以点击本文末尾左下方“阅读…