Pivotal Greenplum® 6.9-管理员指南-管理系统-使用gpbackup和gprestore的并行备份

使用gpbackup和gprestore的并行备份

gpbackup 和 gprestore是Greenplum数据库工具,用于创建和恢复Greenplum数据库的备份集。默认情况下,gpbackup仅将对象元数据文件和DDL文件,存储在Greenplum数据库Master的数据目录中以进行备份。Greenplum数据库Segment使用 COPY ... ON SEGMENT命令,将所备份表的数据存储在压缩的CSV数据文件中,这些压缩文件位于每个Segment的backups目录下。

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

每个gpbackup任务在Greenplum数据库中使用单个事务。在此事务期间,元数据被备份到Master主机上,每个Segment主机上每个表的数据通过使用COPY ... ON SEGMENT命令,被并行写入CSV备份文件中。备份进程在备份的每个表上获取一个ACCESS SHARE锁

有关gpbackup 和 gprestore的工具的更多选项,请参见gpbackupgprestore

要求与限制

gpbackup 和 gprestore 工具兼容以下的Greenplum数据库版本:

  • Pivotal Greenplum数据库4.3.22及更高版本
  • Pivotal Greenplum数据库5.5.0及更高版本
  • Pivotal Greenplum数据库6.0.0及更高版本
gpbackup 和 gprestore 有以下限制:
  • 如果您在父分区表上创建索引, gpbackup不会在其子分区表上备份相同的索引,因为在子分区上创建相同的索引会导致错误。但是,如果您交换分区, 则gpbackup不会检测到交换分区上的索引是从新的父表继承的。在这种情况下,gpbackup 备份了冲突的CREATE INDEX 语句,而这会在恢复备份集时会导致错误。
  • 您可以执行gpbackup的多个实例 ,但每次执行都需要不同的时间戳。
  • 数据库对象过滤仅限于schema和表。
  • 备份某些或所有子叶分区与根分区schema不同的分区表时,子叶分区表定义(包括架构)将作为元数据备份。即使备份操作指定应排除包含子叶分区的schema,也会发生这种情况。在这种情况下,要控制为该类型分区表备份的数据,请使用 --leaf-partition-data 选项。
    • 如果未指定 --leaf-partition-data 选项,则即使备份操作指定排除子叶分区schema,也会备份子叶分区的数据。
    • 如果 指定了 --leaf-partition-data 选项,则如果备份操作指定排除子叶分区schema,则不会备份子叶分区数据。仅备份子叶分区表的元数据。
  • 如果您使用 gpbackup --single-data-file option 选项,将表备份合并到每个segment的单个文件中,则无法使用gprestore命令执行并行恢复操作(无法将 --jobs  设置为大于1的值)。
  • 您不能将--exclude-table-file与--leaf-partition-data一起使用虽然您可以在使用--exclude-table-file指定的文件中指定叶子分区名称,但gpbackup会忽略分区名称。
  • 在同时运行DDL命令的同时使用gpbackup备份数据库可能会导致gpbackup失败,以确保备份集内的一致性。例如,如果在备份操作开始后删除了表,gpbackup 将退出并显示错误消息:ERROR: relation <schema.table> does not exist。

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

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

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

备份或恢复中包含的对象

下表列出了 gpbackup 和 gprestore备份和恢复的对象。

您使用-dbname 选项指定的数据库,会备份其中的数据库对象

默认情况下备份全局对象(Greenplum数据库系统对象),但默认情况下并不恢复它们。使用gprestore --with-globals选项,来恢复全局对象。或者,使用gpbackup --without-globals 选项,来防止备份全局对象。
表1.备份和恢复的对象
数据库对象全局对象
  • 会话级别的配置参数设置 (GUCs)
  • Schemas, 参考 Note
  • Procedural language extensions
  • Sequences
  • Comments
  • Tables
  • Indexes
  • Owners
  • Writable External Tables (仅DDL)
  • Readable External Tables (仅DDL)
  • Functions
  • Aggregates
  • Casts
  • Types
  • Views
  • Materialized Views (仅DDL)
  • Protocols
  • Triggers. (虽然Greenplum数据库不支持触发器,但会备份和恢复任何存在的触发器定义。)
  • Rules
  • Domains
  • Operators, operator families, and operator classes
  • Conversions
  • Extensions
  • Text search parsers, dictionaries, templates, 和 configurations
  • Table statistics (when the --with-stats option is specified.)
  • Tablespaces
  • Databases
  • 数据库范围的配置参数设置(GUCs)
  • Resource group 定义
  • Resource queue 定义
  • Roles
  • 数据库角色的GRANT 赋值

