GreenPlum数据库的备份和恢复概述

0    360    4

Tags:

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

简介

定期执行备份能确保在数据损坏或者系统失效发生时能恢复数据或者重建Greenplum数据库系统。

用户还可以使用备份从一个Greenplum数据库系统迁移数据到另一个。

备份和恢复概述

Greenplum数据库支持并行和非并行的方法来备份和恢复数据库。 并行操作的规模不受系统中Segment数量的影响,因为每台Segment主机都同时把其数据写入到本地的磁盘存储上。 如果使用非并行备份和恢复操作,数据必须通过网络从Segment被发送到Master,后者把所有的数据写入它的存储中。 除了把I/O限制在一台主机上之外,非并行备份要求Master拥有足够的本地磁盘存储以保存整个数据库。

GreenPlum有几种备份工具,其中最常用的是gpbackup和gprestore,它们是GreenPlum官方提供的逻辑备份和恢复工具,它们可以并行地备份和恢复数据库的对象和数据,支持增量备份和压缩备份等功能,是一块逻辑备份恢复工具。另外,还有gpcrondump和gpdbrestore,它们是旧版本的并行备份恢复工具,但已经不再维护。还有pg_dump、pg_dumpall和pg_restore,它们是非并行的备份恢复工具,需要通过master节点来执行

使用gpbackup和gprestore做并行备份

gpbackup和gprestore是Greenplum数据库的备份和恢复工具。 gpbackup在每个独立的表级别使用ACCESS SHARE锁,而不是在pg_class catalog表里加EXCLUSIVE锁。 这使得你可以在backup期间执行任意查询和DML语句,但是如CREATE,ALTER,DROP和TRUNCATE操作,只要这些操作没有执行在备份的数据上就可以。

使用gpbackup创建的备份文件旨在提供将来恢复单个数据库对象及其依赖项的功能,例如函数和所需的用户定义数据类型。 参考使用gpbackup和gprestore并行备份获取更多信息。

使用pg_dump做非并行备份

PostgreSQL pg_dump和pg_dumpall非并行备份工具可以用来在master主机上创建一个单独的,包含所有节点数据的dump文件。

PostgreSQL的非并行工具应该在特殊场合使用。 它们比使用Greenplum backup工具要慢得多,因为所有数据都必须通过master。 此外,通常情况是master主机没有足够的磁盘空间来保存整个分布式Greenplum数据库的备份。

pg_restore工具需要pg_dump或pg_dumpall创建的压缩dump文件。 在开始还原之前,应修改dump文件中的CREATE TABLE语句以包含Greenplum DISTRIBUTED子句。 如果您不包含DISTRIBUTED子句,Greenplum数据库会分配默认值,这可能不是最佳值。 有关详细信息,请参阅Greenplum数据库参考指南中的CREATE TABLE。

使用并行的备份文件来做一个非并行的恢复,可以从每个segment节点拷贝备份文件到master节点,然后通过master加装它们。

Figure 1. 使用并行的备份文件来做一个非并行的恢复

备份和恢复概述 - 图1

备份Greenplum数据库数据的另一种非并行方法是使用COPY TO SQL命令将数据库中的全部或部分表复制到master主机上的分隔文本文件。

使用gpbackup和gprestore并行备份

gpbackup和gprestore是Greenplum数据库工具,可为Greenplum数据库创建和恢复备份集。 默认情况下,gpbackup仅在Greenplum数据库master数据目录中存储备份的对象元数据文件和DDL文件。 Greenplum数据库节点使用COPY … ON SEGMENT命令将备份表的数据存储在位于每个节点的backups目录中的压缩CSV数据文件中。

元数据备份文件包含gprestore并行恢复完整备份集所需的所有信息。 备份元数据还提供了在gprestore的未来版本中仅用于还原数据集中的单个对象以及任何依赖对象的框架。 (参考理解备份文件获取更新信息。) 将表数据存储在CSV文件中还提供了使用其他恢复工具(如gpload)在同一群集或其他群集中加载数据的机会。 默认情况下,为节点上的每个表创建一个文件。 您可以使用gpbackup指定--leaf-partition-data选项,以便为分区表的每个叶子分区创建一个数据文件,而不是单个文件。 此选项还允许您按叶分区筛选备份集。

