首页 > 数据库 >240730-PostgreSQL的逻辑备份与物理备份

240730-PostgreSQL的逻辑备份与物理备份

时间:2024-08-11 15:21:00浏览次数:13  
标签:逻辑 PostgreSQL 备份 240730 数据 数据库 物理

PostgreSQL的逻辑备份与物理备份

简介

制定备份和恢复计划是每一个DBA最重要的工作之一,它决定了数据的有效性和完整性。也可以搭建跨越不同数据中心的流复制集群,能有效的帮助你避免单点故障。但是只有一份有效的备份能够帮助从delete或者drop的误操中恢复数据。

制定备份和恢复计划是每一个DBA最重要的工作之一,它决定了数据的有效性和完整性。也可以搭建跨越不同数据中心的流复制集群,能有效的帮助你避免单点故障。但是只有一份有效的备份能够帮助从delete或者drop的误操中恢复数据。
这篇文章中,我们将讨论PostgreSQL的一些备份选项。

备份类型

主要有两种备份类型:物理备份和逻辑备份。在设计备份策略之前,理解这一点非常重要。使用何种备份类型,也取决于你使用的备份工具。

逻辑备份

  • 定义:逻辑备份是指使用软件技术从数据库中导出数据并写入一个输出文件,该文件的格式一般与原数据库的文件格式不同,只是原数据库中数据内容的一个映像。因此,逻辑备份文件只能用来对数据库进行逻辑恢复,即数据导入。
  • 原理:逻辑备份是基于文件级别的备份,由于每个文件都是由不同的逻辑块组成,且这些逻辑块可能存储在分散的磁盘块上,逻辑备份在对非连续存储磁盘上的文件进行备份时需要额外的查找操作。这些额外的操作增加了磁盘的开销,降低了磁盘的吞吐率。

逻辑备份通常包含以纯文本、可读格式存储的数据,或者可以轻松转换为这种格式,甚至可以提取单行数据并还原它。
恢复整个逻辑备份可能非常慢——数据库必须处理加载数据所需的所有查询,这总是比复制数据库文件要慢。

物理备份

  • 定义:物理备份是通过直接复制数据库文件的方式来创建备份。在物理备份中,数据库的原始二进制数据和结构都会包含在备份中,备份的文件通常是一个完整的数据库镜像。
  • 原理:物理备份是在文件系统之下和硬件磁盘驱动之上进行的。它忽略了文件和结构,处理过程简洁,因此在执行过程中所花费在搜索操作上的开销较少,备份的性能很高。

物理备份按原样获取数据——最终,数据只是存储在某个磁盘上的一堆文件。你可以复制数据文件,并在给定的时间点拥有数据库的副本。然而在实际使用中,它并不像运行cp命令那么容易。在进行物理备份时可能会发生数据库更改。为了确保备份可以安全使用,任何物理备份都必须是一致的。

物理备份对于恢复整个数据集非常有用——速度受到硬件的限制:磁盘和网络(如果通过网络复制数据)。

PostgreSQL的数据备份

像其他数据库一样,PostgreSQL支持逻辑备份和物理备份。

逻辑备份

PostgreSQL附带了一个名为pg_dump的程序——它是一个用于在PostgreSQL数据库上执行逻辑备份的实用工具。
它支持几种输出格式:默认情况下,它将数据存储在纯文本文件中,但它也可以生成tar文件或定制的二进制格式(经过压缩),可以使用pg_restore还原这些格式(您可以轻松地从这种格式中提取SQL内容)。让我们看看如何使用pg_dump来创建PostgreSQL服务器的备份。

首先使用默认模式,备份一个文本文件

root@vagrant-ubuntu-trusty-64:~/c# pg_dump -d pgbench -U psql -h 10.0.0.101 > pgbench.sql
Password:

在备份的文件中,你能看到类似这样:

COPY pgbench_accounts (aid, bid, abalance, filler) FROM stdin;
1       1       0
2       1       0
3       1       0
4       1       0
5       1       0
6       1       0
7       1       0
8       1       0
9       1       0
10      1       0
11      1       0
12      1       0
13      1       0
14      1       0

