Greenplum 的一次紧急恢复

简介: Greenplum的一次非常规恢复方法

[TOC]

概述

客户的GP节点磁盘遭遇损坏,导致数据丢失。gprecoverseg命令无法恢复节点后做的一次非常规Greenplum恢复操作。

使用背景

在某次紧急运维下,我发现用户GP的某一个primary节点的状态异常,已经显示down掉,在确认所在的机器和磁盘没有异常后,我使用gprecoverseg命令去同步已经down的primary节点。但是失败了,在使用gpstate -e查看到的同步进度中看到同步了一会儿,但是随后失败了。(失败的原因是因为该mirror节点的磁盘曾经坏过,做过恢复,但是恢复的数据不是很完全,导致同步时校验出错),在该mirror节点的日志信息中查看到下面这段信息:

2019-03-16 21:30:35.341666 CST,,,p108637,th-1138622144,,,,0,,cmd126,seg-1,,,,,"ERROR","58P01","could not open relation 1663/43186/8782691: No such file or directory",,,,,,"(null)",0,,"md.c",1371,"Stack trace:
1    0xaf75c6 postgres errstart + 0x1f6
2    0x9f62ca postgres <symbol not found> + 0x9f62ca
3    0x9f7980 postgres mdnblocks + 0xf0

gprecoverseg命令会去从mirror节点获取数据去恢复primary节点,获取的数据多少在GP master的元数据表中都有记录,但是此时,mirror上的数据已经丢失,同步数据的进程到这里出错,因为找不到要找的表的数据,就直接退出,不再同步数据了,导致命令失败。

这种情况下,其实Greenplum的一主一备的高可用已经被破坏。数据已经永久丢失了,Greenplum本身没有什么好的办法恢复集群的状态了。

另辟蹊径

客户机器在mirror的支持下,依然是可以运行的,数据库的使用是正常的,但是客户担忧负载在一台机器磁盘上,依然会有风险,需要把GP恢复到完备的状态,其实我们还是有一个强行恢复Greenplum的方法

因为Greenplum的primary和mirror的文件目录的信息是完全一致的,不论是参数文件还是数据文件。我们完全可以手动将mirror上的文件目录拷贝过来,作为primary使用。但是要想让greenplum在下次启动时默认primary是好的去运行,还得做一些操作,完整如下:

将数据库先关闭,保证业务停止,mirror的数据目录不再有数据变化

gpstop -m fast

将mirror的数据目录完整发送到primary的目录

scp -r gpseg12 @sdw2:/data/primary/gpseg12           :示例

完成之后,再单独将master节点启动

gpstart -m

进入到master数据库中(其实master数据库有三个template0,template1和postgres,这三个是全局的,进哪一个都一样)

PGOPTIONS='-c gp_session_role=utility' psql template1

获取系统表的DML权限,以便后续修改状态

set allow_system_table_mods='dml';

预防起见,将数据库的该系统表做一次备份

create table  16_gp_segment_configuration  as select * from gp_segment_configuration

将坏的节点全部状态信息改为正常,人为修改它的状态

update gp_segment_configuration SET status='u' where dbid=3;

退出后关闭master节点

gpstop -m

最后将数据库正常启动

gpstart -a

启动完成之后,再看看集群的状态全部正常了。数据库也正常运行了。

后记

此种恢复的方法,关键点在于需要保证mirror作为数据目录,是可以正常运行的,也得保证将此目录完整的拷贝到primary中。

相关文章
|
4月前
|
关系型数据库 MySQL 数据库
数据库第四次作业 数据备份与还原
数据库第四次作业 数据备份与还原
35 0
数据库第四次作业 数据备份与还原
|
7月前
|
存储 Oracle 算法
数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
ORACLE数据库常见故障: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。
|
10月前
|
安全 关系型数据库 数据库
数据安全无忧!探索 PostgreSQL 基础备份和时间点恢复的完全指南
数据安全无忧!探索 PostgreSQL 基础备份和时间点恢复的完全指南
73 0
|
运维 数据库 Windows
【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库
【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库
185 0
【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库
|
Oracle 关系型数据库
dataguard 增量恢复
dataguard 增量恢复
104 0
|
存储 Unix BI
数据备份和恢复方案(1)
数据备份和恢复方案(1)
203 0
|
SQL 关系型数据库 数据库
如何在PostgreSQL故障切换后找回丢失的数据
作者简介 陈华军,苏宁易购云软件公司架构专家,主要负责数据库产品的相关设计工作。十年以上数据库相关工作经验。PostgreSQL中文社区核心组成员,主要负责PostgreSQL中文手册翻译项目的维护。 1. 背景 PostgreSQL的HA方案一般都基于其原生的流复制技术,支持同步复制和异步复制模式。 同步复制模式虽然可以最大程度保证数据不丢失,但通常需要至少部署三台机器,确保有两台以上的备节点。 因此很多一主一备HA集群,都是使用异步复制。 在异步复制下,主库宕机,把备节点切换为新的主节点后,可能会丢失最近更新的少量数据。 如果这些丢失的数据对业务比较重要,那么,能不能从数据库里找回来呢?
426 0
|
存储 运维 关系型数据库
十年难得一遇!从数据误删到全量恢复的惊险记录
线上的数据库服务我们有完善的备份策略和恢复预案,数据即使被误删除了也是能够恢复的,误删除的数据量恢复只是时间问题。但各位同学自己部署的测试环境或者是在自己电脑中的开发环境的数据库就没有同级别的资源保障了。如果恰好你又把一些不能丢失的数据放到了这种环境中,那么建议要做定期备份,有备才能无患。
|
监控 关系型数据库 Shell
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 25 章 备份和恢复_25.3. 连续归档和时间点恢复(PITR)
25.3. 连续归档和时间点恢复(PITR) 25.3.1. 建立WAL归档 25.3.2. 制作一个基础备份 25.3.3. 使用低级API制作一个基础备份 25.3.4. 使用一个连续归档备份进行恢复 25.3.5. 时间线 25.3.6. 建议和例子 25.3.7. 警告 在任何时间,PostgreSQL在数据集簇目录的pg_wal/子目录下都保持有一个预写式日志(WAL)。
1860 0
|
存储 关系型数据库 数据库