每个gpbackup任务都使用Greenplum数据库中的单个事务。 在此事务期间,元数据将在master主机上备份,并且每个节点主机上的每个表的数据将使用COPY … ON SEGMENT命令并行写入CSV备份文件。 备份进程在备份的每个表上获取ACCESS SHARE锁。

关于gpbackup和gprestore工具的更多选项, 参考gpbackupgprestore

Parent topic: 备份和恢复数据库

需求和限制

gpbackup和gprestore工具在Greenplum数据库5.5.0和之后的版本可用。

gpbackup和gprestore有如下限制:

  • 如果在父分区表上创建索引,则gpbackup不会在父分区的子分区表上备份相同的索引,因为在子分区上创建相同的索引会导致错误。 但是,如果您交换分区,则gpbackup不会检测到交换分区上的索引是从新父表继承的。 在这种情况下,gpbackup备份冲突的CREATE INDEX语句,这会在还原备份集时导致错误。

  • 您可以执行gpbackup的多个实例,但每次执行都需要不同的时间戳。

  • 数据库对象过滤目前仅限于schema和表。

  • 如果使用gpbackup —single-data-file选项将表备份组合到每个节点的单个文件中, 则无法使用gprestore执行并行还原操作(无法将--jobs设置为大于1的值)。

  • 您不能将--exclude-table-file与--leaf-partition-data一起使用。 虽然您可以在使用--exclude-table-file指定的文件中指定叶子分区名称,但gpbackup会忽略分区名称。

  • 在运行DDL命令的同时使用gpbackup备份数据库可能会导致gpbackup失败,以确保备份集内的一致性。 例如,如果在备份操作开始后删除了表,则gpbackup将退出并显示错误消息ERROR: relation does not exist。

    由于表锁定问题,在备份操作期间删除表时,gpbackup可能会失败。 gpbackup生成要备份的表列表,并在表上获取ACCESS SHARED锁。 如果表上保留了EXCLUSIVE LOCK,则gpbackup会在释放现有锁后获取ACCESS SHARED锁。 如果gpbackup尝试获取表上的锁时表不再存在,则gpbackup将退出并显示错误消息。

    对于可能在备份期间删除的表,可以使用gpbackup表过滤选项(例如--exclude-table或--exclude-schema)从备份中排除表。

  • 使用gpexpand创建的备份只能还原到与源集群具有相同数量的节点实例的Greenplum数据库集群。 如果运行gpexpand将节点添加到集群,则在扩容完成后无法恢复在扩容之前所做的备份。

备份或还原中包含的对象

下表列出了使用gpbackup和gprestore备份和还原的对象。 使用--dbname选项为您指定备份的数据库对象。 默认情况下也会备份全局对象(Greenplum数据库系统对象),但只有在gprestore中包含--with-globals选项时才会还原它们。

数据库(使用—dbname指定的数据库)全局(需要指定—with-globals选项来还原)
会话级别的配置参数设置(GUCs)Schemas,参考Note过程语言扩展序列注释表Indexes所有者可写外部表(DDL only)可读外部表(DDL only)函数聚合类型转换类型视图协议触发器。(虽然Greenplum数据库不支持触发器,但会备份和恢复任何存在的触发器定义。)规则域运算符,运算符族和运算符类转换扩展文本搜索解析器,词典,模板和配置表空间数据库数据库范围的配置参数设置(GUCs)Resource group定义Resource queue定义角色GRANT分配给数据库的角色

Note: 这些schemas不包含在备份中。

  • gp_toolkit
  • information_schema
  • pg_aoseg
  • pg_bitmapindex
  • pg_catalog
  • pg_toast*
  • pg_temp*

还原到已存在数据库时,gprestore假定在将对象还原到public schema时存在public schema。 还原到新数据库(使用--create-db选项)时,gprestore会在使用CREATE DATABASE命令创建数据库时自动创建public schema。 该命令使用包含public schema的template0数据库。

执行基本备份和还原操作

要执行数据库的完整备份以及Greenplum数据库系统元数据,请使用以下命令:

例如:

上面的命令在Greenplum数据库master主机的默认目录中创建一个包含全局和数据库特定元数据的文件, $MASTER_DATA_DIRECTORY/backups///。 例如:

默认情况下,每个节点用一个独立的压缩CSV文件在/backups///存储备份的每个表的数据:

要将所有备份文件合并到一个目录中,请包含--backup-dir选项。 请注意,您必须使用此选项指定绝对路径:

执行备份操作时,可以在多个文件的额外开销可能过高的情况下使用--single-data-file。 例如,如果您使用第三方存储解决方案,例如带备份的Data Domain。

从备份恢复

使用gprestore从备份集合恢复,必须使用--timestamp选项指定准确的时间戳值(YYYYMMDDHHMMSS)。 包括--create-db选项,如果数据库未在集群中创建。 例如:

如果指定自定义的--backup-dir来合并备份文件,使用gprestore时指定相同的--backup-dir选项来定位备份文件:

gprestore默认不会为Greenplum系统尝试恢复全局元数据。 如果这个是必须的,需要--with-globals参数。

默认情况下,gprestore使用一个连接去恢复表数据和元数据。 如果备份集非常大,可以使用--jobs选项来提高并发连接数从而提升恢复性能。 例如:

测试备份集的并行连接数,以确定快速数据恢复的理想数量。

Note: 如果备份使用gpbackup的--single-data-file选项将表备份组合到每个节点的单个文件中,则无法使用gprestore执行并行还原操作。

报告文件

当执行备份和恢复操作时,gpbackup和gprestore会生成一个报告文件。 当配置了邮件通知,发送的邮件内容会包含报告文件。 关于邮件通知的信息,参考配置邮件通知

报告文件在Greenplum数据库master的备份目录中。 报告文件名包含操作的时间戳。 这些是gpbackup和gprestore报告文件名的格式。

对于这些报告文件名的样例,20180213114446是备份的时间戳,20180213115426是恢复操作的时间戳。

这个在Greenplum数据库master主机上的备份目录包含了gpbackup和gprestore的报告文件。

报告文件的内容类似。 这是gprestore报告文件内容的示例。

历史文件

执行备份操作时,gpbackup会将备份信息附加到Greenplum数据库master数据目录中的gpbackup历史文件gpbackup_history.yaml中。 该文件包含备份时间戳,有关备份选项的信息以及增量备份的备份集信息。 gpbackup不备份此文件。

使用--incremental选项运行gpbackup时, gpbackup使用文件中的信息查找增量备份的匹配备份, 并且不指定--from-timesamp选项以指示要用作最新备份的备份在增量备份集中。 有关增量备份的信息,参考使用gpbackup和gprestore创建增量备份

返回值

在gpbackup或gprestore完成时会返回下面的一个返回值。

  • 0 – 备份或恢复完成没有问题
  • 1 – 备份或恢复完成,但有非致命错误。查看日志文件获取更多信息。
  • 2 – 备份或恢复因为致命错误失败。查看日志文件获取更多信息。

过滤备份或恢复的内容

gpbackup备份指定数据库中的所有schema和表,除非您使用schema级别或表级别过滤器选项排除或包含单个schema或表对象。

schema级别选项是--include-schema或--exclude-schema命令行选项到gpbackup。 例如,如果“demo”数据库仅包含两个schema “wikipedia”和“twitter”,则以下两个命令仅备份“wikipedia” schema:

你可以在gpbackup中包含多个--include-schema选项,或多个--exclude-schema选项。 例如:

要筛选包含在备份集中的表或从备份集中排除表,请使用--include-table选项或--exclude-table选项指定各个表。 该表必须是限定schema的,.。 可以多次指定各个表过滤选项。 但是,--include-table和--exclude-table不能同时用于同一命令。

您可以在文本文件中创建指定的表名称列表。 列出文件中的表时,文本文件中的每一行都必须使用格式.定义单个表。 该文件不得包含尾随行。 例如:

如果表或schema名称使用小写字母,数字或下划线字符以外的任何字符,则必须在双引号中包含该名称。例如:

创建文件后,您可以使用gpbackup选项--include-table-file或--exclude-table-file来包含或排除表。例如:

您可以将-include schema与--exclude-table或--exclude-table-file结合使用以进行备份。 此示例使用--include-schema和--exclude-table来备份除单个表之外的schema。