如果要其他格式的备份文件,只需要在命令中指定:

root@vagrant-ubuntu-trusty-64:~# pg_dump -d pgbench -U psql -h 10.0.0.101 --format c  -f /root/c/pgdump.c
Password:

恢复数据也很简单。如果是默认SQL格式的数据,只需使用psql将其加载到数据库中。
如果使用其他格式,可以使用pg_restore进行恢复。
如果您仍然拥有旧数据,并且希望恢复整个数据库,则可能需要删除现有数据库,然后重新创建它。

-c, --clean                  clean (drop) database objects before recreating
--if-exists                  use IF EXISTS when dropping objects

备份时加上这两个参数,能够确保所有已经存在的对象都会被重写。

postgres=# drop database pgbench;
DROP DATABASE
postgres=# create database pgbench;
CREATE DATABASE
root@vagrant-ubuntu-trusty-64:~# pg_restore --format c /root/c/pgdump.c -d pgbench -U psql -W -h 10.0.0.101
Password:

物理备份

物理备份是全有或全无的——你获取数据库的完整备份,并且需要还原所有备份。物理备份面临的最主要问题是数据一致性。当然,最简单的方法是完全停掉数据库,然后使用系统命令例如cp,scp等复制一份数据。但不幸的是,大多数情况下我们无法关闭数据来做这件事。

因此,你需要采取一些预防措施来确保备份是一致的。
要进行手动、一致的物理备份,需要以下步骤:

  • 在备份开始创建一个检查点pg_start_backup(‘some label’)
  • 拷贝目录中的数据
  • 使用命令pg_stop_backup()停止备份
  • 所有这些可以通过运行pg_basebackup实现
root@vagrant-ubuntu-trusty-64:~# pg_basebackup -U psql -h 10.0.0.101 -x -D /pgbase/

如果想要即时恢复,你需要配置WAL开启归档

wal_level = archive
archive_mode = on

恢复基本备份很容易——将数据复制到空的PostgreSQL数据目录中就可以了,一旦启动PostgreSQL进程,就可以恢复到备份时的数据。

如果要使用WAL归档日志恢复到一个时间点,你仍然需要先进行基数数据的恢复,同时创建一个recovery.conf文件。使用恢复命令,告诉PostgreSQL如何将存档的WAL段复制回来,以便在PostgreSQL进程开始时重新执行。

区别点分析

  1. 高效性
    • 物理备份:备份性能高,因为它避免了当文件出现小的改动时就需要对整个文件做备份的问题,只是会去做改动部分的备份。
    • 逻辑备份:备份性能较差,因为即使文件只有很小的改变,也需要将整个文件备份。
  2. 实时性
    • 物理备份:可以做到高效的实时备份,因为它基于磁盘扇区进行数据的写入和备份,能够被迅速识别。
    • 逻辑备份:实时备份的效率较低,因为文件的修改很难实时捕获,需要把整个文件读一遍再发到备机。
  3. 支持度
    • 物理备份:不受文件系统限制,可以支持各种文件系统包括RAW分区。
    • 逻辑备份:具有很高的灵活性和兼容性,不依赖于特定的数据库引擎版本和硬件平台,通常可以跨平台使用。
  4. 恢复方式
    • 物理备份:可以恢复到与原数据库一样的状态,适合用于系统恢复和整个数据库的迁移。
    • 逻辑备份:通常用于数据导入和逻辑恢复,可以重新组织表、消除行迁移、在用户或数据库之间移动对象等。
  5. 存储需求
    • 物理备份:文件大小通常较大,对存储资源要求较高。
    • 逻辑备份:以文本文件或自定义的数据文件形式存在,存储需求相对较小。

结论

逻辑备份和物理备份各有其特点和适用场景。在选择备份方式时,需要根据实际情况和需求进行评估和选择。对于需要快速恢复、对存储空间要求不高的场景,物理备份是更好的选择;而对于需要跨平台使用、对数据迁移有需求的场景,逻辑备份则更具优势。

标签:逻辑,PostgreSQL,备份,240730,数据,数据库,物理
From: https://www.cnblogs.com/zreo2home/p/18353413

