PostgreSQL 的热备和恢复.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PostgreSQL 的热备和恢复

PostgreSQL 的热备和恢复作为最强大的开源数据库,PostgreSQL拥有一切商业数据库所拥有的功能,甚至比商业数据库更好。 在以前的版本中,它在数据恢复,可靠性方面做的不太好,但经过最近几年的发展,已经可以和Oracle 媲美了。 在PostgreSQL7的时候就引入了WAL(Write Ahead Logging)的概念,即预写日志,所有对数据库的更改, 在更改之前必须写到该LOG中,这样,就算机器断电,PostgreSQL也可以从该LOG中知道数据库在断电前做 了什么操作,已经做到第几步了,这样保证了所有事务的完整性,但PostgreSQL7没有提供很好的灾难恢复 机制,一旦数据库崩溃,除非你曾经对数据库作过pg_dump或者file system level backup,否则,你的数据 将全部丢失,并且,就算你曾经对数据库做过备份,也只能恢复到你备份的那一刻的数据,这对一个生产数据库 (特别是24*7生产库)来说,是无法容忍的。 PostgreSQL8的推出,使PostgreSQL的稳定性和可靠性又迈出了划时代的一步。 除了提供对tablespace的支持外,PostgreSQL8提供了支持时间点的恢复---PITR. 其基本原理和Oracle的热备份完全一样: 首先,对数据库在file system level做一个backup(PostgreSQL是首先用pg_start_backup(label)命令, 然后用tar直接tar整个data目录,假设命名为base.tar,然后pg_stop_backup();结束热备。 Oracle首先是用alter tablespace xxx begin backup,然后直接cp数据文件); 然后,备份相关的配置文件(PostgreSQL只需备份postgresql.conf,pg_hba.conf,pg_ident.conf就可以了,其实, 前面的tar已经将这些文件备份了,Oracle需要alter database backup control file......); 最后,备份WAL( 可以设置postgresql.conf中的archive_command, 该命令可以让PostgreSQL8自动将需要的归档的日志文件备份的其他地方中。 但是注意:如果你是让PostgreSQL8调用archive_command来备份WAL的话, 可能根本就做不到PITR,我做过实验,如果依靠base.tar和archive_command产生的WAL其实只能恢复到最后一个 archive_command保存的WAL的数据,pg_xlog/下面可能还有数据,如果PostgreSQL8的数据目录彻底损坏的话,还是会 丢失数据,所以,我建议,在写数据备份脚本的时候,最好将pg_xlog/下面的WAL也一起备份,见下面的cpArch.sh。 )。 如果数据库崩溃,我们就可以使用热备产生的base.tar和archive_command产生的WAL和我们自己备份的WAL(pg_xlog)来进行数据库的 recovery. 下面举例来说明: 我的PostgreSQL运行在:/home/pgsql/下面 数据目录在:/home/pgsql/database/ 将热备数据文件备份到/disk3/PostgreSQL/base/下面 将WAL备份到/disk3/PostgreSQL/archives/下面 postgresql.conf中定义了如下的archive_command: archive_command = cp -f %p /disk3/PostgreSQL/archives/%f 该命令会将PostgreSQL产生的WAL cp到/disk3/PostgreSQL/archives/中。 我的热备脚本如下: (1)为了使丢失的数据在一分钟之内,在crontab中每分钟将pg_xlog/下面的WAL backup到/disk3/PostgreSQL/archives/。 crontab: */1 * * * * /home/pgsql/bin/cpArch.sh cpArch.sh: #!/bin/sh cp -f /home/pgsql/database/pg_xlog/[0-9]* /disk3/PostgreSQL/archives/ (2)编写热备脚本hotBackup.pl(我用perl): #!/usr/bin/perl ############################################################# # hotBackup.pl # Use to hot backup the Postg

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档