`
i_am_birdman
  • 浏览: 280915 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

数据库服务器 之 Postgresql备份和恢复------SQL转储篇

阅读更多

作者:小P
来自:LinuxSir.Org
摘要: 和任何包含珍贵数据的东西一样,PostgreSQL 数据库也应该经常备份。备份PostgreSQL数据库有三种方法,各种方法有利有弊,本文先讲一下SQL转储的方法。


目录



+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++

您是否遇到过因为不小心而删除了某个数据库表,或者是存放数据库的磁盘损坏了的情况呢?如果碰到这种情况,我相信您会觉得非常的沮丧,因为您努力了几个星期的工作成果可能就付之东流了。和任何包含珍贵数据的东西一样,PostgreSQL数据库也应该经常备份。如果您将数据存放在 PostgreSQL 表中,您就可以定时的进行数据库备份,从而避免发生上面的悲剧。PostgreSQL 自带有内置工具来执行备份工作,而且在系统出现损坏或是意外时,您可以通过这些工具进行“回滚”,并通过以前保存的快照将系统恢复到其初始的状态。


1. 综述;

PostgreSQL数据库从备份 PostgreSQL 数据有三种完全不同的方法:

SQL 转储

文件系统级别备份

在线备份

每种备份都有自己的优点和缺点,下面主要介绍SQl转储的方法;


2. 数据备份;

SQL 转储的方法是创建一个文本文件,这个文本里面都是 SQL 命令,当把这个文件回馈给服务器时,将重建与转储时状态一样的数据库。


2.1 pg_dump;

PostgreSQL 自带的内置备份工具叫做 pg_dump。这个工具是通过一系列的SQL语句读取某个指定的数据库并复制其中的内容,以它作为快照并用于日后的数据恢复。客户端到服务器端的连接是用于执行备份工作。这些备份文件就是前面所讲的快照并可以用于日后的数据恢复。而保证客户端与服务器端的连接是执行备份所必需的。这条命令的基本用法是:

pg_dump dbname > outfile

注:在进行上述工作之前,首先请确保您具有登录到服务器并访问您将要备份的数据库或表的权限。您可以通过使用PostgreSQL 命令行客户端——psql,进行服务器登录。在客户端中输入主机名(-h),用户名(-u)和密码(-p),以及数据库名,然后就可以校验您是否被授权访问。

使用 pg_dump 非常的简单——只需要在命令提示符后面输入将要导出的数据库名就可以进行备份工作了,如下例所示(根据您自己的安装路经更改PostgreSQL 路径):

 

xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/pg_dump -D -h localhost -U xiaop(用户名) mydb(数据库名称) >  mydb.bak

 

通过上面的命令就会创建一个名为 mydb.bak的文件,文件中记录了用于恢复数据库的SQL命令。

正如您所见,pg_dump 把结果输出到标准输出。 我们下面就可以看到这样做有什么好处。

pg_dump 是一个普通的 PostgreSQL 客户端应用(尽管是个相当聪明的东西。)这就意味着您可以从任何可以访问该数据库的远端主机上面进行备份工作。 但是请记住 pg_dump 不会以任何特殊权限运行。具体说来, 就是它必须要有您想备份的表的读权限,因此,实际上您几乎总是要成为数据库超级用户。

要声明 pg_dump 应该以哪个用户身份进行联接,使用命令行选项 -h host 和 -p port。缺省主机是本地主机或您的环境变量PGHOST声明的值。 类似,缺省端口是环境变量PGPORT或(如果它不存在的话)编译好了的缺省值。(服务器通常有相同的缺省,所以还算方便。)

和任何其他 PostgreSQL 客户端应用一样, pg_dump 缺省时用与当前操作系统用户名同名的数据库用户名进行联接。要覆盖这个名字,要么声明 -U 选项, 要么设置环境变量PGUSER。 请注意 pg_dump 的联接也和普通客户应用一样要通过客户认证机制。

由 pg_dump 创建的备份在内部是一致的, 也就是说,在pg_dump运行的时候对数据库的更新将不会被转储。 pg_dump 工作的时候并不阻塞其他的对数据库的操作。 (但是会阻塞那些需要排它锁的操作,比如 VACUUM FULL。)

注:: 如果您的数据库结构依赖于 OID (比如说用做外键),那么您必须告诉 pg_dump 把 OID 也倒出来。 要倒 OID,可以使用 -o 命令行选项。 缺省时也不会转储"大对象"。如果您使用大对象,请参考 pg_dump 的命令手册页。


2.2 pg_dumpall;

如果您希望对整个系统中所有的数据库进行备份的话(而不是只对某一个数据库进行备份),您可以使用命令pg_dumpall 而不是pg_dump。执行这个命令可以对PostgreSQL 所能识别的所有的数据库(包括其自身的系统数据库)备份到一个文件中。下面给出了一个使用实例:

 

xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/pg_dumpall -D -h localhost -U xiaop(用户名) >  all.bak   

 

这样就会将localhost的所有数据库备份到all.bak文件中了;


2.3 计划任务;

为了保证您的备份时刻保持更新,您可以通过往cron table中加入pg_dump或者是pg_dumpall命令来定期执行备份工作。这里给出了两个cron entries的例子。第一个是在每天凌晨3点对test数据库进行备份,而第二个是在每个星期五的晚上9点对所有的数据库进行备份:

 

xiaop@xiaop-laptop:~$ 0 3 * * * /usr/lib/postgresql/8.2/bin/pg_dump -D -h localhost -U xiaop(用户名) mydb(数据库名称) > /home/xiaop/mydb.bak0 21 * * 
xiaop@xiaop-laptop:~$ 5 /usr/lib/postgresql/8.2/bin/pg_dumpall -D -h localhost -U xiaop(用户名) > /home/xiaop/all.bak

 


3. 从转储中恢复


3.1 用pg_dump恢复;

从备份中恢复数据的工作比执行备份甚至更简单——您所要做的就是通过执行备份文件中的SQL命令来对数据库进行恢复。如果您是使用pg_dump对某一个数据库进行了备份,那么备份中就会有CREATE TABLE 的语句来对源表进行复制。当然,您首先要新创建一个空数据库来存放这些数据表。您可以使用createdb 这个工具来完成这一步工作,这个工具也是PostgreSQL 套件中的一部分:

xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/createdb mydb(数据库名称)

 

现在您就可以执行备份文件中的SQL命令来对数据库进行恢复了, pg_dump 生成的文本文件可以由 psql 程序读取。 从转储中恢复的常用命令格式是:

psql dbname < infile

如下例所示:

 

xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/psql -h localhost -U xiaop(用户名) -d mydb(数据库名称) < mydb.bak

 


3.2 用pg_dumpall恢复;

如果您是使用pg_dumpall对所有的数据库进行备份的,就没有必要先新建一个数据库,因为备份文件中已经包含了完成CREATE DATABASE工作的相关的调用。在这里,只需要在psql命令行客户端中输入对应的备份文件就可以了,而不需要指定目标数据库:

 

xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/psql -h localhost -U xiaop(用户名 ) < all.bak

 

一旦数据恢复完成后,您就可以登录到服务器并查看到已恢复的数据。


3.3 ANALYZE;

一旦完成恢复,在每个数据库上运行 ANALYZE 是明智的举动, 这样优化器就有有用的统计数据了。您总是可以运行 vacuumdb -a -z 来 VACUUM ANALYZE 所有数据库;这个等效于手工运行 VACUUM ANALYZE;


4. 处理大数据库;


4.1 输出大数据库;

因为 PostgreSQL 允许表的大小大于您的系统允许的最大文件大小, 可能把表转储到一个文件会有问题,因为生成的文件很可能比您的系统允许的最大文件大。 因为 pg_dump 输出到标准输出,您可以用标准的 Unix 工具绕开这个问题:
使用压缩的转储. 使用您熟悉的压缩程序,比如说 gzip。

 

xiaop@xiaop-laptop:~$ pg_dump mydb(数据库名) | gzip > mydbBACK.gz

 


4.2 恢复大数据库;

用下面命令恢复:

xiaop@xiaop-laptop:~$ createdb mydbNEW(新数据库名)
xiaop@xiaop-laptop:~$ gunzip -c mydbBACK.gz | psql mydbNEW

或者
xiaop@xiaop-laptop:~$ cat mydbBACK.gz | gunzip | psql mydbNEW

 


4.3 使用 split;


4.3.1 分割;

split 命令允许您用下面的方法把输出分解成操作系统可以接受的大小。 有关split的用法可以在《文件的切分split和结合工具cat 介绍》中查询。比如,让每个块大小为 1 兆字节:

xiaop@xiaop-laptop:~$ pg_dump dbname | split -b 1m - filename

 


4.3.2 合并;

分割后可以用下面的命令恢复:

xiaop@xiaop-laptop:~$createdb dbname
xiaop@xiaop-laptop:~$cat filename* | psql dbname

 


5. 关于本文;

有关PostgreSQl数据库备份和恢复的另外两个方法“文件系统级别的备份”和“在线备份”,我们以后再讨论,本文大部分资料都是参照中文文档,目的是让兄弟们查找方便一些,详细的东西在中文文档都有,多谢各位弟兄们指点 :)


6. 更新日志;


7. 参考文档;

《PostgreSQL 8.1 中文文档》


8. 相关文档;

《PostgreSQL安装和简单使用》
《PostgreSQL的配置文件及用户权限》 
《PostgreSQL数据库用户认证》
《PostgreSQL数据库的日常维护工作》

分享到:
评论

相关推荐

    postgresql 8 for suse 11

    - 可以使用`pg_dump`和`pg_restore`工具进行数据库的完整备份和恢复。 - 也可以通过流复制实现高可用性和灾难恢复。 8. **扩展与集成**: - PostgreSQL 8.3支持PL/pgSQL、Perl、Python、TCL等编程语言编写存储...

    转储postgis数据库方法.docx

    本文档将详细介绍如何通过命令行工具进行PostGIS数据库的转储(备份)与恢复(导入),并提供具体的步骤和注意事项。 #### 二、准备工作 在开始之前,请确保已经完成了以下准备工作: 1. **安装PostgreSQL**:...

    Greenplum使用pg_dump备份数据库1

    本文将详细讲解如何使用`pg_dump`工具来备份和恢复Greenplum数据库。 ### 1. `pg_dump`工具介绍 `pg_dump`是PostgreSQL数据库系统提供的一个实用程序,用于创建数据库的转储(或备份)。在Greenplum中,这个工具...

    1.5-PostgreSQL对象-关系数据库系统软件.ppt

    服务器端程序包括`postgres`数据库服务器进程和`postmaster`守护进程,它们负责处理客户端请求并管理数据库集群。 PostgreSQL还提供了多种管理工具。`psql`是命令行交互式工具,适合数据库管理员执行查询、管理...

    PostgreSQL中的备份表(不是数据库)

    在PostgreSQL数据库环境中,对表进行备份而不是整个数据库是一个常见的需求,特别是在Windows操作系统下,确保重要数据的安全性和可恢复性至关重要。以下是对标题和描述中所述知识点的详细说明: 1. **PostgreSQL...

    postgres 命令

    【postgres 命令】是 PostgreSQL 数据库管理系统中的一系列...在使用这些命令时,应根据具体需求选择合适的选项,确保备份和恢复操作的安全性和效率。同时,了解和熟练掌握这些命令是 PostgreSQL 管理员的基本技能。

    pg_dump-to-s3:自动将PostgreSQL备份转储并存档到Amazon S3

    - 在生产环境中,应考虑备份策略,如全量备份与增量备份的结合,以平衡资源消耗和恢复速度。 - 了解并遵循AWS的费用结构,避免不必要的成本开支。 - 定期测试恢复过程,确保备份的完整性。 综上所述,`pg_dump-to-...

    将postgres数据导入到sqlite

    在IT行业中,数据库管理是至关重要的任务之一,尤其是在数据迁移的场景下。本文将详细讲解如何将PostgreSQL(简称postgres)数据库中的数据导入到SQLite数据库,这是一个常见的需求,特别是在需要轻量级、本地化存储...

    瀚高数据库V5管理手册V4.0.pdf

    - **2.3 备份和恢复** - **2.3.1 SQL转储**:如何使用SQL命令进行数据备份。 - **2.3.2 文件系统级别的备份**:直接在文件系统层面进行备份。 - **2.3.3 连续归档和时间点恢复(PITR)** - **建立WAL归档**:设置...

    docker中psql数据库备份与恢复详解

    本文将针对Docker环境下psql数据库的备份和恢复操作进行详解。 备份psql数据库是数据库运维和管理中的常规任务。当需要迁移到新环境、系统升级或灾难恢复时,备份显得尤为重要。备份可以是完全备份,即备份整个...

    将你的网站从MySQL改为PostgreSQL

    1. 数据备份:首先,使用`mysqldump`工具创建MySQL数据库的SQL转储文件。 2. 数据转换:由于MySQL和PostgreSQL的SQL语法略有不同,不能直接使用MySQL的dump文件。需要手动或自动化工具修改SQL语句,使其符合...

    Navicat_12_PDF_Win.pdf

    Navicat是一款强大的多平台数据库管理和开发工具,支持多种数据库系统,包括MySQL、MariaDB、Oracle、PostgreSQL、SQL Server 和 SQLite等。它提供了直观的图形界面,帮助用户高效地管理数据库,并进行数据迁移、...

    Navicat是一款功能强大的数据库管理工具,支持多种数据库类型.docx

    - **主机**:输入数据库服务器的 IP 地址或域名(如`localhost`)。 - **端口**:默认为 3306。 - **用户**:通常是 root 用户或其他具有适当权限的用户。 - **密码**:对应的密码。 4. **测试连接**:点击...

    数据库navicate 12 最新说明

    - **维护对象**:如备份和恢复等。 **Oracle** - **模式**:逻辑组织数据库对象的方式。 - **表**:存储数据的结构。 - **视图**:与MySQL类似。 - **实体化视图**:预先计算并存储的视图。 - **过程或函数**:...

    Navicat下载、安装、配置连接与使用教程

    - 主机名或IP地址:数据库服务器的地址(例如localhost或数据库服务器的IP)。 - 端口:数据库的端口号(默认MySQL为3306)。 - 用户名:数据库的用户名。 - 密码:数据库的密码。 4. **测试并保存连接**: - ...

    postgresql_dumps

    在数据库管理领域,PostgreSQL 是一款强大的开源关系型数据库管理系统,它提供了多种方式进行数据的备份和恢复,其中转储(dumps)是常用的一种方式。转储允许用户将数据库的数据和结构完整地保存到文件中,以便于...

    Linux环境数据库管理员指南

    6. **性能监控**:熟悉Linux性能监控工具,如`top`、`htop`、`iotop`、`vmstat`、`iostat`和`mpstat`,以便分析数据库服务器的CPU、内存、磁盘I/O和网络性能。 7. **日志分析**:了解如何查看和分析数据库日志文件...

    Navicat Premium v11.zip数据库可视化工具

    Navicat Premium 11是一款非常好用的数据库管理和开发工具,它可以帮助用户连接本地或远程服务器,软件内置功能强大,可以为用户提供SQL编辑器、导入或导出、转储或运行SQL脚本等各种功能,从而协助你管理数据!...

    GreenPlum数据库详细安装过程【从Suse操作系统安装配置开始到GP数据安装完成

    本篇将详细阐述如何在SUSE Linux Enterprise Server 11 64-bit操作系统上安装和配置GreenPlum数据库。 1. **GreenPlum数据库概述** GreenPlum数据库由Pivotal公司开发,它基于PostgreSQL数据库引擎,通过MPP架构...

Global site tag (gtag.js) - Google Analytics