注意:以下schema不包含在备份中。

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

当恢复到现有的数据库时, gprestore 在将对象恢复到public schema时,会假定public schema已存在。当恢复到新的数据库时(使用 --create-db 选项), 若以CREATE DATABASE创建数据库,则gprestore 会自动创建public schema。该命令使用包含了public schema的template0数据库。

另请参阅理解备份文件

执行基本备份和还原操作

要执行数据库以及Greenplum Database系统元数据的完整备份,请使用以下命令:
$ gpbackup --dbname <database_name>
例如:
$ gpbackup --dbname demo
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Starting backup of database demo
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Backup Timestamp = 20180105112754
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Backup Database = demo
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Backup Type = Unfiltered Compressed Full Backup
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Gathering list of tables for backup
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Acquiring ACCESS SHARE locks on tables
Locks acquired:  6 / 6 [================================================================] 100.00% 0s
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Gathering additional table metadata
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Writing global database metadata
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Global database metadata backup complete
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Writing pre-data metadata
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Pre-data metadata backup complete
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Writing post-data metadata
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Post-data metadata backup complete
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Writing data to file
Tables backed up:  3 / 3 [==============================================================] 100.00% 0s
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Data backup complete
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Found neither /usr/local/greenplum-db/./bin/gp_email_contacts.yaml nor /home/gpadmin/gp_email_contacts.yaml
20180105:11:27:54 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Email containing gpbackup report /gpmaster/seg-1/backups/20180105/20180105112754/gpbackup_20180105112754_report will not be sent
20180105:11:27:55 gpbackup:gpadmin:centos6.localdomain:002182-[INFO]:-Backup completed successfully
上面的命令在Greenplum数据库Master主机上的默认目录中,创建一个包含全局和特定于数据库的元数据的文件, $MASTER_DATA_DIRECTORY/backups/<YYYYMMDD>/<YYYYMMDDHHMMSS> 。例如:
$ ls /gpmaster/gpsne-1/backups/20180105/20180105112754
gpbackup_20180105112754_config.yaml   gpbackup_20180105112754_report
gpbackup_20180105112754_metadata.sql  gpbackup_20180105112754_toc.yaml
默认情况下,每个Segment都将各表的备份数据,存储在单独的压缩CSV文件中,该文件位于<seg_dir>/backups/<YYYYMMDD>/<YYYYMMDDHHMMSS>/:
$ ls /gpdata1/gpsne0/backups/20180105/20180105112754/
gpbackup_0_20180105112754_17166.gz  gpbackup_0_20180105112754_26303.gz
gpbackup_0_20180105112754_21816.gz
要将所有备份文件归拢到一个目录中,请包含 --backup-dir选项。请注意,您必须对它使用绝对路径:
$ gpbackup --dbname demo --backup-dir /home/gpadmin/backups
20171103:15:31:56 gpbackup:gpadmin:0ee2f5fb02c9:017586-[INFO]:-Starting backup of database demo
...
20171103:15:31:58 gpbackup:gpadmin:0ee2f5fb02c9:017586-[INFO]:-Backup completed successfully
$ find /home/gpadmin/backups/ -type f
/home/gpadmin/backups/gpseg0/backups/20171103/20171103153156/gpbackup_0_20171103153156_16543.gz
/home/gpadmin/backups/gpseg0/backups/20171103/20171103153156/gpbackup_0_20171103153156_16524.gz
/home/gpadmin/backups/gpseg1/backups/20171103/20171103153156/gpbackup_1_20171103153156_16543.gz
/home/gpadmin/backups/gpseg1/backups/20171103/20171103153156/gpbackup_1_20171103153156_16524.gz
/home/gpadmin/backups/gpseg-1/backups/20171103/20171103153156/gpbackup_20171103153156_config.yaml
/home/gpadmin/backups/gpseg-1/backups/20171103/20171103153156/gpbackup_20171103153156_predata.sql
/home/gpadmin/backups/gpseg-1/backups/20171103/20171103153156/gpbackup_20171103153156_global.sql
/home/gpadmin/backups/gpseg-1/backups/20171103/20171103153156/gpbackup_20171103153156_postdata.sql
/home/gpadmin/backups/gpseg-1/backups/20171103/20171103153156/gpbackup_20171103153156_report
/home/gpadmin/backups/gpseg-1/backups/20171103/20171103153156/gpbackup_20171103153156_toc.yaml

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

