pitr 原理_PostgreSQL基于时间点恢复(PITR)

数据库的PITR是一般数据库都必须满足的技术。其原理是依据之前的物理备份文件加上wal的预写日志模式备份做的恢复。该技术支持8.*及以上版本。下面主要概述PITR的准备和恢复过程。 测试环境

OS 环境:CentOS 6.2

数据库 :PostgreSQL 9.1.3

pg_home=/home/postgres/

pg_data=/database/pgdata/

一、前期工作既要恢复,肯定是需要一个备份基础的,否则再怎么的巧妇也难为无米之炊。

1.修改数据库参数,修改postgresql.conf:

archive_mode = on

archive_timeout = 300 --单位是秒,此处以5分钟为限强制归档,仅作测试

archive_command = 'cp -i %p /home/postgres/archive/%f'

wal_level = archive

修改完重启下reload,DB

2.基于文件级别的持续备份,

a.基础备份

postgres=# select pg_start_backup('backup_2012_05_20_14:22:10');

b.打包备份pg_data

# cd /database

# tar -cvzf pgdata.tar ./pgdata

c.结束基础备份并切换归档

postgres=# select pg_stop_backup();

postgres=# select pg_switch_xlog();

pg_switch_xlog

----------------

0/C000020

(1 row)

postgres=# select pg_current_xlog_location();

pg_current_xlog_location

--------------------------

0/C000020

(1 row)

postgres=# create table test_1(id int,name varchar(50));

postgres=# insert into test_1 values (1,'kenyon');

INSERT 0 1

此时在pg_data路径下会产生一个label,可以查看内容有checkpoint时间,基础备份的开始和结束时间,以及标签名称等。因为之前已经设置了archive的三个参数,可以在archive的备份路径pg_home/archive下看到归档的文件会定时传过来。

二、恢复过程

停数据库

# pg_stop

假定数据库的崩溃场景,将pgdata数据删除

# rm -rf /database/pgdata

恢复之前备份的tar文件

# tar xvf pgdata.tar

删除pg_xlog文件夹并重建

# rm -rf pg_xlog # mkdir -p pg_xlog/archive_status

拷贝recovery.conf文件并修改

# cp $PG_HOME/recovery.conf.sample /database/pgdata/

# vi /database/pgdata/recovery.conf

--新增内容,指定恢复文件和路径,%f,%p见上面说明

restore_command = 'cp /home/postgres/archive/%f "%p"'

启动数据库

# pg_start

[postgres@localhost archive]$ psql

spsql (9.1.3)

Type "help" for help.

postgres=# select * from test_1;

id | name

----+--------

1 | kenyon

(1 rows) --恢复成功,会恢复到之前接收到的最后一个归档文件。另外recovery.conf会改名变成recovery.done

日志内容:

LOG: shutting down

LOG: database system is shut down

LOG: database system was interrupted; last known up at 2012-05-20 22:23:15 CST

LOG: starting archive recovery

LOG: restored log file "000000010000000000000002" from archive

LOG: redo starts at 0/8000078

LOG: consistent recovery state reached at 0/C000000

LOG: restored log file "000000010000000000000003" from archive

LOG: restored log file "000000010000000000000004" from archive

LOG: restored log file "000000010000000000000005" from archive

LOG: restored log file "000000010000000000000006" from archive

LOG: restored log file "000000010000000000000007" from archive

cp: cannot stat `/home/postgres/archive/000000010000000000000008': No such file or directory

LOG: could not open file "pg_xlog/000000010000000000000008" (log file 0,segment 8): No such file or directory

LOG: redo done at 0/1C000078

LOG: last completed transaction was at log time 2012-05-20 23:01:22.960591+08

LOG: restored log file "000000010000000000000007" from archive

cp: cannot stat `/home/postgres/archive/00000002.history': No such file or directory

LOG: selected new timeline ID: 2

cp: cannot stat `/home/postgres/archive/00000001.history': No such file or directory

LOG: archive recovery complete

LOG: database system is ready to accept connections

LOG: autovacuum launcher started

PS:若要恢复到指定时间,还需要再recovery.conf中设置recovrey_target_time,recovery_target_timeline等参数

总结:pitr技术对于7*24小时支撑是至关重要的,但是如果数据库非常小,增大pg_dump备份的频率可能更方便,但对于大数据库就需要了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是一个开源的关系型数据库管理系统,它提供了基于时间恢复(Point-in-Time Recovery,简称PITR)的功能。 基于时间恢复是指在数据库发生故障或数据丢失的情况下,能够恢复到一个指定的时间之前的数据库状态。这种恢复方法特别适用于意外删除数据、误操作或数据库崩溃等情况。 PostgreSQL实现基于时间恢复的方式是通过使用事务日志(transaction logs)来记录数据库变更。事务日志包含了数据库的每一个更改操作,包括插入、更新和删除等操作。 当需要进行恢复操作时,首先需要使用pg_start_backup()函数创建一个基于时间恢复的起始,然后将数据库中的事务日志归档。通过这个归档的事务日志,可以将数据库恢复到指定时间之前的状态。 具体的恢复操作包括以下步骤: 1. 关闭数据库并创建恢复配置文件,指定恢复的目标时间。 2. 恢复配置文件中指定的时间的事务日志会被用来还原数据库。 3. 将数据库恢复为指定时间之前的状态,包括删除恢复之后的事务日志。 4. 打开数据库,使其可以重新对外提供服务。 值得注意的是,基于时间恢复功能需要提前进行规划和配置。首先需要定期备份数据库并保留足够长的时间,以便在需要时可以进行恢复。其次,需要开启事务日志归档功能,确保数据库的事务日志可以被正确地保留和使用。 总结来说,PostgreSQL提供了基于时间恢复的功能,它通过记录数据库的事务日志来实现。使用这个功能可以在数据库故障或数据丢失的情况下,恢复到指定的时间之前的数据库状态。但是使用前需要进行规划和配置,包括定期备份数据库和开启事务日志归档功能等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值