测试用例:
数据库MogDB V2.1.1
适用于brm及gs_probackup备份集
恢复方案描述:
-
基于备份集名称的全量恢复。优点:只要数据备份集完整,就可以恢复数据,恢复时间快。缺点:由于每天一个全量备份集,基于备份集名称恢复,会丢失部分数据。
-
基于时间进行全量恢复,机制使用全量备份和归档备份共同将数据库推送到目标时间带点。优点:归档备份每2个小时一次,相对只使用全量备份进行恢复,可以减少量数据丢失的概率。缺点:严格依赖归档备份的有效性,如果其中一个备份集失效,则恢复失败。
恢复流程
1、将备份集恢复到测试服务器上
## 将NBU备份集放回到的测试数据库上,并赋权
$ ls -ltr dbback
# chown -R omm: /dbdata/dbback
# chmod -R 700 /dbdata/dbback
# ls -ltrd /dbdata/dbback

2、停测试服务上的数据库(如果有的话)
## 查看数据库进程连接状态
$ gsql -d postgres -p 51000 -r
select datname,state,usename,count(*)
from pg_stat_activity
group by datname,state,usename;
datname | state | usename | count
----------+--------+---------+-------
postgres | active | omm | 3
postgres | idle | omm | 2
itsm | idle | itsm | 86
(3 rows)
## 停数据库
$ gs_om -t stop
$ gs_om -t status --detail

3、建立测试目录
## 分别建立恢复基于备份集ID/备份时间的恢复目录
su - omm
mkdir -p /dbdata/datarev_backupid
mkdir -p /dbdata/datarev_backuptime
mkdir -p /dbdata/tmp

4、检查备份状态
## 查看备份集信息
# su - omm
$ gs_probackup show -B /dbdata/dbback
$ gs_probackup show -B /dbdata/dbback --archive

## 查看备份实例状态
$ gs_probackup show-config -B /dbdata/dbback --instance=bak --format=json

5、基于备份集名称恢复
## 恢复数据
su - omm
$ gs_probackup restore --force --skip-block-validation -B /dbdata/dbback --instance=lbak -i R9Z722 -D /dbdata/datarev_backupid

## 修改参数,修改端口及归档模式
su - omm
$ cd /dbdata/datarev_backupid
$ cat postgresql.conf|grep -i "port = 51000"
$ cat postgresql.conf|grep -i "archive_mode = on"

$ sed -i 's/archive_mode = on/archive_mode = off/g' /dbdata/datarev_backupid/postgresql.conf
$ sed -i 's/port = 51000/port = 41000/g' /dbdata/datarev_backupid/postgresql.conf
$ cat postgresql.conf|grep -i "port = 41000"
$ cat postgresql.conf|grep -i "archive_mode = off"

## 启动数据库
## 指定恢复的目录,并启动数据库
su - omm
$ gs_ctl start -D /dbdata/datarev_backupid

## 登录数据库并验证
su - omm
$ gsql -d postgres -p 41000 -r
\l+
select sysdate;
\q

## 关闭数据库
su - omm
$ gs_ctl stop -D /dbdata/datarev_backupid
$ ps -ef|grep mogdb

6、基于备份时间恢复
基于时间点恢复,备份时间应大于完全备份集备份时间,并小于归档备份集备份时间,(完全备份集时间 < 恢复时间点 <= 归档备份集时间)
## 确定恢复时间点,检查归档日志备份,并与生产数据库比较
su - omm
$ ls -ltr /dbdata/dbback/wal/bak/*

#生产数据库归档对比
su - omm
$ ls -ltr /dbdata/dbback/wal/bak/000000010000000200000055

## 确认恢复时间可以为(2022-04-11 01:59:59),其中归档每两小时备份一次
## 恢复全量数据,注意自动创建了recovery.conf
su - omm
$ gs_probackup restore --force --skip-block-validation -B /dbdata/dbback --instance=bak --recovery-target-time='2022-04-11 01:59:59' -D /dbdata/datarev_backuptime

## 修改参数(数据库端口号和归档模式)
su - omm
$ cd /dbdata/datarev_backuptime
$ cat postgresql.conf|grep -i "port = 51000"
$ cat postgresql.conf|grep -i "archive_mode = on"
$ sed -i 's/archive_mode = on/archive_mode = off/g' /dbdata/datarev_backuptime/postgresql.conf
$ sed -i 's/port = 51000/port = 31000/g' /dbdata/datarev_backuptime/postgresql.conf
$ cat postgresql.conf|grep -i "port = 31000"
$ cat postgresql.conf|grep -i "archive_mode = off"

## 检查/修改recovery.conf文件
su - omm
vi /dbdata/datarev_backuptime/recovery.conf
# 插入
restore_command = 'cp /dbdata/dbback/wal/bak/%f %p'

##备份xlog文件目录
##su - omm
##$ cp -r /dbdata/xlog /dbdata/xlog_bak0413
## 启动数据库,并进行增量恢复
su - omm
$ gs_ctl start -D /dbdata/datarev_backuptime

## 查看归档日志的恢复状态
$ cat /dbdata/log/omm/pg_log/dn_6001/postgres_24.log

## 登录数据库并验证
su - omm
$ gsql -d postgres -p 31000 -r
\l+
select sysdate;
\q

## 关闭数据库
su - omm
$ gs_ctl stop -D /dbdata/datarev_backuptime
$ ps -ef|grep mogdb

注意事项
-
需要在恢复的数据库上安装数据库软件,要求和生产数据库版本一致
-
增量恢复通过全量备份和归档备份相互组合,共同将数据恢复时间推近故障时间点,为发生故障时的首选恢复手段,但是需要注意的是,如果归档不连续,则会恢复失败
-
无论是全量恢复,还是增量恢复,都需要新建一个数据目录,不能在原数据目录下恢复,并且在数据库启动前,需要重新指定端口参数,并使用指定目录的手动方式(gs_ctl)启动数据库
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




