Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何判断你买的域名有没有被K过?
不知道大家有没有遇到过这种情况,Google不收录你的外贸网站。这个问题困扰了我很久,从SEO的角度来说,这个外贸网站基本是废了,一直想知道为什么?查来查去,终于找到了原因,原来是域名的问题。
躲在树上的域小名
2018/01/23
6.4K0
linux下查询域名或IP注册信息的操作记录(whois)
在运维工作中,有时需要查询某些域名的注册信息(域名的NS,注册用户,注册邮箱等),可以使用whois这个命令。 whois命令令用来查找并显示指定帐号(或域名)的用户相关信息,因为它是到Network Solutions的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别。 即whois命令会列出给出的域名的域名所有者的信息。 如果系统里没有安装whois,可以用以下命令安装 [root@bastion-IDC ~]# yum search whois [root@ba
洗尽了浮华
2018/01/23
7.6K0
最新域名和子域名信息收集技术
WHOIS是一个标准的互联网协议,可用于收集网络注册信息、注册域名﹑IP地址等信息。简单来说,WHOIS就是一个用于查询域名是否已被注册及注册域名详细信息的数据库(如域名所有人、域名注册商)。
Ms08067安全实验室
2023/08/18
1.8K0
最新域名和子域名信息收集技术
宝藏网站系列:这个网站号称万能
之前分享过宝藏网站 https://www.heji.ltd/ 这个网站堪称宝藏,收藏起来吧 ,今天分享的是宝藏网站系列之万能命令https://wanneng.run/cn/ ,它将各种高质量的在线工具按应用站点聚合起来,让你以方便快捷好记的方式寻找和使用网页型在线工具 。
苏生不惑
2020/09/28
3.1K0
宝藏网站系列:这个网站号称万能
web渗透测试——信息收集上(超详细)
渗透测试流程中最重要的就是进行信息收集,在这个阶段,我们要尽可能多的收集目标组织的信息。所谓“知己知彼,百战不殆”,我们越是了解测试目标,渗透测试的工作就越容易。
红队蓝军
2024/07/01
8800
web渗透测试——信息收集上(超详细)
Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。
天钧
2020/04/24
4.4K0
Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
网站是一个安装在电脑上的应用程序,它有操作系统、应用程序以及服务器。例如WAMP包括:
Eastmount
2021/12/02
2.4K0
[网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
[网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
最近开始学习网络安全和系统安全,接触到了很多新术语、新方法和新工具,作为一名初学者,感觉安全领域涉及的知识好广、好杂,但同时也非常有意思。所以我希望通过这100多篇网络安全文章,将Web渗透的相关工作、知识体系、学习路径和探索过程分享给大家,我们一起去躺过那些坑、跨过那些洞、守住那些站。未知攻,焉知防,且看且珍惜,也希望您能推荐和支持作者的公众号。
Gcow安全团队
2020/08/25
6.4K0
[网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
老域名怎么购买?老域名的优势!
众所周知,老域名建站已经成为提升网站权重,获得高排名的不二之选,除了发布优质外链外,选择老域名是一天就可以到达罗马的。那么老域名怎么购买呢?老域名的优势又是什么?
用户8354268
2021/08/11
33.4K0
老域名怎么购买?老域名的优势!
老域名做新站如何能快速得上首页?
最近,开始使用一些老域名来搭建网站,去做关键词的排名,之前就没有过多去关注过老域名的价值。
躲在树上的域小名
2018/01/23
2.5K0
我是如何黑掉英国间谍软件公司Gamma的
前几天,有黑客《入侵了英国间谍软件公司Gamma》。本文翻译自黑客自己公布的入侵指南。详细的介绍了从信息收集,到发现目标站点,以及进行源码审计,绕过waf注入,尝试提权服务器的整个过程。 0×00 开篇 我写这篇文章不是为了吹嘘自己有多牛逼,使用了多高深的技术去搞定Gamma。我只是想揭开黑客技术神秘的面纱,告诉人们黑客技术很普通,你也可以利用黑客技术去反抗这个世界上那些见不得人的事。如果你没有任何编程或者hacking的经验,那些下面的文章可能会看起来像天书一样。没有关系,文章最后的参考资料会帮助你慢慢开
FB客服
2018/02/05
2.2K0
渗透测试中信息收集的那些事
在一次护网行动中再次深刻意识到了信息收集对于渗透测试整个流程的重要性,信息收集的完整性决定了你的渗透测试结果,“知己知彼,百战不殆”。
网络安全自修室
2021/12/09
1.3K0
渗透测试中信息收集的那些事
关于xyz域名被注册局封禁的处理流程
前几天在写cloudflare相关的worker 和反向代理的教程时候,为了做演示我也新建了不少的站点。然后今天再次新建站点绑定自定义域名时候,发现怎么也无法绑定上自定义域名。访问之前的已解析出来的域名也都失败。在CF的站内信里,cf提示我的1个网站有网络钓鱼行为,我当场慌了,然而这个网站的URL(或者说是域名)我在写完教程后就给删除了。怎么还会被访问到呢
huolong
2024/12/25
1.2K0
关于xyz域名被注册局封禁的处理流程
徐大大seo:独立站SEO如何分析竞争对手之策略与教程
分析竞争对手是我们在做谷歌seo中至关重要的一步。通过分析竞争对手,我们可以很清晰的知道我们跟竞争对手的差距,以及我们行业竞争到底有多大。通过分析竞争对手数据,我们可以很快找到比较有效的关键词,效果比较好的外链,以及我们通过那些渠道去推广能获取比较好的效果。我们可以确定超越他们我们需要做什么样的内容,需要多少比较好质量的资源。
徐大大seo
2022/05/14
6110
.app 域名发布了,我们可以使用 Python 做点什么?
.app 域名是前段时间谷歌花费2500万美元竞拍获得,是全球首个需要 HTTPS 加密的顶级域名。该域名从2018年5月8日开始全面接受注册,由于这个域名对于现今移动 APP 的发展有着非常重要的意义,所以必将带来一波域名疯抢的高潮。那么,在这波域名抢注的机会中,我们可以使用 Python 做点什么呢?
Hopetree
2022/09/26
1.2K0
.app 域名发布了,我们可以使用 Python 做点什么?
Kali Linux渗透基础知识整理(一):信息搜集(一)
收集渗透目标的情报是最重要的阶段。如果收集到有用的情报资料的话,可以大大提高对渗透测试的成功性。收集渗透目标的情报一般是对目标系统的分析,扫描探测,服务查点,扫描对方漏洞,查找对方系统IP等,有时候渗透测试者也会用上“社会工程学”。渗透测试者会尽力搜集目标系统的配置与安全防御以及防火墙等等。
网e渗透安全部
2019/08/09
1.9K0
Kali Linux渗透基础知识整理(一):信息搜集(一)
【Web攻防】红队外围信息收集【总结】
由于红队不同于一般的渗透测试,强调更多的是如何搞进去拿到相应机器权限或者实现某特定目的,而不局限于你一定要在什么时间,用什么技术或者必须通过什么途径去搞,相比传统渗透测试,红队则更趋于真实的入侵活动,这种场景其实对防御者的实战对抗经验和技术深度都是比较大的挑战
全栈程序员站长
2022/09/10
3.9K0
安全工具系列 -- 信息收集
信息收集一般都是渗透测试前期用来收集,为了测试目标网站,不得不进行各种信息收集。信息收集要根据不同目标进行不同方向收集,工具部分会在下节课程进行讲解,根据个人渗透测试经验总结文章。本文只是抛砖引玉,希望可以给大家一个好的思路。如果文章中有环境搭建部分,靶场后续会在公众号中发布。视频在关注公众号以后,回复我要视频,管理员会在最快时间进行回复。
HACK学习
2019/08/07
3.3K0
安全工具系列 -- 信息收集
Whois、Dns、旁站C段查询 - 信息搜集篇 - 渗透红队笔记
大家好,这里是 渗透攻击红队 的第 八 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),笔记复现来源于《渗透攻击红队百科全书》出自于 亮神 ,每周一更
用户6343818
2020/10/23
7.8K0
Whois、Dns、旁站C段查询 - 信息搜集篇 - 渗透红队笔记
全流程信息收集方法总结
作为一名菜鸟,第一次写文章,有点紧张,希望大佬们轻点。 我写这个是对自己的一个总结和记录,也希望对新手有所帮助!
FB客服
2019/03/08
2.7K0
全流程信息收集方法总结
推荐阅读
相关推荐
如何判断你买的域名有没有被K过?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验