Postgres基于时间点恢复

PG基于时间点恢复:
线上表被truncate,通过在其它机器基于时间点恢复备份数据

在其它环境中搭建一套PG环境:
1)查看线上环境基础配置:
show all;可以看到生产环境的blocksize和wal-segsize
2)采用线上环境版本PG软件编译安装
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++   openssl-devel cmake 

./configure --prefix=/opt/postgres --with-pgport=5432 --with-python --with-libxml --with-wal-segsize=16 --with-blocksize=8
make && make install

插件安装:
cd contrib
make && make install

3)创建用户
groupadd postgres
useradd -g postgres postgres

4)初始化数据
initdb -D $PGDATA --locale=en_US.UTF8 --pwprompt  -A password

5)启动测试


基于时间点恢复数据库:

停数据库 
# pg_stop 


利用备份恢复
# rm -rf data
tar xvf pgdata.tar 


删除pg_xlog文件夹并重建 
rm -rf pg_xlog 
mkdir -p pg_xlog/archive_status 

pg_xlog相当于oracle redolog,在这里用不上

拷贝recovery.conf文件并修改以指定时间点恢复
# cp $PG_HOME/share/recovery.conf.sample /opt/postgres/data 
# vi /opt/postgres/data/recovery.conf 
--新增内容,指定恢复文件和路径,%f,%p见上面说明 
restore_command = 'cp /opt/postgres/archive/%f %p' 
recovery_target_time = '2015-12-09 12:34:00+08' 


注:新环境采用的是线上环境的配置文件,该配置文件己包含在备份中,不要采用自己的配置文件 ,这样减少出错机率。

恢复到线上表:
原表改名:
rename take_info  to take_info_1;


数据导出并导入到线上
pg_dump -U terminal -d terminal -t take_info  >take_info.sql   会有建表语句
psql -U take_info -d take_info

insert into take_info select * from take_info_1;

请使用浏览器的分享功能分享到微信等