暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Mogdb/OpenGauss GS_PROBACKUP异地恢复实践

原创 伊织鸟 2022-05-09
1159

测试用例:

数据库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

图片.png

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

图片.png

3、建立测试目录

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

图片.png

4、检查备份状态

## 查看备份集信息 # su - omm $ gs_probackup show -B /dbdata/dbback $ gs_probackup show -B /dbdata/dbback --archive

图片.png

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

图片.png

5、基于备份集名称恢复

## 恢复数据 su - omm $ gs_probackup restore --force --skip-block-validation -B /dbdata/dbback --instance=lbak -i R9Z722 -D /dbdata/datarev_backupid

图片.png

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

图片.png

$ 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"

图片.png

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

图片.png

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

图片.png

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

图片.png

6、基于备份时间恢复

基于时间点恢复,备份时间应大于完全备份集备份时间,并小于归档备份集备份时间,(完全备份集时间 < 恢复时间点 <= 归档备份集时间)

## 确定恢复时间点,检查归档日志备份,并与生产数据库比较 su - omm $ ls -ltr /dbdata/dbback/wal/bak/*

图片.png

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

图片.png

## 确认恢复时间可以为(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

图片.png

## 修改参数(数据库端口号和归档模式) 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"

图片.png

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

图片.png

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

图片.png

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

图片.png

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

图片.png

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

图片.png

注意事项

  • 需要在恢复的数据库上安装数据库软件,要求和生产数据库版本一致

  • 增量恢复通过全量备份和归档备份相互组合,共同将数据恢复时间推近故障时间点,为发生故障时的首选恢复手段,但是需要注意的是,如果归档不连续,则会恢复失败

  • 无论是全量恢复,还是增量恢复,都需要新建一个数据目录,不能在原数据目录下恢复,并且在数据库启动前,需要重新指定端口参数,并使用指定目录的手动方式(gs_ctl)启动数据库

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论