
【干货】Greenplum备份恢复工具gpbackup(上篇)
编者按:最近,社区的小伙伴一直在问gpbackup的问题,这几天便花了点时间看了看源码,整理一个gpbackup的主题文章,希望能够帮到大家。
gpbackup 的分享主题计划分成3篇文章:
- gpbackup简介与源码编译
- gpbackup详细使用方法
- gprestore详细使用方法及总结
上篇文章,我们首先来介绍一下gpbackup,并从github上拉取源码进行编译。
PART.01
gpbackup 简介
Greenplum是MPP架构的分析型数据库,其核心源码从2015年的v4.3版本开始开源至今,已经有6年多的时间了,起初,开源版本的并行备份恢复工具叫gpcrondump和gpdbrestore。由于这个工具存在一些已知的缺陷,比如单独备份一个大压缩包导致单表恢复操作时间过长等,官方目前已经开发了替代工具gpbackup和gprestore并进行了开源,GitHub地址为:https://github.com/greenplum-db/gpbackup 。
已知gpbackup和gprestore适配的Greenplum版本如下:
参考自社区大牛陈淼的《Greenplum-Database管理员指南6.2》,在此对作者的分享表示感谢,大家也可以学习该文档的 “并行备份gpbackup与gprestore” 部分,了解更多的相关内容。
- GPDB 4.3.22及以后版本
- GPDB 5.5.0及以后版本
- GPDB 6.0.0及以后版本
这里对各个版本的备份工具做一下总结: - GPDB 4.x/5.x的某些版本(具体版本参考上面),可以同时使用gpcrondump和gpbackup两种工具;
- GPDB 6.x版本开始,gpcrondump已经去掉了,只能使用gpbackup工具;
- GPDB 6.x版本开始,官方版本的gpbackup提供单独的安装包,需要自行从vmware tanzu下载使用;开源版本的gpbackup可以从GitHub Release(https://github.com/greenplum-db/gpbackup/releases)上下载发布包,或者自己进行源码编译。
PART.02
gpbackup 源码编译
gpbackup是基于Golang写的,已经有很多网友在网上做了源码分析,这里再絮叨一下源码编译的过程吧,方便大家有一个整体的认识。
2.1 Golang环境配置
因为gpbackup是基于golang开发的,所以首先要配置golang基础开发环境,这里大家要注意,因为golang可以直接编译跨平台的包,所以你可以选择在Mac上交叉编译Linux系统用的包,只需要指定不同的编译标签(编译部分再详细介绍)。
1)安装Golang
大家首先从 https://golang.google.cn/dl/ 下载准备用于编译gpbackup的操作系统对应的软件包,整个Linux的安装包是通用的,只需要分清楚CPU架构是ARM还是X86即可。
下载完成后,需要自己进行安装,通常安装在对应操作系统的默认软件位置,比如这里我安装在/usr/local/go。这个路径,就是所谓的GOROOT。
安装完成后,需要配置三个环境变量:
环境变量配置完成后,在命令行执行如下命令,如果显示正常,说明配置有效:
2)在GOPATH下创建相应的文件夹
2.2 gpbackup 源代码下载编译
1)下载源代码
源代码的下载方式有两种,第一种是参考官方的指导使用go get,第二种是直接git把代码拉下来。
第一种:执行如下命令下载源代码:
这种方式拉下来的源代码,我这边的位置有点奇怪,仅供参考:
第二种:执行如下命令下载源代码:
以上两种方式可以任选一种,我们习惯性的使用git去clone源代码,并且这种方式可以明确的获知源代码的下载位置,我个人感觉更好一些;另外虽然在golang里面,使用go mod方式管理依赖时,不再需要GOPATH,但是在gpbackup里,GOPATH这个环境变量是必选项,不可以省略,因为最终打包好的文件会放到$GOPATH/bin下面。
2)编译
交叉编译的选项如下:
最后你从$GOPATH/bin/下面会找到如下三个包:
便已完成后,执行如下命令安装即可(或者手工copy):
PART.03
gpbackup 使用示例
在本节的最后部分,通过一个简单的例子,带大家看一下如何使用gpbackup。
直接执行命令gpbackup --dbname postgres :
因授权导致的错误
如果你在执行备份命令时出现以下错误,可能跟pg_hba.conf文件中的访问授权有关:
从以上错误中可以看出,gpbackup在连接到数据库时,采用的是pqx的connection url的方式,该报错是因为pg_hba.conf文件中对allinone这个主机的gpadmin用户访问做了密码限制,可以把密码限制放开,改为trust即可。
如果生产必须要求所有的IP(除了socket外)均需要密码验证,那么请在执行gpbackup之前配置环境变量PGPASSWORD,如下:
gpbackup支持从以下环境变量中取值:
- PGHOST
- PGPORT
- PGUSER
- PGPASSWORD
下一篇,我们将介绍gpbackup详细使用方法。
作者简介
苑泽福,Greenplum中文社区专家
曾供职于鼎兴达、瀚高,拥有丰富的数据库开发运维经验,近年来一直专注于Greenplum 数据库,完成了多个基于Greenplum的数据平台的落地
文章转自公众号:Greenplum中文社区