相关文章

  • 文件级系统备份
    文件级系统备份另一种备份策略是直接复制PostgreSQL用于将数据存储在数据库中的文件;第19.2节说明了这些文件的位置。您可以使用自己喜欢的任何方法进行文件系统备份;例如tar-cfbackup.tar/usr/local/pgsql/data然而,有两个限制,使得此方法不切实际,或至少不如pg_dump方......
  • PostgreSQL的查询详解
    PostgreSQL的查询详解1.表表达式表表达式计算一个表。该表表达式包含一个FROM子句,该子句后面可以根据需要选用WHERE、GROUPBY和HAVING子句。最简单的表表达式只是引用磁盘上的一个表,一个所谓的基本表,但是我们可以用更复杂的表表达式以多种方法修改或组合基本表。表表达......
  • PostgreSQL的体系结构
    1.体系架构1、应用程序访问接口整个应用架构中,Postgresql数据库位于操作系统和应用程序之间,不同的编程语言使用不同的驱动程序链接到Postgresql数据库上,驱动分为两类:1.使用纯语言实现的Postgresql驱动,如JDBC、.NET等方式,这种链接方式不需要libpq库。2.通过包装Postgresql的......
  • PostgreSQL的数据类型
    PostgreSQL的数据类型1.布尔类型1.1布尔值对应表在Postgresql数据库中Boolean的值除了“true”(真)、“false”(假),还有一个“unknown”(未知)状态。如果是unknown时用NULL表示。布尔类型在Postgresql中可以用不带引号的TRUE或FALSE表示,也可以用更多表示真和假的带引号的字符表示:......
  • PostgreSQL的物理备份
    PostgreSQL的物理备份1.简单了解1.1pg_basebackup备份1.1.1简介pg_basebackup是从postgresql9.1版本开始提供的一个方便基础备份的工具。pg_basebackup用于对正在运行的PostgreSQL数据库集群进行基本备份。备份是在不影响数据库的其他客户端的情况下进行的,并且可以用于时......
  • PostgreSQL-连续归档和时间点恢复
    PostgreSQL-连续归档和时间点恢复(PITR)PostgreSQL始终在群集数据目录的pg_wal/子目录中维护一个预写日志(WAL)。该日志记录对数据库数据文件所做的每一项更改。此日志主要用于崩溃安全性:如果系统崩溃,可以通过“重放”自上次检查点以来所做的日志条目来将数据库恢复到一致性......
  • PostgreSQL的同步异步复制简介及互相转换
    PostgreSQL的同步/异步复制简介及互相转换一、介绍1.概念1.1.同步流复制同步流复制就是当主库发生变化,比如有一条DML语句产生了WAL日志后,通过后台进程传送到备库,备库必须要应用这个日志,然后向主库返回一个成功应用的信号,主库才可以成功的commit;否则主库会一直等待到备库成功......
  • PostgreSQL的一主一从集群搭建部署
    1.PostgreSQL的一主一从集群搭建部署1.目标​ 掌握Postgresql数据库主从部署搭建配置2.脉络部署规划PostgreSQL单节点安装PostgreSQL主从部署配置主从同步验证3.部署搭建3.1基础准备1.1创建两台虚拟机虚拟机名IPhostname主从划分test11192.168.198......
  • 搭建PostgreSQL高可用集群(基于Patroni+Etcd)
    搭建PostgreSQL高可用集群(基于Patroni+Etcd)1.主机环境准备节点名称主机名网卡IP地址OS安装软件角色作用PGSQL1pgsql1ens33192.168.198.162CentOS7PostgreSQL、ETCD、Patroni主数据库PGSQL2pgsql2ens33192.168.198.163CentOS7PostgreSQL、ETCD、Patr......
  • PostgreSQL15.6源码编译安装
    1.postgres数据库源码下载地址,自己选择对应版本,我这里是15.6https://www.postgresql.org/ftp/source/2.编译cd/data/make/postgresql-15.6./configure--prefix=/pgdata/postgres15make-j$(nproc)#加快编译速度,自动获取对应cpu核心数makeinstall3.创建postgres用户......