pg数据库备份恢复

备份

1,配置归档模式

配置归档需要编辑postgresql.conf文件,默认为与/usr/local/pgsql/data/目录下

vim/usr/local/pgsql/data/postgesql.conf

wal_level = hot_standby

archive_mode= on

archive_command= ‘cp %p /usr/local/pgsql/backup/%f’    //backup的必须有postgres用户(数据库用户)的权限,chown postgres backup

注:%p要被归档的日志文件的路径,%f是要被归档的日志文件的文件名

2,启动数据库

pg_ctl start –D /usr/local/pgsql/data

3,创建数据库arch

createdb arch

4,创建表并插入记录

psql arch

arch=# create table tb(a int);

arch=# insert into tb(a) values(1);

5,创建基础备份

arch=#select pg_start_backup(‘baseline’);

6,备份整个data目录

tar –jcvf  /usr/local/pgsql/backup/baseline.tar.bz2 /usr/local/pgsql/data/

7, 停止备份

psql arch

arch=# select pg_stop_backup();

8, 插入新记录,然后切换日志,重复3次

arch=# insert into tb(a) values(2);

arch=# select pg_switch_xlog();

arch=# insert into tb(a) values(3);

arch=# select pg_switch_xlog();

arch=# insert into tb(a) values(4);

arch=# select pg_switch_xlog();

9, 把/data/pg_xlog/下的WAL日志文件复制到预设的归档目录下,保证产生的WAL日志都已归档.


恢复

      1,停止数据库

pg_ctl stop –D /usr/local/pgsql/data/

      2,删除/data/

rm –r  /usr/local/pgsql/data/

      3,恢复备份

tar –jxvf   /usr/local/pgsql/backup/baseline.tar.bz2 –C /     //如果没有权限,可能需要root用户执行

4,清空/data/pg_xlog/目录下所有文件

rm –r /usr/local/pgsql/data/pg_xlog/

5, 创建/pg_xlog/及其下面的archive_status目录

mkdir  /usr/local/pgsql/data/pg_xlog/

mkdir  /usr/local/pgsql/data/pg_xlog/archive_status

6, 在/data/目录下创建recovery.conf

vim  /usr/local/pgsql/data/recovery.conf

restore_command= ‘cp /usr/local/pgsql/backup/%f “%p”’

7,启动数据库

pg_ctl  start  –D  /usr/local/pgsql/data/

一切正常的话数据库就会自动应用WAL日志进行恢复

8, 查看数据库arch是否恢复

psql arch

arch=# select * from tb;

a

---

1

2

3

4

(4rows)

 

至此,数据已成功恢复!

你可能感兴趣的:(Postgresql)