HGDB基于时间点的恢复

本示例以Windows环境下的HighGo Database v4.1.1演示为例:

数据库安装目录为:D:\HighGo\Database\4.1.1


1、修改配置文件 postgresql.conf
archive_mode = on
archive_directory = 'D:\\BACKUP\\ARCHIVELOG'
wal_level = archive
因此环境为单机环境的备份恢复,切勿将hot_standby设置为on,否则在下面的步骤中启动数据库可能出现报错。

2、启动数据库
从“控制面板-管理工具-服务”中选择hgdb-se4.1.1并启动

3、基于文件级别的在线热备份
a.模拟测试数据
CREATE TABLE tab1(a1 int);
INSERT INTO tab1 VALUES (1),(2),(3),(4);

b.备份
highgo=#  SELECT now();
              now
-------------------------------
 2017-09-03 14:00:52.584023+08
(1 行记录)
highgo=# select pg_start_backup('bak_2017-09-03 14:00:52');
 pg_start_backup
-----------------
 0/B000028
(1 行记录)

c.打包data
将data目录复制到备份目录D:\backup下

d.结束并切换归档
highgo=#  select pg_stop_backup();
NOTICE:  00000: pg_stop_backup complete, all required WAL segments have been archived
 pg_stop_backup
----------------
 0/C000050
(1 行记录)

highgo=# select pg_switch_xlog();
 pg_switch_xlog
----------------
 0/D000000
(1 行记录)
这时会在data目录下产生一个backup_label的文件,记录了可以查看内容有checkpoint时间,基础备份的开始和结束时间,以及标签名称等。如下:
START WAL LOCATION: 0/B000028 (file 00000001000000000000000B)
CHECKPOINT LOCATION: 0/B000028
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2017-09-03 14:01:11 HKT
LABEL: bak_2017-09-03 14:00:52

说明:以上b/c/d三步中的备份步骤也可以使用pg_basebackup方式完成。

e.再次插入数据
highgo=# CREATE TABLE tab2(a1 int);
CREATE TABLE
highgo=#  INSERT INTO tab2 VALUES (1),(2),(3);
INSERT 0 3

4、模拟毁坏并进行恢复
a.停止数据库服务
从“控制面板-管理工具-服务”中选择hgdb-se4.1.1并停止

b.模拟数据库毁坏
删除D:\HighGo\Database\4.1.1\data目录

c.恢复备份文件
将d:\backup\data目录拷贝到D:\HighGo\Database\4.1.1下

d.删除pg_xlog文件夹下的所有文件
  在pg_xlog下创建目录archive_status

e.创建recovery.conf文件添加如下内容
archive_directory = 'D:\\backup\\archivelog'
recovery_target_time='2017-09-03 14:00:52'
recovery_target_time可以设置恢复到的时间点,如果不加此选项则会恢复到之前接收到的最后一个归档文件。

f.重启数据库查看恢复结果
从“控制面板-管理工具-服务”中选择hgdb-se4.1.1并启动

数据库后台日志输出恢复信息如下:
LOG:  00000: database system was interrupted while in recovery at log time 2017-09-03 14:01:11 HKT
HINT:  If this has occurred more than once some data might be corrupted and you might need to choose an earlier recovery target.
LOG:  00000: starting point-in-time recovery to 2017-09-03 14:00:52+08
LOG:  00000: restored log file "00000001000000000000000B" from archive
LOG:  00000: redo starts at 0/B000098
LOG:  00000: restored log file "00000001000000000000000C" from archive
LOG:  00000: consistent recovery state reached at 0/C000050
LOG:  00000: restored log file "00000001000000000000000D" from archive
LOG:  00000: recovery stopping before commit of transaction 621, time 2017-09-03 14:03:31.236301+08
LOG:  00000: redo done at 0/D0171B8
LOG:  00000: selected new timeline ID: 2
LOG:  00000: archive recovery complete
LOG:  00000: MultiXact member wraparound protections are now enabled
日志:  00000: 数据库系统准备接受连接
LOG:  00000: autovacuum launcher started
FATAL:  28000: role "WIN-MIRBE4NEBAU$" does not exist

启动后验证恢复的表:
C:\Users\Administrator>psql -d highgo
psql (4.1.1)
PSQL: Release 4.1.1
Connected to:
HighGo Database V4.1 Enterprise Edition Release 4.1.1 - 64-bit Production
输入 "help" 来获取帮助信息.
highgo=# \d
                    关联列表
    架构模式    | 名称 |  类型  |    拥有者
----------------+------+--------+---------------
 oracle_catalog | dual | 视图   | Administrator
 public         | tab1 | 数据表 | Administrator
(2 行记录)
在此仅恢复到第一次模拟数据(即3.a步)。

g.下面为在recovery.conf中未添加recovery_target_time的结果:
highgo=# \d
                    关联列表
    架构模式    | 名称 |  类型  |    拥有者
----------------+------+--------+---------------
 oracle_catalog | dual | 视图   | Administrator
 public         | tab1 | 数据表 | Administrator
 public         | tab2 | 数据表 | Administrator
(3 行记录)

highgo=# SELECT * from tab2;
a1
----
1
2
3
(3 rows)

注:结束后,recovery.conf会改名变成recovery.done。
      如果恢复过一次,并设置了恢复时间点,下次直接修改recovery_target_time,不会发生效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值