GreenPlum备份恢复工具之gpbackup和gprestore

0    156    3

Tags:

👉 本文共约19230个字,系统预计阅读时间或需73分钟。

简介及总结

有关gpbackup和gprestore有如下总结点,其它请参考:https://www.xmmup.com/greenplumshujukudebeifenhehuifu.html

1、gpbackup和gprestore是一个逻辑备份工具

2、gpbackup和gprestore是可以并行备份的工具

3、gpbackup和gprestore支持增量备份和压缩备份等功能,增量备份只对AO表起作用

4、gpbackup和gprestore是GreenPlum官方提供的备份恢复工具

5、默认情况下,gpbackup仅在Greenplum数据库master数据目录中存储备份的对象元数据文件和DDL文件。 Greenplum数据库节点使用COPY … ON SEGMENT命令将备份表的数据存储在位于每个节点的backups目录中的压缩CSV数据文件中。

6、需要额外进行安装,默认安装包不带该工具

7、工具是基于Golang写的

8、gpbackup 的必选参数只有 --dbname每次只能备份一个数据库,其他参数均为可选参数,有些参数之间是存在互斥关系的,建议命令:

9、一般备份要比恢复快很多,所以恢复的时候一定要加上--jobs或--copy-queue-size参数。这2个参数在数据库有特大表存在的时候,对整个备份进度影响不大,但恢复的时候会有很大提升。另外,并发度不能太高,否则也影响整体的效率。 这2个参数在备份效率方面并没有差很多。

10、gpbackup在每个独立的表级别使用ACCESS SHARE锁,而不是在pg_class catalog表里加EXCLUSIVE锁。 这使得你可以在backup期间执行任意查询和DML语句,但是如CREATE,ALTER,DROP和TRUNCATE操作,则这些操作会被阻塞。可以考虑通过--exclude-table-file=/home/gpadmin/exclude_tb.txt参数排除掉这些表,但是建表语句也会处于排队状态,影响还是比较大的,不过这些可能和版本有一定的关系,我测试的不同版本情况不太一样,在生产环境上还是要慎重。

11、若不指定备份路径--backup-dir参数,则备份文件会保存在 $MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDhhmmss/ 路径下

12、若还原的集群和备份的集群的segment个数不一样,则还原时需要添加--resize-cluster参数,该参数仅在gpbackup 1.30.2后才生效。

Invoke this option to enable restoring data to a cluster that has a different number of segments than the cluster from which the data was backed up.

In order to enable the --resize-cluster feature you must take backups using gpbackup 1.30.2 or later.

13、若源集群和目标集群的segment数不一致,则分为如下情况:
1、源<目标 ,则备份文件需要拷贝到至少和源一样的segment上
2、源>目标,不能恢复,报错Expected to find 4 file(s) on segment 2 on host sdw1, but found 6 instead.(目前未解决)

14、gpbackup_manager可以列出历史备份信息,这些信息存储在$MASTER_DATA_DIRECTORY/gpbackup_history.db的SQLite的数据库文件中。所以,若要清空历史备份信息,则直接删除文件rm -rf $MASTER_DATA_DIRECTORY/gpbackup_history.db即可。 只有当GreenPlum数据库正常运行时,才可以使用gpbackup_manager工具。

15、若源端和目标端的数据库版本不一致,也可以使用gpbackup和gprestore进行备份和还原,但是要保证源端和目标端的gpbackup和gprestore的版本是一样的。若生产上使用,还需进一步详细测试。

16、若使用--single-data-file --copy-queue-size 8参数进行备份,4个节点,16个segment实例,备份1T数据量大约需要1小时

17、gprestore过程是先创建表,再copy导入数据,最后再创建索引。

18、备份时的会话查询:

19、该工具在系统内部采用SSH连接执行各项操作任务。在大型Greenplum集群、云部署或每台主机部署了大量的 segment实例时,可能会遇到超过主机最大授权连接数限制的情况。此时需要考虑更新SSH配置参数MaxStartups 以提高该限制。

20、gpbackup的--exclude-table-file和--include-table-file参数不能添加数据库名,示例如下:

21、官方文档:

https://docs.vmware.com/en/VMware-Greenplum-Backup-and-Restore/1.30/greenplum-backup-and-restore/backup-restore.html

安装gpbackup和gprestore

安装参考:

https://docs.vmware.com/en/VMware-Tanzu-Greenplum-Backup-and-Restore/1.27/tanzu-greenplum-backup-and-restore/GUID-backup-restore-install.html

https://docs.vmware.com/en/VMware-Greenplum-Backup-and-Restore/1.30/greenplum-backup-and-restore/backup-restore-install.html

下载

下载地址(最新版1.30.2):

注意:

1、官网下载比GitHub多gpbackup_ddboost_plugin、gpbackup_s3_plugin和gpbackup_manager这几个文件,且目录稍有不同。

2、建议使用官网的工具。

GreenPlum备份恢复工具之gpbackup和gprestore

安装

需要安装在所有的master、standby master和所有segment主机上:

使用gpadmin用户在master节点执行即可:

示例:

命令帮助

gpbackup帮助命令

从上面各个参数的详细解释中,大家也可以得出一个总结,gpbackup 的必选参数只有 --dbname,其他参数均为可选参数,有些参数之间是存在互斥关系的,大家在使用过程中一定要注意。

gprestore帮助命令

gpbackup_manager帮助命令

参考:https://docs.vmware.com/en/VMware-Greenplum-Backup-and-Restore/1.30/greenplum-backup-and-restore/utility_guide-ref-gpbackup_manager.html

  • gpbackup_manager可以列出历史备份信息,这些信息存储在$MASTER_DATA_DIRECTORY/gpbackup_history.db的SQLite的数据库文件中。所以,若要清空历史备份信息,则直接删除文件rm -rf $MASTER_DATA_DIRECTORY/gpbackup_history.db即可。

  • 只有当GreenPlum数据库正常运行时,才可以使用gpbackup_manager工具。

  • 只有官方下载的工具才带有该工具。

  • Greenplum Database must be running to use the gpbackup_manager utility.

  • Backup history is saved on the Greenplum Database coordinator host in the database $MASTER_DATA_DIRECTORY/gpbackup_history.db.

使用示例

gpbackup

常规备份,只指定--dbname参数

实验总结:

如果只指定数据库名称,会将这个数据库的所有对象都进行备份,例如:元数据、表数据、资源队列、资源组、角色等。

元数据存储在Master节点的$MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDhhmmss/目录下,会生成4个文件,其中:config.yaml 记录gpbackup 运行时的参数配置项;report记录备份下来的数据库对象信息,主要是对象数量;toc.yaml 记录元数据之间的依赖关系;metadata.sql 记录表结构DDL的详细信息。

Master节点生成的四个文件(standby master无数据):

生产表数据存储在segment实例的backups目录下,比如我这边/opt/greenplum/data/primary/gpseg0/backups/20230303/20230303121616

默认情况下,每个表生成一个单独的gzip压缩文件,通过pg_class中的oid作为后缀来做表关联对应。segment节点不存储任何生产表数据之外的数据。

解压打开其中一个表文件看一下,里面是csv内容:

如果你想解压x.txt.gz到x.txt,同时保留x.txt.gz,你可以输入:gunzip -c x.txt.gz > x.txt

指定--backup-dir参数进行备份

实验语句:

示例:

实验总结:

指定--backup-dir的操作可以将备份统一到一个固定的目录,这就要求所有服务器上必须都存在--backup-dir后面指定的这个目录,比如我这里的目录是/home/gpadmin/bk。这个适合公司对备份目录有固定要求,或者必须放置到共享存储中的场景,通过定义统一的目录,就可以把所有的备份数据都放在我们可以获知的任意位置(当然管理员用户必须具有目录的访问权限)。

Master节点上的信息展示如下,文件还是那些文件,只不过目录不同了。

Segment节点上的信息展示如下,可以看到是通过segment名字进行区别,所以不要担心在共享存储中会出现覆盖的问题。

指定--data-only参数只备份数据

实验语句:

实验总结:

如果指定了--data-only,Master节点将不会导出创建数据库对象的DDL语句,这个场景只适合于数据临时导出操作,没有表结构,如果恢复的时候数据库中没有表,也无法实现恢复。个人感觉这种场景不太多,毕竟备份一下DDL也不浪费多少时间。

Master节点中查看metadata.sql文件,没有信息,*Segment节点,显然只有表数据

指定--jobs参数进行并行备份

实验语句:

实验总结:

指定了--jobs=2参数以后,理论上在各个节点上备份时,会同时启动两个事务分别备份2个表,我们可以通过数据库的日志进行甄别,如下可以看到,四条日志中,前两条是上一次备份的日志,没开并行,可以看出时间是顺序的;后两条是本次开启2个并行的备份操作,可以看到基本是同一时间发起的:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
GreenPlum备份恢复工具之gpbackup和gprestore后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部