PostgreSQL DBA快速入门(三) - 逻辑和物理备份

执行按期备份并有一整套恢复计划是一个DBA的重要工做之一,这也是数据库可用性和完整性的保障。咱们能够在多个机房之间部署流复制集群,以保证但节点故障,可是集群没法保证认为的意外DELETE或者DROP操做而备份能够。在这片文章中,咱们会讨论PostgreSQL的一些可用的备份选项。sql

备份类型

一般有两种备份大类 - 逻辑备份和物理备份。在设计备份策略以前,首先须要认真理解这两种备份的不一样。固然,备份类型也决定了你须要使用哪一种特定的工具来实现。shell

逻辑备份

逻辑备份的数据一般存储为平文件,以人类可读活着容易理解的形式存储。这中格式很是有用,若是须要,咱们设置能够从备份中找到单独的某行记录并恢复它。可是从另外一方面来看,回复整个逻辑备份是比较慢的,由于数据库不得不对全部的数据加载一一处理,这种经过数据库实例入库数据的方式比直接复制数据文件要慢不少。数据库

物理备份

实际上,数据最终是一些磁盘文件的组合,物理备份就是将这些文件抓取出来。咱们能够在某一个给定的时间点将数据文件复制出来进行备份。真正操做起来的时候,它并不像执行一个简单的copy命令那么容易。由于在执行物理备份时,咱们须要时刻清醒的意识到,此时可能正在发生数据库修改。为了确保物理备份的可用性,任何物理备份必须保持持续一致。ubuntu

物理备份对恢复整个数据库十分有效,速度仅仅受限于磁盘活着网络等硬件。c#

PostgreSQL中的备份

PostgreSQL,与大多数其余关系型数据库同样,支持物理备份和逻辑备份。下面让咱们一块儿来看一下如何进行操做:网络

PostgreSQL逻辑备份

PostgreSQL数据库逻辑备份经过工具pg_dump来实现,它支持导出多种格式:默认存储为平文件,咱们也能够经过参数控制生成结果为tar文件活着其余压缩格式。这种备份能够经过pg_restore命令恢复,咱们能够很容易的手动解压出SQL内容。下面具体来看一下如何用pg_dump建立一个备份:工具

首先,备份为SQL平文件:post

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

查看备份文件,能够看到以下内容:vagrant

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:

恢复数据十分简单。若是备份是默认平文件格式,咱们能够直接用psql工具将该SQL语句加载到数据库中。若是使用的是另外格式,能够用pg_restore格式加载。若是容许丢弃部分新数据,那能够将整个在线数据库删除后恢复整个备份(若是不进行删除操纵,那么恢复完后会存在双份数据的问题)。例如:

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:

最后须要注意一点,pg_dump生成的持续备份是在一个单一的食物里面完成的,这个特性说明PostgreSQL依赖于MVCC机制来保证当前的备份不被后来的事务影响。

PostgreSQL物理备份

物理备份只要备份就是全备份,因此恢复的时候也是全库恢复。物理备份最大的问题是持续备份。固然,最简单的办法就是将PostgreSQL数据库停掉,而后使用相似cp、scp活着rsync等工具直接备份。可是实际生产环境中,停掉数据库基本是不可能的,因此咱们须要经过其余的方式来实现。步骤大概以下:

  1. 使用pg_start_backup('some label')来建立一个检查点;
  2. 复制数据目录的内容;
  3. 使用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

咱们也能够经过设置archive_command参数将WAL段复制到一个单独的位置存储。

恢复物理备份也比较简单,只须要将备份数据复制到一个干净的PostgreSQL数据目录下便可。恢复完成后,一旦启动PostgreSQL实例进程,数据库便会自动恢复到备份的时间点。若是要基于时间点恢复,此时须要使用归档日志:首先恢复基础备份,而后建立一个recovery.conf文件定义一个恢复命令,这个命令用来告诉PostgreSQL如何重放WAL日志。

Ends~

相关文章
相关标签/搜索