注意:备份实例化视图不会备份实例化视图数据。仅备份实例化视图定义。

从备份恢复

使用 gprestore 从备份集恢复,必须使用 --timestamp 选项,来指定准确的时间戳记值(YYYYMMDDHHMMSS) 。如果数据库在集群中不存在,则包括--create-db选项。例如:
$ dropdb demo
$ gprestore --timestamp 20171103152558 --create-db
20171103:15:45:30 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Restore Key = 20171103152558
20171103:15:45:31 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Creating database
20171103:15:45:44 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Database creation complete
20171103:15:45:44 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Restoring pre-data metadata from /gpmaster/gpsne-1/backups/20171103/20171103152558/gpbackup_20171103152558_predata.sql
20171103:15:45:45 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Pre-data metadata restore complete
20171103:15:45:45 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Restoring data
20171103:15:45:45 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Data restore complete
20171103:15:45:45 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Restoring post-data metadata from /gpmaster/gpsne-1/backups/20171103/20171103152558/gpbackup_20171103152558_postdata.sql
20171103:15:45:45 gprestore:gpadmin:0ee2f5fb02c9:017714-[INFO]:-Post-data metadata restore complete
如果您指定一个自定义 --backup-dir 来归拢备份文件,那么使用gprestore 时也指定相同的 --backup-dir选项,来定位备份文件:
$ dropdb demo
$ gprestore --backup-dir /home/gpadmin/backups/ --timestamp 20171103153156 --create-db
20171103:15:51:02 gprestore:gpadmin:0ee2f5fb02c9:017819-[INFO]:-Restore Key = 20171103153156
...
20171103:15:51:17 gprestore:gpadmin:0ee2f5fb02c9:017819-[INFO]:-Post-data metadata restore complete

gprestore默认情况下不会尝试为Greenplum系统恢复全局元数据。如果需要,请包含--with-globals 参数。

默认情况下, gprestore使用1个连接来恢复表数据和元数据。如果您的备份集很大,则可以使用--jobs选项,来提高 并行连接数从而提声恢复性能。例如:
$ gprestore --backup-dir /home/gpadmin/backups/ --timestamp 20171103153156 --create-db --jobs 8

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

注意:如果备份使用gpbackup选项 --single-data-file,将表备份合并到每个Segment的单个文件中,则无法使用gprestore执行并行恢复操作。

恢复物化视图不会恢复物化视图的数据。仅恢复实例化视图定义。要用数据填充物化视图,请使用REFRESH MATERIALIZED VIEW。刷新物化视图时,物化视图定义中引用的表必须可用。gprestore 日志文件列出了已恢复的物化视图,以及 EFRESH MATERIALIZED VIEW命令,可使用该命令来填充数据到物化视图。

报告文件

执行备份或恢复操作时, gpbackup 和 gprestore生成一个报告文件。配置电子邮件通知后,发送的电子邮件包含报告文件的内容。有关电子邮件通知的信息,请参阅“ 配置电子邮件通知”

该报告文件位于Greenplum数据库Master的备份目录中。报告文件名包含操作的时间戳。以下是gpbackup 和 gprestore 报告文件名的格式。

gpbackup_<backup_timestamp>_report
gprestore_<backup_timestamp>_<restore_timesamp>_report
对于这些报告文件名的示例, 20180213114446 是备份的时间戳, 20180213115426 是恢复操作的时间戳。
gpbackup_20180213114446_report
gprestore_20180213114446_20180213115426_report

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

$ ls -l /gpmaster/seg-1/backups/20180213/20180213114446
total 36
-r--r--r--. 1 gpadmin gpadmin  295 Feb 13 11:44 gpbackup_20180213114446_config.yaml
-r--r--r--. 1 gpadmin gpadmin 1855 Feb 13 11:44 gpbackup_20180213114446_metadata.sql
-r--r--r--. 1 gpadmin gpadmin 1402 Feb 13 11:44 gpbackup_20180213114446_report
-r--r--r--. 1 gpadmin gpadmin 2199 Feb 13 11:44 gpbackup_20180213114446_toc.yaml
-r--r--r--. 1 gpadmin gpadmin  404 Feb 13 11:54 gprestore_20180213114446_20180213115426_report