您不能将--include-schema与--include-table或--include-table-file结合使用, 并且不能将--exclude-schema与任何表过滤选项(如--exclude-table或--include-table)结合使用。

使用--include-table或--include-table-file时,不会自动备份或还原依赖对象,您必须显式指定所需的依赖对象。 例如,如果备份或还原视图,则还必须指定视图使用的表。 如果备份或还原使用序列的表,则还必须指定序列。

根据叶子分区过滤

默认情况下,gpbackup为节点上的每个表创建一个文件。 您可以指定--leaf-partition-data选项,以便为分区表的每个叶子分区创建一个数据文件,而不是单个文件。 您还可以通过在包含的文本文件中列出叶子分区名称来过滤备份特定叶子分区。 例如,考虑使用以下语句创建的表:

要仅备份一年中最后一个季度的数据,首先要创建一个文本文件,列出那些叶子分区名称而不是完整的表名称:

然后使用--include-table-file选项指定文件,以便为每个叶子分区生成一个数据文件:

指定--leaf-partition-data时,gpbackup在备份分区表时为每个叶子分区生成一个数据文件。 例如,此命令为每个叶子分区生成一个数据文件:

备份叶子分区时,将备份叶子分区数据以及整个分区表的元数据。

Note: 您不能将--exclude-table-file选项与--leaf-partition-data一起使用。 虽然您可以在使用--exclude-table-file指定的文件中指定叶子分区名称,但gpbackup会忽略分区名称。

使用gprestore过滤

使用gpbackup创建备份集后, 可以使用gprestore的--include-schema和--include-table-file选项过滤要从备份集还原的schema和表。 这些选项的工作方式与其gpbackup对应方式相同,但具有以下限制:

  • 您尝试还原的表不能存在于数据库中。

  • 如果尝试还原备份集中不存在的schema或表,则gprestore不会执行。

  • 如果使用--include-schema选项,则gprestore无法还原对多个schema具有依赖性的对象。

  • 如果使用--include-table-file选项,则gprestore不会创建角色或设置表的所有者。 该工具恢复表索引和规则。 触发器也被恢复,但Greenplum数据库不支持。

  • 使用--include-table-file指定的文件不能包含叶子分区名称,因为在使用gpbackup指定此选项时可以使用该名称。 如果在备份集中指定了叶子分区,请指定分区表以还原叶子分区数据。

    还原包含来自分区表的某些叶子分区的数据的备份集时,将恢复分区表以及叶子分区的数据。 例如,使用gpbackup选项--include-table-file创建备份,文本文件列出分区表的一些叶子分区。 还原备份会创建分区表,并仅为文件中列出的叶分区还原数据。

配置邮件通知

gpbackup和gprestore可以在备份或还原完成后发送邮件通知。

要让gpbackup或gprestore发送状态电子邮件通知, 您必须将名为gp_email_contacts.yaml的文件放在运行gpbackup或gprestore的用户的主目录中, 与工具($GPHOME/bin)位于同一目录中。 如果工具无法在任一位置找到gp_email_contacts.yaml文件,则会发出消息。 如果两个位置都包含.yaml文件,则该工具将使用用户$HOME中的文件。

电子邮件主题行包括工具名称,时间戳,状态和Greenplum数据库master的名称。 这是gpbackup电子邮件的示例主题行。

该电子邮件包含有关操作的摘要信息,包括选项,持续时间以及备份或还原的对象数。 有关通知电子邮件内容的信息,参考报告文件

Note: UNIX邮件实用程序必须在Greenplum数据库主机上运行,并且必须配置为允许Greenplum超级用户(gpadmin)发送电子邮件。 还要确保通过gpadmin用户的$PATH可以找到邮件程序可执行文件。

gpbackup和gprestore邮件文件格式

gpbackup和gprestore电子邮件通知的YAML文件gp_email_contacts.yaml使用缩进(空格)来确定文档层次结构以及这些部分之间的关系。 使用空白区域非常重要。 不应仅将白色空间用于格式化目的,并且根本不应使用制表符。

Note: 如果未正确指定status参数,则工具不会发出警告。 例如,如果success参数拼写错误并设置为true,则不会发出警告,并且在成功操作后不会向电子邮件地址发送电子邮件。 要确保正确配置电子邮件通知,请运行配置了电子邮件通知的测试。

这是gpbackup电子邮件通知的gp_email_contacts.yaml YAML文件的格式:

电子邮件YAML文件部分

contacts

必须的。包含gpbackup和gprestore部分的部分。 YAML文件可以包含gpbackup部分,gprestore部分或每个部分中的一个。

gpbackup

可选的。 开始gpbackup电子邮件部分。- address

gprestore

可选的。开始gprestore电子邮件部分。 此部分包含用于在gprestore操作后发送电子邮件通知的addressstatus参数。 语法与gpbackup部分相同。

示例

此示例YAML文件指定根据操作的成功或失败向电子邮件地址发送电子邮件。 对于备份操作,根据备份操作的成功或失败,将电子邮件发送到不同的地址。 对于还原操作,仅当操作成功或带错完成时才会向gpadmin@example.com发送电子邮件。

理解备份文件

Warning: 所有gpbackup元数据文件都是使用只读权限创建的。 切勿删除或修改gpbackup备份集的元数据文件。 这样做会使备份文件无法正常运行。

gpbackup的完整备份集包括多个元数据文件,支持文件和CSV数据文件,每个文件都指定了创建备份的时间戳。

默认情况下,元数据和支持文件存储在Greenplum数据库master主机上$MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDHHMMSS/目录中。 如果指定自定义备份目录,则会将此相同文件路径创建为备份目录的子目录。 下表描述了元数据和支持文件的名称和内容。

文件名描述
gpbackup_metadata.sql包含全局和数据库特定的元数据:用于Greenplum数据库集群全局对象的DDL,不属于集群中的特定数据库。用于备份数据库中的对象的DDL(使用—dbname指定),必须在还原实际数据之前创建,以及在还原数据后必须创建的对象的DDL。全局对象包括:表空间数据库数据库范围的配置参数设置(GUCs)Resource group定义Resource queue定义RolesGRANT分配给数据库的角色Note:默认情况下不会还原全局元数据。 必须在gprestore命令中包含—with-globals选项才能还原全局元数据。在还原实际数据之前必须创建的数据库特定的对象包括:Session级别的配置参数设置(GUCs)Schemas过程语言扩展类型序列函数表协议操作符和操作符类转换聚合类型转换视图约束在还原实际数据之后必须创建的数据库特定的对象包括:索引规则触发器。(虽然Greenplum数据库不支持触发器,但会备份和恢复任何存在的触发器定义。)
gpbackuptoc.yaml包含用于在_predata.sql和_postdata.sql文件中查找对象DDL的元数据。 此文件还包含用于在每个节点上创建的CSV数据文件中查找相应表数据的表名和OID。 参考节点数据文件
gpbackupreport包含有关用于填充备份完成后发送的电子邮件通知(如果已配置)的备份操作的信息。 此文件包含以下信息:提供的命令行选项备份的数据库数据库版本备份类型参考配置邮件通知
gpbackup_config.yaml包含有关特定备份任务执行的元数据,包括:gpbackup版本数据库名称Greenplum数据库版本附加选项配置,如 —no-compression, —compression-level, —metadata-only, —data-only和 —with-stats。
gpbackup_history.yaml包含有关使用gpbackup创建备份时使用的选项的信息,以及有关增量备份的信息。存储在Greenplum数据库master数据目录中的Greenplum数据库主机上。这个文件不是通过gpbackup备份的。关于增量备份的信息,参考使用gpbackup和gprestore创建增量备份

节点数据文件

默认情况下,每个节点为在节点上备份的每个表创建一个压缩CSV文件。 您可以选择指定--single-data-file选项,以在每个节点上创建单个数据文件。 文件存储在/backups/YYYYMMDD/YYYYMMDDHHMMSS/。

如果指定自定义备份目录,则节点数据文件将复制到与备份目录的子目录相同的文件路径中。 如果包含--leaf-partition-data选项,则gpbackup为分区表的每个叶子分区创建一个数据文件,而不是为表创建一个文件。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

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

您可能还喜欢...

发表回复