当前位置: 首页 > article >正文

postgresql14管理(六)-备份与恢复

定义

备份(backup):通过物理复制或逻辑导出的方式,将数据库的文件或结构和数据拷贝到其他位置进行存储;

还原(restore):是一种不完全的恢复。使用备份文件将数据库恢复到备份时的状态,该时间点之后的数据变更无法恢复;

恢复(recovery):先做还原,然后使用处于备份时间点至故障点产生的日志文件(WAL),将数据库恢复到最新状态;

分类

物理备份(Physical Backup):直接复制数据库相关的文件,一般情况,物理备份比逻辑备份快,占用的空间也更大。PostgreSQL支持在线、离线的物理备份,实际环境中应该以物理备份为主。

逻辑备份(Logical Backup):将数据库的结构和数据导出为sql文件,还原时通过文件中的SQL语句和命令重建数据库并恢复数据。逻辑备份通常需要更多的备份时间、还原时间。逻辑备份可以作为物理备份的补充,或者用于测试目的的数据导入导出。

方式

在线备份(Online Backup)、热备份(Hot Backup):pg处于启动状态时的备份;

离线备份(Offline Backup)、冷备份(Cold Backup):pg处于关闭状态时的备份;

方法

全量备份(Full Backup):一次备份所有,备份时间长,恢复时间短;
增量备份(Incremental Backup):备份与上一次改变的文件,备份时间短,恢复时间长;
差异备份(Differential Backup):针对第一次完全备份后发生变化的所有文件进行备份,备份、恢复时间居中;

在这里插入图片描述
pg通过一个基准备份(Base Backup),加上不断备份的事务日志文件(WAL),做到增量备份的效果。

工具

在这里插入图片描述

pg_dump:逻辑备份工具,支持单个数据库(可以指定模式、表)的导出,可以选择导出的格式;

pg_dumpall:逻辑备份工具,用于导出整个数据库集群,包括公用的全局对象;

pg_basebackup:物理备份工具,为数据库集群创建一个基准备份。或者设置基于日志传输或流复制的从节点的初始化;

psql:交互式命令行工具,也可以用于导入逻辑备份产生的 SQL 文件;

pg_restore:逻辑还原工具,用于还原 pg_dump 导出的归档格式的备份文件;

COPY:专有sql语句,将表中的数据复制到文件,或者将文件中的数据复制到表中;

第三方开源:pgAdmin、Barman、pg_probackup、pgBackRest

在这里插入图片描述

逻辑备份与恢复

#plain格式:转储一个可读的脚本
pg_dump -U postgres -d hrdb -f "D:\bak\hrdb.sql"
#导入
pgsql -U postgres newdb -f "D:\bak\hrdb.sql"

#-Fc 自定义格式,不可直接查看
pg_dump -U postgres -d hrdb -f "D:\bak\hrdb.dmp" -Fc
#恢复
pg_restore -U postgres -d hrdb "D:\bak\hrdb.dmp"

备份整个pg

#连接每个数据库都要输入密码,可用密码选项代替
pg_dumpall -U postgres -f "D:\bak\cluster.sql"
#复原
psql -f "D:\bak\cluster.sql" postgres

导出表数据

-- -a表示只导出数据(不包含结构),-t指定要导出的表,-T表示排除的表
pg_dump -a -t 'emp*' -T employees testdb > testdb_table
-- 导出时也可以指定其他的导出格式,并且采用相应的方式进行数据导入
#连接对应数据库
\c hrdb
#COPY支持不同的写入/读取文件格式:text、csv 或者 binary。默认是 text。
COPY employees TO "D:\bak\cluster.txt" (format csv, header true)
#改为csv格式,包含表头

#复制导出数据到新表
COPY newemployees FROM "D:\bak\cluster.txt" (format csv, header true)

备份大型数据库

#先转储再压缩
pg_dumpall | gzip > cluster.sql.gz
#先解压再导入
gunzip -c cluster.sql.gz | psql new
#分割导出文件为clusteraa、clusterab
pg_dumpall | split -b 1G - cluster
#恢复
cat cluster* | psql newdb
COPY products to PROGRAM 'gzip > /bak/products.dat.gz'
COPY products FROM PROGRAM 'gunzip < /bak/products.dat.gz'
#并发备份
pg_dump -j 8 -F d -f out.dir testdb
#还原
pg_restore -j 8 -d newdb testdb_dir

http://www.kler.cn/a/108731.html

相关文章:

  • 本地编译ChatNio的问题解决
  • 通用项目工程的过程视图概览
  • 基于表格滚动截屏(表格全部展开,没有滚动条)
  • 网络安全-Linux基础(bash脚本)
  • 【电力系统】永磁同步电机调速系统带有扰动观测器
  • Labelme标注数据的一些操作
  • MIT Kimera-VIO-ROS 安装
  • 一个阅读英文文档的记录与思考:
  • 【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割6(数据预处理)
  • 智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应
  • Unity Spine 指定导入新Spine动画的默认材质
  • 飞鼠异地组网工具基本使用教程
  • 第五章 I/O管理 二、I/O控制器
  • 大数据-Storm流式框架(八)---Storm案例
  • Docker 批量导入镜像
  • VTK OrientationMarker 方向 三维坐标系 相机坐标轴 自定义坐标轴
  • Monocular arbitrary moving object discovery and segmentation 论文阅读
  • IconWorkshop 6软件官方下载:制作ICO/ICON图标、编辑、转换图标
  • Web攻防06_sqlmap的使用
  • Java面试基础篇
  • 《C和指针》(6)指针
  • JAVA面试题简单整理
  • php使用lunar实现农历、阳历、节日等功能
  • SpringBoot小项目——简单的小区物业后台管理系统 认证鉴权 用户-角色模型 AOP切面日志 全局异常【源码】
  • 云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka
  • 【C++项目】高并发内存池第五讲内存回收释放过程介绍