前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Snova运维篇(三):GP数据库备份和恢复

Snova运维篇(三):GP数据库备份和恢复

原创
作者头像
snova-最佳实践
发布于 2019-12-26 03:41:09
发布于 2019-12-26 03:41:09
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

本节主要从gp数据备份和恢复角度深入学习gp数据库定期执行备份能确保在数据损坏或者系统失效发生时能恢复数据或者重建Greenplum数据库系统。用户还可以使用备份从一个Greenplum数据库系统迁移数据到另一个。

目录:

  1. 全量备份gpcrondump工具
  2. 增量备份
  3. 直接IO
  4. 有名管道数据传输
  5. 数据恢复

基本概念:

mkfifo

命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的没有名字的管道(匿名管道)类似。


1. 全量备份 gpcrondump工具

Master的备份文件包含用于创建数据库模式的SQL命令。Segment的数据转储文件包含将数据装载到表中的SQL语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master ~]$ gpcrondump -x komablog
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Starting gpcrondump with args: -x komablog
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:----------------------------------------------------
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Master Greenplum Instance dump parameters
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:----------------------------------------------------
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Dump type                            = Full database
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Database to be dumped                = komablog
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Master port                          = 5432
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Master data directory                = /data/master/gpseg-1
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Run post dump program                = Off
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Rollback dumps                       = Off
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Dump file compression                = On

默认备份目录在数据目录下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master db_dumps]$ pwd
/data/master/gpseg-1/db_dumps
[gpadmin@gp-master db_dumps]$ ls
20191225
[gpadmin@gp-master db_dumps]$ ll 20191225/
total 32
-rw------- 1 gpadmin gpadmin  114 Dec 25 14:59 gp_cdatabase_-1_1_20191225145856
-rw------- 1 gpadmin gpadmin 1180 Dec 25 14:59 gp_dump_-1_1_20191225145856.gz
-rw------- 1 gpadmin gpadmin  366 Dec 25 14:59 gp_dump_-1_1_20191225145856_post_data.gz
-rw-rw-r-- 1 gpadmin gpadmin    1 Dec 25 14:59 gp_dump_20191225145856_ao_state_file
-rw-rw-r-- 1 gpadmin gpadmin    1 Dec 25 14:59 gp_dump_20191225145856_co_state_file
-rw-rw-r-- 1 gpadmin gpadmin    1 Dec 25 14:59 gp_dump_20191225145856_last_operation
-rw-rw-r-- 1 gpadmin gpadmin 1022 Dec 25 14:59 gp_dump_20191225145856.rpt
-rw------- 1 gpadmin gpadmin 2541 Dec 25 14:59 gp_dump_status_-1_1_20191225145856

gpcrondump常用选项:

-t schema.tablename – 指定一个要包括在备份中的表。可以多次使用-t选项。

--table-file=filename – 指定一个文件,其中含有要包括在备份中的表的列表。

-T schema.tablename – 指定一个要从备份中排除的表。可以多次使用-T选项。

--exclude-table-file=filename – 指定一个文件,其中含有要从备份中排除的表的列表。

-s schema_name – 在备份中包括所有以指定方案名限定的表。可以多次使用-s选项。

--schema-file=filename – 指定一个文件,其中含有要包括在备份中的方案列表。

-S schema_name – 在备份中排除指定方案名限定的表。可以多次使用-S选项。

--exclude-schema-file=filename – 指定一个文件,其中含有要从备份中排除的方案列表。

2. 增量备份

改变Greenplum数据库的Segment配置会让增量备份无效。在更改了Segment配置后必须先创建和一个完全备份,才能接着创建增量备份。

操作实例:

  • 首先创建全量备份并自定义备份目录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gpcrondump -x mytest -u /backupdir     
  • increntmnet增量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gpcrondump -x mytest -u /backupdir --incremental
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gpdbrestore -t 20170114051246 -u /backupdir

3.直接IO

直接I/O允许用户绕过缓存,这样应用会直接写到存储设备。这种方式可以节约CPU消耗并且消除一次数据拷贝操作。

操作系统级别的IO优化。

  • 打开直接IO
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master ~]$ gpconfig -c gp_backup_directIO -v on

查看是否被启用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gpconfig -s gp_backup_directIO
  • 修改IO数据块大小

