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

news2024/11/26 18:29:48

📣📣📣
哈喽!大家好,我是【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的日常最重要的工作。不仅要保证能够成功备份,还要保证备份数据能够恢复

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

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

相关文章

【Linux】ubuntu安装google gtest框架

本文首发于 ❄️慕雪的寒舍 ubuntu 22.04.03 LTS 安装 google gtest 框架 1.依赖项 首先在ubuntu中安装如下包 sudo apt install -y unzip g gcc cmake make automake2.下载软件包 进入google gtest的github页面,下载源码包 Releases google/googletest https…

使用 PDManer 对数据库表建模(建表语句生成,代码生成)

目录 前言 基本使用教程 新建项目 创建表 关系图 建表语句 生成代码 导入 前言 在软件开发中过程中,一般分为几个过程:需求分析、概要设计、详细设计、编码实现、软件测试和软件交付。 在概要设计和详细设计过程中,则需要对业务进…

Java学习11

目录 一.类变量和类方法: 1.类变量定义访问: 2.类变量的使用细节: 3.类方法: 4.静态main方法(public static void main(String [] args)): 二.代码块: 1.基本语法:…

Chatgpt掘金之旅—有爱AI商业实战篇|文案写作|(三)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、前言 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&…

搜索与图论——Prim算法求最小生成树

在最小生成树问题里&#xff0c;正边和负边都没问题 朴素版prim算法 时间复杂度O(n^2) 生成树&#xff1a;每一次选中的t点&#xff0c;它和集合的距离对应的那条边&#xff0c;就是生成树的一条边 算法流程和dijkstra算法非常相似 #include<iostream> #include<cs…

漏洞扫描神器:Netsparker 保姆级教程(附链接)

一、介绍 Netsparker是一款专业的网络安全扫描工具&#xff0c;用于自动化地发现和修复网站和Web应用程序中的安全漏洞。它提供了全面的安全测试&#xff0c;包括SQL注入、跨站脚本攻击、远程文件包含、命令注入等常见的安全漏洞。 Netsparker具有以下特点&#xff1a; 自动化…

kubeEdge安装初探

1.准备k8s集群 1. 准备一台机器用来部署单节点kubernetes,机器地址192.168.1.10 2. 使用kubekey安装1.27.0版本的kubernetes&#xff1a; apt install conntrack socat export KKZONEcn kk create cluster --with-kubernetesv1.27.0 --container-managercontainerd 2. 安装…

Maplesoft Maple 2024(数学科学计算)mac/win

Maplesoft Maple是一款强大的数学计算软件&#xff0c;提供了丰富的功能和工具&#xff0c;用于数学建模、符号计算、数据可视化等领域的数学分析和解决方案。 Mac版软件下载&#xff1a;Maplesoft Maple 2024 for mac激活版 WIn版软件下载&#xff1a;Maplesoft Maple 2024特别…

C语言第三十八弹---编译和链接

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 编译和链接 1、翻译环境和运行环境 2、翻译环境 2.1、预处理&#xff08;预编译&#xff09; 2.2、编译 2.2.1、词法分析 2.2.2、语法分析 2.2.3、语义分…

回溯算法|78.子集

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex) {result.push_back(path); // 收集子集&#xff0c;要放在终止添加的上面&#xff0c;否则会漏掉自…

Mysql 常用SQL语句

1、查看mysql中所有的数据库&#xff0c; show databases; 2、创建库 create database 库名;&#xff08;也可以用 create database if not exists 库名; 表示如果库不存在再创建&#xff09; 例&#xff1a;create database if not exists ecology; 3、删除库 …

Visual Studio安装遇到的问题

因为在安装pytorch3d0.3.0时遇到问题&#xff0c;提示没有cl.exe&#xff0c;VS的C编译组件&#xff0c;查了下2019版比2022问题少&#xff0c;下载安装时遇到的问题记录&#xff1a; 查看搜素栏搜时间&#xff0c;查看系统日志&#xff0c;报错为&#xff1a; 创建 TLS 客户端…

农业信息管理(源码+文档)

农业信息管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明功能项目截图客户端首页我的今日动态动态详情登录修改资料今日价格今日报价注册页 后端管理文章管理用户管理分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库…

从智能驾驶全技术供应链看智能驾驶“灵魂”

从智能驾驶全技术供应链看智能驾驶“灵魂” 附赠自动驾驶学习资料和量产经验&#xff1a;链接 智能驾驶主机厂与技术供应链的灵魂之争伴随着智能驾驶技术兴起而来&#xff0c;也伴随着技术供应链的繁荣虽然嘴上很少提起但是行动却很雷厉&#xff0c;首先是扛起民族大旗的华为…

全网营销:提升知名度与市场份额的有效策略

一、什么是全网整合营销&#xff1f; 是指整合产品规划、产品开发、网站建设、网上商店运营、品牌推广、产品分销等一系列电子商务内容的新营销模式&#xff0c;是传统网络、移动互联网、个人电脑互联网的整合。根据目前的观点&#xff0c;是个人电脑移动集成、在线和离线集成…

vue2 列表一般不使用索引删除的原因

在 Vue 中使用索引来删除列表项可能会导致一系列问题&#xff0c;尤其是在处理动态列表时。以下是一些可能的问题和相应的例子&#xff1a; 1. 数据不一致问题 当你使用索引来删除列表中的某个项时&#xff0c;如果列表中的其他项发生了变化&#xff08;比如新增或重新排序&a…

SSM框架学习——Spring事务管理

Spring事务管理 概念 事务&#xff08;Transaction&#xff09;是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行&#xff0c;要么都不执行&#xff0c;是一个不可分割的工作单元。 事务有如下特性&#xff1a; 原子性隔离性一致性持久性 …

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

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

全流程基于GIS、python机器学习技术的地质灾害风险评价与信息化建库实践应用

将结合项目实践案例和科研论文成果进行讲解。入门篇&#xff0c;ArcGIS软件的快速入门与GIS数据源的获取与理解&#xff1b;方法篇&#xff0c;致灾因子提取方法、灾害危险性因子分析指标体系的建立方法和灾害危险性评价模型构建方法&#xff1b;拓展篇&#xff0c;GIS在灾害重…

基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作教程

原文链接&#xff1a;基于“遥感”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599633&idx5&sn1398cde523f9c5e036e4d478fc1d3388&chksmfa8207f6cdf58ee0a3a2bf652e7ac5cf65636b05f9e…