使用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
工具的更多选项,
参考gpbackup和
gprestore。
- 需求和限制
- 备份或还原中包含的对象
- 执行基本备份和还原操作
- 过滤备份或恢复的内容
- 配置邮件通知
- 理解备份文件
- 使用gpbackup和gprestore创建增量备份
- 将gpbackup和gprestore与BoostFS一起使用
- 使用gpbackup存储插件
- 备份/恢复存储插件API(Beta版)
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 <schema.table> does not exist
。 由于表锁定问题,在备份操作期间删除表时,gpbackup
可能会失败。gpbackup
生成要备份的表列表,并在表上获取ACCESS SHARED
锁。 如果表上保留了EXCLUSIVE LOCK
,则gpbackup
会在释放现有锁后获取ACCESS SHARED
锁。 如果gpbackup
尝试获取表上的锁时表不再存在,则gpbackup
将退出并显示错误消息。
对于可能在备份期间删除的表,可以使用gpbackup
表过滤选项(例如--exclude-table
或--exclude-schema
)从备份中排除表。
- 使用
gpexpand
创建的备份只能还原到与源集群具有相同数量的节点实例的Greenplum数据库集群。 如果运行gpexpand将节点添加到集群,则在扩容完成后无法恢复在扩容之前所做的备份。
Parent topic: 使用gpbackup和gprestore并行备份
备份或还原中包含的对象
下表列出了使用gpbackup
和gprestore
备份和还原的对象。
使用--dbname
选项为您指定备份的数据库对象。
默认情况下也会备份全局对象(Greenplum数据库系统对象),但只有在gprestore
中包含--with-globals
选项时才会还原它们。
Table 1. 备份和还原的对象
数据库(使用--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
数据库。
也可以参考理解备份文件。
Parent topic: 使用gpbackup和gprestore并行备份
执行基本备份和还原操作
要执行数据库的完整备份以及Greenplum数据库系统元数据,请使用以下命令:
$ 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
默认情况下,每个节点用一个独立的压缩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
使用一个连接去恢复表数据和元数据。
如果备份集非常大,可以使用--jobs
选项来提高并发连接数从而提升恢复性能。
例如:
$ gprestore --backup-dir /home/gpadmin/backups/ --timestamp 20171103153156 --create-db --jobs 8
测试备份集的并行连接数,以确定快速数据恢复的理想数量。
Note: 如果备份使用gpbackup
的--single-data-file
选项将表备份组合到每个节点的单个文件中,则无法使用gprestore
执行并行还原操作。
报告文件
当执行备份和恢复操作时,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
会将备份信息附加到Greenplum数据库master数据目录中的gpbackup历史文件gpbackup_history.yaml
中。
该文件包含备份时间戳,有关备份选项的信息以及增量备份的备份集信息。
gpbackup
不备份此文件。
使用--incremental
选项运行gpbackup
时,
gpbackup
使用文件中的信息查找增量备份的匹配备份,
并且不指定--from-timesamp
选项以指示要用作最新备份的备份在增量备份集中。
有关增量备份的信息,参考使用gpbackup和gprestore创建增量备份。
返回值
在gpbackup
或gprestore
完成时会返回下面的一个返回值。
- 0 – 备份或恢复完成没有问题
- 1 – 备份或恢复完成,但有非致命错误。查看日志文件获取更多信息。
- 2 – 备份或恢复因为致命错误失败。查看日志文件获取更多信息。
Parent topic: 使用gpbackup和gprestore并行备份
过滤备份或恢复的内容
gpbackup
备份指定数据库中的所有schema和表,除非您使用schema级别或表级别过滤器选项排除或包含单个schema或表对象。
schema级别选项是--include-schema
或--exclude-schema
命令行选项到gpbackup
。
例如,如果“demo”数据库仅包含两个schema “wikipedia”和“twitter”,则以下两个命令仅备份“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
要筛选包含在备份集中的表或从备份集中排除表,请使用--include-table
选项或--exclude-table
选项指定各个表。
该表必须是限定schema的,<schema-name>.<table-name>
。
可以多次指定各个表过滤选项。
但是,--include-table
和--exclude-table
不能同时用于同一命令。
您可以在文本文件中创建指定的表名称列表。
列出文件中的表时,文本文件中的每一行都必须使用格式<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
为节点上的每个表创建一个文件。
您可以指定--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
备份叶子分区时,将备份叶子分区数据以及整个分区表的元数据。
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
创建备份,文本文件列出分区表的一些叶子分区。 还原备份会创建分区表,并仅为文件中列出的叶分区还原数据。
- 如果尝试还原备份集中不存在的schema或表,则
Parent topic: 使用gpbackup和gprestore并行备份
配置邮件通知
gpbackup
和gprestore
可以在备份或还原完成后发送邮件通知。
要让gpbackup
或gprestore
发送状态电子邮件通知,
您必须将名为gp_email_contacts.yaml
的文件放在运行gpbackup
或gprestore
的用户的主目录中,
与工具($GPHOME/bin
)位于同一目录中。
如果工具无法在任一位置找到gp_email_contacts.yaml
文件,则会发出消息。
如果两个位置都包含.yaml
文件,则该工具将使用用户$HOME
中的文件。
电子邮件主题行包括工具名称,时间戳,状态和Greenplum数据库master的名称。
这是gpbackup
电子邮件的示例主题行。
gpbackup 20180202133601 on gp-master completed
该电子邮件包含有关操作的摘要信息,包括选项,持续时间以及备份或还原的对象数。 有关通知电子邮件内容的信息,参考报告文件。
Note: UNIX邮件实用程序必须在Greenplum数据库主机上运行,并且必须配置为允许Greenplum超级用户(gpadmin
)发送电子邮件。
还要确保通过gpadmin
用户的$PATH
可以找到邮件程序可执行文件。
Parent topic: 使用gpbackup和gprestore并行备份
gpbackup和gprestore邮件文件格式
gpbackup
和gprestore
电子邮件通知的YAML文件gp_email_contacts.yaml
使用缩进(空格)来确定文档层次结构以及这些部分之间的关系。
使用空白区域非常重要。
不应仅将白色空间用于格式化目的,并且根本不应使用制表符。
Note: 如果未正确指定status
参数,则工具不会发出警告。
例如,如果success
参数拼写错误并设置为true,则不会发出警告,并且在成功操作后不会向电子邮件地址发送电子邮件。
要确保正确配置电子邮件通知,请运行配置了电子邮件通知的测试。
这是gpbackup
电子邮件通知的gp_email_contacts.yaml
YAML文件的格式:
[contacts](#topic_uq5_v5v_scb__contacts_yml):
[gpbackup](#topic_uq5_v5v_scb__gpbackup_yml):
- [address](#topic_uq5_v5v_scb__address_yml): user@domain
[status](#topic_uq5_v5v_scb__status_yml):
[success](#topic_uq5_v5v_scb__success_yml): [true | false]
[success_with_errors](#topic_uq5_v5v_scb__success1_yml): [true | false]
[failure](#topic_uq5_v5v_scb__failure_yml): [true | false]
[gprestore](#topic_uq5_v5v_scb__gprestore_yml):
- [address](#topic_uq5_v5v_scb__address_yml): user@domain
[status](#topic_uq5_v5v_scb__status_yml):
[success](#topic_uq5_v5v_scb__success_yml): [true | false]
[success_with_errors](#topic_uq5_v5v_scb__success1_yml): [true | false]
[failure](#topic_uq5_v5v_scb__failure_yml): [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
电子邮件部分。
此部分包含用于在gprestore操作后发送电子邮件通知的[address](#topic_uq5_v5v_scb__address_yml)
和[status](#topic_uq5_v5v_scb__status_yml)
参数。
语法与[gpbackup](#topic_uq5_v5v_scb__gpbackup_yml)
部分相同。
示例
此示例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
理解备份文件
Warning: 所有gpbackup
元数据文件都是使用只读权限创建的。
切勿删除或修改gpbackup
备份集的元数据文件。
这样做会使备份文件无法正常运行。
gpbackup
的完整备份集包括多个元数据文件,支持文件和CSV数据文件,每个文件都指定了创建备份的时间戳。
默认情况下,元数据和支持文件存储在Greenplum数据库master主机上$MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDHHMMSS/目录中。 如果指定自定义备份目录,则会将此相同文件路径创建为备份目录的子目录。 下表描述了元数据和支持文件的名称和内容。
Table 2. gpbackup元文件(master)
文件名 | 描述 |
---|---|
gpbackup_\ |
包含全局和数据库特定的元数据: 用于Greenplum数据库集群全局对象的DDL,不属于集群中的特定数据库。 用于备份数据库中的对象的DDL(使用--dbname指定 ),必须在还原实际数据之前创建,以及在还原数据后必须创建的对象的DDL。 全局对象包括: 表空间 数据库 数据库范围的配置参数设置(GUCs) Resource group定义 Resource queue定义 Roles GRANT 分配给数据库的角色 Note:默认情况下不会还原全局元数据。 必须在gprestore 命令中包含--with-globals 选项才能还原全局元数据。 在还原实际数据之前必须创建的数据库特定的对象包括: Session级别的配置参数设置(GUCs) Schemas 过程语言扩展 类型 序列 函数 表 协议 操作符和操作符类 转换 聚合 类型转换 视图 约束 在还原实际数据之后必须创建的数据库特定的对象包括: 索引 规则 触发器。(虽然Greenplum数据库不支持触发器,但会备份和恢复任何存在的触发器定义。) |
gpbackup_\ |
包含用于在_predata.sql和_postdata.sql文件中查找对象DDL的元数据。 此文件还包含用于在每个节点上创建的CSV数据文件中查找相应表数据的表名和OID。 参考节点数据文件。 |
gpbackup_\ |
包含有关用于填充备份完成后发送的电子邮件通知(如果已配置)的备份操作的信息。 此文件包含以下信息: 提供的命令行选项 备份的数据库 数据库版本 备份类型 参考配置邮件通知。 |
gpbackup_\ |
包含有关特定备份任务执行的元数据,包括: 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
选项,以在每个节点上创建单个数据文件。
文件存储在\
如果指定自定义备份目录,则节点数据文件将复制到与备份目录的子目录相同的文件路径中。
如果包含--leaf-partition-data
选项,则gpbackup
为分区表的每个叶子分区创建一个数据文件,而不是为表创建一个文件。
每个数据文件使用文件吗格式
gpbackup_\
- \
是 gpbackup
操作的时间戳。 - \
是表的object ID。 元数据文件gpbackup_\ _toc.yaml引用此\ 以查找schema中特定的表的数据。
您可以选择使用--compression-level
选项指定gzip压缩级别(1-9),或使用--no-compression
完全禁用压缩。
如果未指定压缩级别,则gpbackup
默认使用压缩级别1。
Parent topic: 使用gpbackup和gprestore并行备份