查看当前数据块大小:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master ~]$  gpconfig -s gp_backup_directIO_read_chunk_mb
Values on all segments are consistent
GUC          : gp_backup_directIO_read_chunk_mb
Master  value: 20
Segment value: 20

修改数据块为10MB:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gpconfig -c gp_backup_directIO_read_chunk_mb -v 10

4.使用命名管道

如果Segment主机没有足够的本地磁盘空间来备份到文件,用户可以使用命名管道备份到非本地存储,例如在网络上另一台主机上的存储或者一种备份装置。

实例演示:

  • 为komablog生成备份文件列表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master ~]$ gpcrondump -x komablog -K 20150519160000 --list-backup-files -u /data/testdir
20191226:10:23:58:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Starting gpcrondump with args: -x komablog -K 20150519160000 --list-backup-files -u /data/testdir
20191226:10:23:59:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Added the list of pipe names to the file: /data/testdir/db_dumps/20150519/gp_dump_20150519160000_pipes
20191226:10:23:59:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Added the list of file names to the file: /data/testdir/db_dumps/20150519/gp_dump_20150519160000_regular_files
20191226:10:23:59:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Successfully listed the names of backup files and pipes
  • 列出backup中的目录文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master data]$ tree testdir/
testdir/
`-- db_dumps
    `-- 20150519
        |-- gp_dump_20150519160000_pipes
        `-- gp_dump_20150519160000_regular_files

2 directories, 2 files
  • 查看pipes文件的内容
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master 20150519]$ cat gp_dump_20150519160000_pipes
gp-node1:/data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
gp-node2:/data/testdir/db_dumps/20150519/gp_dump_1_3_20150519160000.gz
gp-master:/data/testdir/db_dumps/20150519/gp_dump_-1_1_20150519160000.gz
gp-master:/data/testdir/db_dumps/20150519/gp_dump_-1_1_20150519160000_post_data.gz
  • 在Greenplum数据库的Segment上创建指定的命名管道。还未命名管道设置一个读取器。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gpadmin@gp-master 20150519]$ gpssh -h gp-node1
=> mkfifo /backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
[gp-node1] mkfifo: cannot create fifo ‘/backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz’: No such file or directory
=> mkfifo /data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
[gp-node1] mkfifo: cannot create fifo ‘/data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz’: File exists
=> mkfifo /data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
[gp-node1]
=> cat /data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.g|nc -l 21000
  • 接收备份文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nc gp-node1 21000 > gp_dump_0_2_20150519160000.gz
  • 运行gpcrondump开始备份:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gpcrondump -x komablog -K 20150519160000  -u /testdir
  • 从命名管道恢复备份数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gpdbrestore -x komablog -t 20150519160000 -u /testdir

5.恢复数据

工具gpdbrestore

-t timestamp – 恢复带有指定时间戳的备份。

-b YYYYYMMDD – 恢复Segment数据目录的db_dumps子目录中指定日期的转储文件。

-s database_name – 恢复指定数据库在Segment数据目录中能找到的最后一组转储文件。

-R hostname:path – 恢复位于一台远程主机上指定目录中的备份集。

  • 指定时间戳回复
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gpdbrestore -t 20151013195916 --list-backup
  • 恢复数据到新的数据库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gpdbrestore -s grants --redirect grants_snapshot
  • 从远程主机备份数据恢复

1>确保远程主机可访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ping archive_host

2>确保gpadmin账户可用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ssh gpadmin@archive_host

3>确保可以回ping的master主机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ping mdw

4>确保需要恢复的数据库已建好

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ createdb database_name

5>master上运行恢复命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gpdbrestore -R archive_host:/gpdb/backups/archive/20120714 -e dbname

-e 忽略已经被创建的数据库

不同系统配置数据库的恢复

  • 确保数据库已经有完整的备份

包括Master的转储文件(gp_dump_-1_1_timestamp、gp_dump_-1_1_timestamp_post_data)以及每个Segment实例一个的转储文件(例如gp_dump_0_2_timestamp、gp_dump_1_3_timestamp、gp_dump_2_4_timestamp等等)

  • 确保要恢复的数据库已创建
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ createdb database_name
  • 装载Master转储文件来恢复数据库对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ psql database_name -f /gpdb/backups/gp_dump_-1_1_20160714
  • 装载每一个Segment转储文件来恢复数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ psql database_name -f /gpdb/backups/gp_dump_0_2_20160714
$ psql database_name -f /gpdb/backups/gp_dump_1_3_20160714
$ psql database_name -f /gpdb/backups/gp_dump_2_4_20160714
$ psql database_name -f /gpdb/backups/gp_dump_3_5_2016071
  • 装载后续数据文件来恢复索引、触发器、主键约束等数据库对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ psql database_name -f /gpdb/backups/gp_dump_0_5_20160714_post_data
  • 更新数据库序列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gunzip -c path_to_master_dump_directory/gp_dump_-1_1_timestamp.gz | egrep "SET search_path|SELECT pg_catalog.setval"  
   > schema_path_and_seq_next_val
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gunzip -c /data/gpdb/master/gpseg-1/db_dumps/20150112/gp_dump_-1_1_20150112140316.gz 
  | egrep "SET search_path|SELECT pg_catalog.setval" > schema_path_and_seq_next_val
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
psql test_restore -f schema_path_and_seq_next_val

未完待续;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
GreenPlum官方监控工具之GPCC 6.8.3安装配置
GPCC 监控系统性能指标,分析集群健康状况,并使数据库管理员能够在 Greenplum Database 环境中执行管理任务。它提供了一个本地浏览器的 HTML5 图形控制台,用于查看 Greenplum Database 系统指标和执行某些数据库管理任务。
AiDBA宝典
2023/04/27
8860
GreenPlum官方监控工具之GPCC 6.8.3安装配置
GreenPlum备份和恢复工具之gpbackup和gprestore
Greenplum数据库支持并行和非并行方法来备份和还原数据库。并行操作可扩展,而与系统中段的数量无关,因为段主机各自将数据同时写入本地磁盘存储中。对于非并行备份和还原操作,必须通过网络将数据从网段发送到主服务器,主服务器将所有数据写入其存储中。除了将I/O限制在一台主机之外,非并行备份还要求主服务器具有足够的本地磁盘存储空间来存储整个数据库。
AiDBA宝典
2023/11/06
2.1K1
GreenPlum备份和恢复工具之gpbackup和gprestore
Snova运维篇(二):GP集群配置和高可用特性
Greenplum数据的配置文件postgresql.conf位于数据库实例的数据目录之下。
snova-最佳实践
2019/12/24
1.4K0
Snova运维篇(二):GP集群配置和高可用特性
snova运维篇(四):GP集群扩容
扩容开始后,降低大规模操作的进程,重新分布表,移除扩展方案,运行健康检查,查看统计信息。
snova-最佳实践
2019/12/26
1.7K0
snova运维篇(四):GP集群扩容
docker安装Greenplum
Greenplum是业界最快最高性价比的关系型分布式数据库,它在开源的PostgreSQL的基础上采用MPP架构(Massive Parallel Processing,海量并行处理),具有强大的大规模数据分析任务处理能力。
summerking
2022/10/27
2.3K0
docker安装Greenplum
GreenPlum数据库故障恢复测试
环境介绍: Gpdb版本:5.5.0 二进制版本 操作系统版本: CentOS linux 7.0 Master segment: 192.168.1.225/24 hostname: mfsmaster Stadnby segemnt: 192.168.1.227/24 hostname: server227 Segment 节点1: 192.168.1.227/24 hostname: server227 Segment 节点2: 192.168.1.17/24 hostname: server17 Segment 节点3: 192.168.1.11/24 hostname: server11 每个segment节点上分别运行一个primary segment和一个mirror segment
星哥玩云
2022/08/16
8620
GreenPlum数据库故障恢复测试
Snova运维篇(九):gp数据库中数据的基本操作-1
一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。
snova-最佳实践
2019/12/30
2.4K0
Snova运维篇(九):gp数据库中数据的基本操作-1
greenplum gpcrondump命令使用
https://gp-docs-cn.github.io/docs/admin_guide/managing/backup-gpcrondump.html
小徐
2019/05/21
2K0
greenplum gpcrondump命令使用
GreenPlum管理数据库
在后备Master主机上,移动或者移除数据目录gpseg-1。这个例子移动该目录:
AiDBA宝典
2023/11/16
4170
GreenPlum管理数据库
在Docker中快速体验GreenPlum 7.0.0和gpcc 7.0.0
GreenPlum 7.0.0正式版已于2023.09.29发布,基于PG 12.12内核版本。
AiDBA宝典
2023/11/16
9620
在Docker中快速体验GreenPlum 7.0.0和gpcc 7.0.0
GreenPlum 6.19.3 安装部署基础版
Greenplum是一个面向数据仓库应用的关系型数据库,因为有良好的体系结构,所以在数据存储、高并发、高可用、线性扩展、反应速度、易用性和性价比等方面有非常明显的优势。Greenplum是一种基于PostgreSQL的分布式数据库,其采用sharednothing架构,主机、操作系统、内存、存储都是自我控制的,不存在共享。 本质上讲Greenplum是一个关系型数据库集群,它实际上是由数个独立的数据库服务组合成的逻辑数据库。与RAC不同,这种数据库集群采取的是MPP(Massively Parallel Processing)架构。跟MySQL、Oracle 等关系型数据不同,Greenplum可以理解为分布式关系型数据库。 关于Greenplum的更多信息请访问https://greenplum.org/
AiDBA宝典
2023/04/27
1.7K0
GreenPlum 6.19.3 安装部署基础版
Greenplum编译安装
Greenplum部署手册 一、环境准备 操作系统 ARM-Neokylin7.6-64bit 安装包 greenplum6.9.1(源码) 设置语言 echo "export LANG=en_US.UTF-8" >> /etc/profile source /etc/profile 编译环境 yum install -y curl-devel bzip2-devel python-devel openssl-devel readline-devel perl-ExtUtils-Embed libxml2
shaonbean
2020/09/22
2K0
Snova运维篇(七):GP数据迁移和监控
gptransfer会为每个源Segment设置一个命名管道和一个gpfdist进程。这是用于最优数据传输率的配置并且被称为Fast模式。
snova-最佳实践
2019/12/27
2.3K0
Snova运维篇(七):GP数据迁移和监控
Snova运维篇(八):GP数据库访问管理及认证
Master实例的pg_hba.conf文件控制对Greenplum数据库系统的客户端访问及认证。
snova-最佳实践
2019/12/30
1.1K0
Snova运维篇(八):GP数据库访问管理及认证
RH7.9安装部署GreenPlum 6
1、系统版本:redhat7.9 2、硬件:3台虚拟机,2核,16G内存,50G硬盘 3、实验节点规划一个master, 4个segment,4个mirror,无standby
Lucifer三思而后行
2021/08/17
7750
Snova基础篇(三):Greenplum集群初始化问题及调试
gpinitsystem 的日志文件。默认路径为 ~/gpAdmin/gpinitsystem_***
snova-最佳实践
2019/12/20
1.8K0
Snova基础篇(三):Greenplum集群初始化问题及调试
Snova运维篇(一):基础维护工具和命令
gpstart工具来启动一个已经由gpinitsystem工具初始化好但已经被gpstop工具停止的Greenplum数据库系统
snova-最佳实践
2019/12/24
7170
Snova运维篇(一):基础维护工具和命令
GreenPlum为master和segment添加镜像
在已经安装的 Greenplum DB ,给 master 节点添加 standby master 节点 。
AiDBA宝典
2023/11/18
5750
GreenPlum为master和segment添加镜像
Greenplum 5.21.1 集群安装部署详述
简单来说GPDB是一个分布式数据库软件,其可以管理和处理分布在多个不同主机上的海量数据。对于GPDB来说,一个DB实例实际上是由多个独立的PostgreSQL实例组成的,它们分布在不同的物理主机上,协同工作,呈现给用户的是一个DB的效果。Master是GPDB系统的访问入口,其负责处理客户端的连接及SQL 命令、协调系统中的其他Instance(Segment)工作,Segment负责管理和处理用户数据。
星哥玩云
2022/08/18
1.1K0
Greenplum 5.21.1 集群安装部署详述
在Docker中快速体验GreenPlum 7.0.0
地址:https://hub.docker.com/r/lhrbest/greenplum/tags
AiDBA宝典
2023/08/10
1.3K0
在Docker中快速体验GreenPlum 7.0.0
相关推荐
GreenPlum官方监控工具之GPCC 6.8.3安装配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验