CentOS6.6+Postgresql9.4
服务器:
192.168.3.201 数据库服务器
192.168.3.202 备份服务器
注:需要开启归档,物理备份$PGDATA全目录以及表空间目录,利用物理备份与归档日志进行数据库还原。可以跨越小版本,但不能跨平台。
192.168.3.201
首先开启归档:
创建归档目录:
#mkdir -p/pg_archive/pg5431/
#chown -R postgres.postgres/pg_archive/pg5431/
#su postgres
$ vi $PGDATA/postgresql.conf
wal_level=archive #日志级别必须大于minimal,也就是说必须为archive或者hot_standby模式。
archive_mode = on
archive_command = 'DATE=`date +%Y%m%d`;DIR="/pg_archive/pg5431/$DATE";(test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f'
#在归档命令中,%p指xlog相对路径,%f 仅代表文件名。
保存配置文件,并重启数据库,若已开启归档模式,不需要重启数据库。
创建数据库用户rep,专门用于流复制备份。需修改pg_hba.conf认证配置:
192.168.3.202
使用pg _basebackup进行数据库物理备份,因为使用的是流复制协议备份,所以可以进行异地备份:
创建备份目录:
#mkdir -p /pgback
#chown -R postgres.postgres pgback
#su postgres
$cd /pgback
$mkdir`date +%Y%m%d`
$psql -h 192.168.3.201 -p 5431 -U rep -d postgres
开始备份:
$ pg_basebackup -D /pgback/`date +%Y%m%d` -F t -x -h 192.168.3.201 -U rep -p 5431
查看备份文件:
其中base.tar是$PGDATA的全目录备份。24579是表空间的oid,所以24579.tar与24583.tar是表空间的目录备份。
数据库还原:
192.168.3.201
表空间目录$PGDATA/pg_tblspc中存放的实际上是表空间的软连接:
创建一张表,插入一些数据:
强制日志归档,以便测试还原。checkpoint将buffer中的dirty数据写入磁盘,完成数据完整性检查。pg_switch_xlog()将pg_xlog目录下产生的wal日志,复制到预设的归档目录下,保证产生的wal日志都已完成归档。
停止数据库,清空 $PGDATA目录,以及表空间目录:
注意:如果pg非正常停掉,那么最近产生的xlog有可能还没有完成归档,所以需要将这部分没有归档的日志手工拷贝到归档目录,否则可能会丢失数据。
$pg_ctl stop
$cd $PGDATA
$rm -rf *
$cd/pg_tablespace/pg_5431/ts_bigtable
$rm -rf *
$cd/pg_tablespace/pg_5431/ts_udbac
$rm -rf *
拷贝备份文件:
$scp postgres@192.168.3.202:/pgback/20150820/base.tar $PGDATA
$ scp postgres@192.168.3.202:/pgback/20150820/24579.tar /pg_tablespace/pg_5431/ts_bigtable/
$ scp postgres@192.168.3.202:/pgback/20150820/24583.tar /pg_tablespace/pg_5431/ts_udbac/
拷贝recovery配置文件
$ cp $PGHOME/share/recovery.conf.sample /$PGDATA/recovery.conf
$vi $PGDATA/recovery.conf
restore_command = 'cp /pg_archive/pg5431/20150820/%f %p'
启动数据库:
$pg_ctl start
$PGDATA目录下的recovery.conf变成了recovery.done说明恢复完成。
验证数据库恢复情况: