PostgreSQL物理备份与恢复

时间:2022-02-25 14:04:41

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认证配置:

PostgreSQL物理备份与恢复


192.168.3.202

使用pg _basebackup进行数据库物理备份,因为使用的是流复制协议备份,所以可以进行异地备份:

创建备份目录:

#mkdir -p /pgback

#chown -R postgres.postgres pgback

#su postgres

$cd /pgback

$mkdir `date +%Y%m%d`

测试rep用户是否可以连接到201数据库:

$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

查看备份文件:

PostgreSQL物理备份与恢复PostgreSQL物理备份与恢复

其中base.tar是$PGDATA的全目录备份。24579是表空间的oid,所以24579.tar与24583.tar是表空间的目录备份。


数据库还原:

192.168.3.201

表空间目录$PGDATA/pg_tblspc中存放的实际上是表空间的软连接:

PostgreSQL物理备份与恢复PostgreSQL物理备份与恢复

创建一张表,插入一些数据:

PostgreSQL物理备份与恢复PostgreSQL物理备份与恢复

强制日志归档,以便测试还原。checkpoint将buffer中的dirty数据写入磁盘,完成数据完整性检查。pg_switch_xlog()将pg_xlog目录下产生的wal日志,复制到预设的归档目录下,保证产生的wal日志都已完成归档。

PostgreSQL物理备份与恢复PostgreSQL物理备份与恢复

停止数据库,清空 $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 *

PostgreSQL物理备份与恢复

拷贝备份文件:

PostgreSQL物理备份与恢复$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'

启动数据库:

PostgreSQL物理备份与恢复$pg_ctl start


$PGDATA目录下的recovery.conf变成了recovery.done说明恢复完成。

验证数据库恢复情况:

PostgreSQL物理备份与恢复PostgreSQL物理备份与恢复


第一次上传的图挂了,重新上传下。