报告文件的内容相似。这是 gprestore 报告文件内容的一个示例。

Greenplum Database Restore Report

Timestamp Key: 20180213114446
GPDB Version: 5.4.1+dev.8.g9f83645 build commit:9f836456b00f855959d52749d5790ed1c6efc042
gprestore Version: 1.0.0-alpha.3+dev.73.g0406681

Database Name: test
Command Line: gprestore --timestamp 20180213114446 --with-globals --createdb

Start Time: 2018-02-13 11:54:26
End Time: 2018-02-13 11:54:31
Duration: 0:00:05

Restore Status: Success

历史文件

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

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

返回码

在gpbackup或gprestore完成后,会返回下面的一个返回值。
  • 0 –备份或恢复没有问题
  • 1 –备份或恢复已完成,但没有非致命错误。有关更多信息,请参见日志文件。
  • 2 –备份或恢复失败,并出现致命错误。有关更多信息,请参见日志文件。

筛选备份或恢复的内容

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

schema级别的选项是gpbackup 命令行的选项,有:--include-schema, --include-schema-file, 或者 --exclude-schema, --exclude-schema-file  。例如,如果“demo”数据库仅包含  “ Wikipedia”和“ twitter” 两个schema ,则以下两个命令都仅备份“ wikipedia” schema 
$ gpbackup --dbname demo --include-schema wikipedia
$ gpbackup --dbname demo --exclude-schema twitter
可以在gpbackup中包含多个--include-schema选项,或多个--exclude-schema选项。 例如:
$ gpbackup --dbname demo --include-schema wikipedia --include-schema twitter
如果您有很多的schema ,则可以在文本文件中列出这些schema ,并在gpbackup命令中使用 --include-schema-file 或者 --exclude-schema-file 选项 。文件中的每一行都必须定义一个schema ,并且文件不能包含尾随行。例如,以下命令使用gpadmin home目录下的一个文件,来包含一组schema
gpbackup --dbname demo --include-schema-file /users/home/gpadmin/backup-schemas

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

您可以在文本文件中创建限定shema的表名称列表。在文件中列出表时,文本文件中的每一行都必须使用格式<schema-name>.<table-name>,来 定义一个表 。该文件不得包含尾行。例如:
wikipedia.articles
twitter.message
如果表或schema的名称使用了小写字母、数字或下划线字符以外的任何其他字符,则必须在双引号中包含该名称。例如:
beer."IPA"
"Wine".riesling
"Wine"."sauvignon blanc"
water.tonic
创建文件后,您可以使用gpbackup选项--include-table-file或--exclude-table-file来包含或排除表 。例如:
$ gpbackup --dbname demo --include-table-file /home/gpadmin/table-list.txt

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

$ gpbackup --dbname demo --include-schema mydata --exclude-table mydata.addresses

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

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

按叶子分区过滤

默认情况下, gpbackup为Segment上的每个表创建一个文件。您可以指定--leaf-partition-data 选项,来为分区表的每个叶子分区创建一个数据文件,而不是一个单文件。您还可以通过在包括的文本文件中列出叶子分区的名称,来过滤特定叶子分区的备份。例如,考虑使用以下语句创建的表:
demo=# CREATE TABLE sales (id int, date date, amt decimal(10,2))
DISTRIBUTED BY (id)
PARTITION BY RANGE (date)
( PARTITION Jan17 START (date '2017-01-01') INCLUSIVE ,
PARTITION Feb17 START (date '2017-02-01') INCLUSIVE ,
PARTITION Mar17 START (date '2017-03-01') INCLUSIVE ,
PARTITION Apr17 START (date '2017-04-01') INCLUSIVE ,
PARTITION May17 START (date '2017-05-01') INCLUSIVE ,
PARTITION Jun17 START (date '2017-06-01') INCLUSIVE ,
PARTITION Jul17 START (date '2017-07-01') INCLUSIVE ,
PARTITION Aug17 START (date '2017-08-01') INCLUSIVE ,
PARTITION Sep17 START (date '2017-09-01') INCLUSIVE ,
PARTITION Oct17 START (date '2017-10-01') INCLUSIVE ,
PARTITION Nov17 START (date '2017-11-01') INCLUSIVE ,
PARTITION Dec17 START (date '2017-12-01') INCLUSIVE
END (date '2018-01-01') EXCLUSIVE );
NOTICE:  CREATE TABLE will create partition "sales_1_prt_jan17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_feb17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_mar17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_apr17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_may17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_jun17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_jul17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_aug17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_sep17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_oct17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_nov17" for table "sales"
NOTICE:  CREATE TABLE will create partition "sales_1_prt_dec17" for table "sales"
CREATE TABLE
要仅备份该年最后一个季度的数据,请首先创建一个文本文件,该文件列出叶子分区名称而不是完整的表名称:
public.sales_1_prt_oct17
public.sales_1_prt_nov17
public.sales_1_prt_dec17 
然后使用 --include-table-file 选项指定文件,以便为每个叶子分区生成一个数据文件:
$ gpbackup --dbname demo --include-table-file last-quarter.txt --leaf-partition-data
当指定--leaf-partition-data后 , gpbackup在备份分区表时,为每个叶子分区生成一个数据文件。例如,以下命令为每个叶子分区生成一个数据文件:
$ gpbackup --dbname demo --include-table public.sales --leaf-partition-data

备份叶子分区时,叶子分区的数据与整个分区表的元数据一起备份。

注意:您不能将--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 的用户home目录下,或放在工具的同一目录($GPHOME/bin)下。如果工具在这两个位置均无法找到gp_email_contacts.yaml文件,则它会发出一条消息。如果两个位置都包含.yaml 文件,则工具会使用用户$HOME目录下的那一个文件。

电子邮件主题行包括工具名称、时间戳、状态和Greenplum数据库Master的名称。以下是gpbackup 电子邮件的一个主题行示例。

gpbackup 20180202133601 on gp-master completed

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

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

gpbackup和gprestore电子邮件文件格式

gpbackup 和 gprestore电子邮件通知为YAML文件gp_email_contacts.yaml,它使用缩进(空格)来确定文档层次结构各节之间的关系。空格的使用非常重要。不应将空格简单地用于格式化,也不应使用制表符。

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

以下是 gpbackup 电子邮件通知的YAML文件gp_email_contacts.yaml :

contacts:
  gpbackup:
  - address: user@domain
    status:
         success: [true | false]
         success_with_errors: [true | false]
         failure: [true | false]
  gprestore:
  - address: user@domain
    status:
         success: [true | false]
         success_with_errors: [true | false]
         failure: [true | false]

电子邮件YAML文件部分

contacts :必须。此节包含gpbackup 和 gprestore两个子节。YAML文件可以包含一个 gpbackup 子节、一个 gprestore 子节、或各一个。

gpbackup:可选。开始定义gpbackup 电子邮件的节。

    address:必须。必须至少指定一个电子邮件地址。可以指定多个电子邮件地址参数。每个地址都需要一个 status 子节user@domain是一个有效的电子邮件地址。

    status:必须。指定工具何时向指定的电子邮件地址发送电子邮件。默认为不发送电子邮件通知。

您可以根据备份或恢复操作的完成状态来指定发送电子邮件通知。必须至少指定以下参数之一,并且每个参数最多出现一次。

        success:可选。指定在操作完成且没有错误的情况下,是否发送电子邮件。如果值为true,则在操作完成且没有错误的情况下,会发送一封电子邮件。如果值为 false(默认),则不发送电子邮件。

        success_with_errors:可选。指定操作完成但有错误的情况下,是否发送电子邮件。如果值为true,则在操作完成且有错误的情况下,会发送一封电子邮件。如果值为false(默认),不发送电子邮件。

        failure:可选。指定在操作失败的情况下,是否发送电子邮件。如果值为true,则在操作失败的情况下,会发送一封电子邮件。如果值为false(默认),不发送电子邮件。

gprestore

可选。开始定义gprestore电子邮件的节。本节包含address 和 status 参数,用来在gprestore操作后发送电子邮件通知 。语法与gpbackup 的节相同。

示例

此示例YAML文件指定根据操作的成功或失败,向电子邮件地址发送电子邮件。对于备份操作,将根据备份操作的成功或失败,将电子邮件发送到不同的地址。对于恢复操作,当操作成功或完成但有错误时,将电子邮件发送到gpadmin@example.com。
contacts:
  gpbackup:
  - address: gpadmin@example.com
    status:
      success:true
  - address: my_dba@example.com
    status:
      success_with_errors: true
      failure: true
  gprestore:
  - address: gpadmin@example.com
    status:
      success: true
      success_with_errors: true

理解备份文件

警告:所有gpbackup元数据文件是使用只读权限创建的。请勿删除或修改gpbackup 备份集的元数据文件。这样做会使备份文件无法正常工作。

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

默认情况下,元数据和支持文件存储在Greenplum数据库Master主机上的$ MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDHHMMSS/目录下。如果指定自定义的备份目录,则将此文件创建为备份目录的子目录。下表描述了元数据和支持文件的名称和内容。
表2. gpbackup元数据文件(Master)
文档名称描述
gpbackup_ <YYYYMMDDHHMMSS> _metadata.sql包含全局和特定于数据库的元数据:
  • Greenplum数据库集群全局对象的DDL,这些对象不属于集群中的特定数据库
  • 所备份的数据库中对象的DDL(以 --dbname指定),这些对象在恢复实际数据之前之后必须被创建。
全局对象包括:
  • Tablespaces
  • Databases
  • 数据库范围的配置参数设置(GUC)
  • 资源组定义
  • 资源队列定义
  • Roles
  • 数据库角色的GRANT 赋值

注意:默认情况下不会恢复全局元数据。您必须在gprestore命令中包含--with-globals 选项,来恢复全局元数据。

在恢复实际数据之前 必须创建的、特定于数据库的对象包括:

  • 会话级配置参数设置(GUC)
  • Schemas
  • Procedural language extensions
  • Types
  • Sequences
  • Functions
  • Tables
  • Protocols
  • Operators 和 operator classes
  • Conversions
  • Aggregates
  • Casts
  • Views
  • 物化视图 注意:物化视图的数据不会被恢复,仅恢复其定义。
  • Constraints
在恢复实际数据后后 必须创建的、特定于数据库的对象包括:
  • Indexes
  • Rules
  • Triggers(尽管Greenplum数据库不支持触发器,但是会备份和恢复任何存在的触发器的定义。)
gpbackup_ <YYYYMMDDHHMMSS> _toc.yaml包含用于在_predata.sql和_postdata.sql文件中定位对象DDL的元数据 。该文件还包含表名和OID,它们用于在每个Segment上创建的CSV数据文件中,定位对应的表数据。请参见 Segment数据文件
gpbackup_ <YYYYMMDDHHMMSS> _report包含有关备份操作的信息,该信息用于生成备份完成后发送的电子邮件通知(如果已配置)。该文件包含以下信息:
  • 所提供的命令行选项
  • 所备份的数据库
  • 数据库版本
  • 备份类型
请参阅配置电子邮件通知
gpbackup_ <YYYYMMDDHHMMSS> _config.yaml包含有关特定备份任务执行的元数据,包括:
  • gpbackup 版本
  • 数据库名称
  • Greenplum数据库版本
  • 其他选项设置,例如 --no-compression, --compression-level, --metadata-only, --data-only和--with-stats.
gpbackup_ <YYYYMMDDHHMMSS> _statistics.sql包含表统计信息。

gpbackup时指定选项 --with-stats,会创建此文件。当gprestore 时指定选项 --with-stats, 统计信息会被恢复。

gpbackup_history.yaml包含有关使用gpbackup命令创建备份时所使用的选项的信息 ,以及有关增量备份的信息。

存储在Greenplum数据库Master主机上的Master数据目录下。

该文件不是通过gpbackup备份的。

有关增量备份的信息,请参阅使用gpbackup和gprestore创建和使用增量备份

Segment数据文件

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

如果指定自定义的备份目录,则该路径作为备份目录下的子目录,Segment数据文件被复制到此处。如果包括--leaf-partition-data选项, gpbackup 为分区表的每个叶子分区创建一个数据文件,而不是创建成一个单文件。

每个数据文件使用文件名的格式为 gpbackup_ <content_id> _ <YYYYMMDDHHMMSS> _ <oid> .gz,其中:
  • <content_id>是该Segment的内容ID。
  • <YYYYMMDDHHMMSS>是 gpbackup 操作的时间戳 。
  • <oid>是表的对象ID。元数据文件 gpbackup_ <YYYYMMDDHHMMSS> _toc.yaml引用此 <oid>,以在schema中查找特定表的数据。

您可以选择使用--compression-level选项,指定gzip命令的压缩级别(从1到9),或使用--no-compression选项,完全禁用压缩。如果您未指定压缩级别, gpbackup 默认使用压缩级别1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值