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)
至此,数据已成功恢复!