页面

2008-07-27

PostgreSQL备份

PostgreSQL提供了3种备份策略:SQL导出,文件系统级备份,和在线备份。三种备份方式各有优缺点,分别适用于不同的场合。

导出备份就是将数据库中的数据模式及其数据以SQL形式导出到文件中。该种备份方式较简单、直观,适合数据库建立初期数据备份和数据模式更改后的备份操作。由于备份数据以系统文件的形式保存,所以对海量数据库的备份操作效率低下。并且,由于备份文件中不包括诸如数据模式用户及其权限等方面的记录信息,数据恢复操作时要求重建此类对象。
最简单形式:
pg_dump dbname > outfile.bak
数据恢复:psql dbname <>当数据模式使用了诸如外键约束等对象时,需使用“-o”选项。
对集群层次的数据备份,使用pg_dumpall命令。

文件系统级备份最直观,就是把数据库物理文件(通常是名为“data”的那个目录)进行备份。这种备份方式适合相同发行版数据库重建前的、集群级备份,并且要求数据库在停止状态下操作,从而也就不适合日常维护和海量数据备份。一个常见用例:
tar -cf backup.tar /usr/local/pgsql/data

在线备份是增量备份,最复杂,但最有效,适合数据库的日常维护性备份。在线备份的另一优势是数据恢复的精准定点,即可以指定恢复数据备份前任一时刻时的数据。
要使用在线备份,必须首先开启PostgreSQL的写前日志(Write Ahead Log)功能,配置postgresql.conf文件,找到“archive_command”这一行,加入:
archive_command='cp -i %p /backup/%f'
其实就是指定了个系统命令用于日志归档操作。其中:%p指上文所指的“data”目录,%f就是备份文件名。
开启写前日志功能后,按以下步骤进行备份:
以数据库超级管理员角色登录psql,执行:
select pg_start_backup('backup_label');
用任何系统级工具(tar或zip等)备份前步生成的数据文件backup_label。
再次回到psql,执行:
select pg_stop_backup();
注意一定要按照该顺序执行。
恢复数据时,按以下步骤:
首先停止数据库运行,即终止postmaster。
备份当前的“data”目录,以防止需恢复到当前状态。该步骤可省略。
清除所有“data”下的内容,以及所有位于其它位置的表空间(tablespace)。
8888888待续7777777777

没有评论: