GreenPlum数据库的备份和恢复概述
Tags: gpbackupgprestoreGreenPlum备份恢复概述
定期执行备份能确保在数据损坏或者系统失效发生时能恢复数据或者重建Greenplum数据库系统。用户还可以使用备份从一个Greenplum数据库系统迁移数据到另一个。
备份和恢复概述
Greenplum数据库支持并行和非并行的方法来备份和恢复数据库。 并行操作的规模不受系统中Segment数量的影响,因为每台Segment主机都同时把其数据写入到本地的磁盘存储上。 如果使用非并行备份和恢复操作,数据必须通过网络从Segment被发送到Master,后者把所有的数据写入它的存储中。 除了把I/O限制在一台主机上之外,非并行备份要求Master拥有足够的本地磁盘存储以保存整个数据库。
GreenPlum有几种备份工具,其中最常用的是gpbackup和gprestore,它们是GreenPlum官方提供的逻辑备份和恢复工具,它们可以并行地备份和恢复数据库的对象和数据,支持增量备份和压缩备份等功能,是一块逻辑备份恢复工具。另外,还有gpcrondump和gpdbrestore,它们是旧版本的并行备份恢复工具14,但已经不再维护。还有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加装它们。
备份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工具的更多选项, 参考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 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数据库系统元数据,请使用以下命令:
1 | $ gpbackup --dbname <database_name> |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ 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///。 例如:
1 2 3 | $ ls /gpmaster/gpsne-1/backups/20180105/20180105112754 gpbackup_20180105112754_config.yaml gpbackup_20180105112754_report gpbackup_20180105112754_metadata.sql gpbackup_20180105112754_toc.yaml |
默认情况下,每个节点用一个独立的压缩CSV文件在/backups///存储备份的每个表的数据:
1 2 3 | $ ls /gpdata1/gpsne0/backups/20180105/20180105112754/ gpbackup_0_20180105112754_17166.gz gpbackup_0_20180105112754_26303.gz gpbackup_0_20180105112754_21816.gz |
要将所有备份文件合并到一个目录中,请包含--backup-dir选项。 请注意,您必须使用此选项指定绝对路径:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ 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选项,如果数据库未在集群中创建。 例如:
1 2 3 4 5 6 7 8 9 10 11 | $ 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选项来定位备份文件:
1 2 3 4 5 | $ 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选项来提高并发连接数从而提升恢复性能。 例如:
1 | $ gprestore --backup-dir /home/gpadmin/backups/ --timestamp 20171103153156 --create-db --jobs 8 |
测试备份集的并行连接数,以确定快速数据恢复的理想数量。
Note: 如果备份使用gpbackup的--single-data-file选项将表备份组合到每个节点的单个文件中,则无法使用gprestore执行并行还原操作。
报告文件
当执行备份和恢复操作时,gpbackup和gprestore会生成一个报告文件。 当配置了邮件通知,发送的邮件内容会包含报告文件。 关于邮件通知的信息,参考配置邮件通知。
报告文件在Greenplum数据库master的备份目录中。 报告文件名包含操作的时间戳。 这些是gpbackup和gprestore报告文件名的格式。
1 2 | gpbackup_<backup_timestamp>_report gprestore_<backup_timestamp>_<restore_timesamp>_report |
对于这些报告文件名的样例,20180213114446是备份的时间戳,20180213115426是恢复操作的时间戳。
1 2 | gpbackup_20180213114446_report gprestore_20180213114446_20180213115426_report |
这个在Greenplum数据库master主机上的备份目录包含了gpbackup和gprestore的报告文件。
1 2 3 4 5 6 7 | $ 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报告文件内容的示例。
1 2 3 4 5 6 7 8 9 10 | 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 – 备份或恢复因为致命错误失败。查看日志文件获取更多信息。
过滤备份或恢复的内容
gpbackup备份指定数据库中的所有schema和表,除非您使用schema级别或表级别过滤器选项排除或包含单个schema或表对象。
schema级别选项是--include-schema或--exclude-schema命令行选项到gpbackup。 例如,如果“demo”数据库仅包含两个schema “wikipedia”和“twitter”,则以下两个命令仅备份“wikipedia” schema:
1 2 | $ gpbackup --dbname demo --include-schema wikipedia $ gpbackup --dbname demo --exclude-schema twitter |
你可以在gpbackup中包含多个--include-schema选项,或多个--exclude-schema选项。 例如:
1 | $ gpbackup --dbname demo --include-schema wikipedia --include-schema twitter |
要筛选包含在备份集中的表或从备份集中排除表,请使用--include-table选项或--exclude-table选项指定各个表。 该表必须是限定schema的,.。 可以多次指定各个表过滤选项。 但是,--include-table和--exclude-table不能同时用于同一命令。
您可以在文本文件中创建指定的表名称列表。 列出文件中的表时,文本文件中的每一行都必须使用格式.定义单个表。 该文件不得包含尾随行。 例如:
1 2 | wikipedia.articles twitter.message |
如果表或schema名称使用小写字母,数字或下划线字符以外的任何字符,则必须在双引号中包含该名称。例如:
1 2 3 4 | beer."IPA" "Wine".riesling "Wine"."sauvignon blanc" water.tonic |
创建文件后,您可以使用gpbackup选项--include-table-file或--exclude-table-file来包含或排除表。例如:
1 | $ gpbackup --dbname demo --include-table-file /home/gpadmin/table-list.txt |
您可以将-include schema与--exclude-table或--exclude-table-file结合使用以进行备份。 此示例使用--include-schema和--exclude-table来备份除单个表之外的schema。
1 | $ 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选项,以便为分区表的每个叶子分区创建一个数据文件,而不是单个文件。 您还可以通过在包含的文本文件中列出叶子分区名称来过滤备份特定叶子分区。 例如,考虑使用以下语句创建的表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 |
要仅备份一年中最后一个季度的数据,首先要创建一个文本文件,列出那些叶子分区名称而不是完整的表名称:
1 2 3 | public.sales_1_prt_oct17 public.sales_1_prt_nov17 public.sales_1_prt_dec17 |
然后使用--include-table-file选项指定文件,以便为每个叶子分区生成一个数据文件:
1 | $ gpbackup --dbname demo --include-table-file last-quarter.txt --leaf-partition-data |
指定--leaf-partition-data时,gpbackup在备份分区表时为每个叶子分区生成一个数据文件。 例如,此命令为每个叶子分区生成一个数据文件:
1 | $ 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创建备份,文本文件列出分区表的一些叶子分区。 还原备份会创建分区表,并仅为文件中列出的叶分区还原数据。
配置邮件通知
gpbackup和gprestore可以在备份或还原完成后发送邮件通知。
要让gpbackup或gprestore发送状态电子邮件通知, 您必须将名为gp_email_contacts.yaml的文件放在运行gpbackup或gprestore的用户的主目录中, 与工具($GPHOME/bin)位于同一目录中。 如果工具无法在任一位置找到gp_email_contacts.yaml文件,则会发出消息。 如果两个位置都包含.yaml文件,则该工具将使用用户$HOME中的文件。
电子邮件主题行包括工具名称,时间戳,状态和Greenplum数据库master的名称。 这是gpbackup电子邮件的示例主题行。
1 | gpbackup 20180202133601 on gp-master completed |
该电子邮件包含有关操作的摘要信息,包括选项,持续时间以及备份或还原的对象数。 有关通知电子邮件内容的信息,参考报告文件。
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文件的格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 4 5 6 7 8 9 10 | 必须的。必须至少指定一个电子邮件地址。可以指定多个电子邮件地址参数。每个地址都需要一个status部分。 user@domain是一个有效的电子邮件地址。 **status** 必须的。指定工具何时向指定的电子邮件地址发送电子邮件。默认设置是不发送电子邮件通知。 您可以根据备份或还原操作的完成状态指定发送电子邮件通知。 必须至少指定其中一个参数,每个参数最多只能出现一次。- **success** 可选的。如果操作完成且没有错误,请指定是否发送电子邮件。 如果值为true,则在操作完成且没有错误的情况下发送电子邮件。 如果值为false(默认值),则不会发送电子邮件。 **success\_with\_errors** 可选的。如果操作完成但有错误,请指定是否发送电子邮件。 如果值为true,则在操作完成且出错时将发送电子邮件。 如果值为false(默认值),则不会发送电子邮件。 **failure** 可选的。指定操作失败时是否发送电子邮件。 如果值为true,则在操作失败时发送电子邮件。 如果值为false(默认值),则不会发送电子邮件。 |
gprestore
可选的。开始gprestore电子邮件部分。 此部分包含用于在gprestore操作后发送电子邮件通知的address和status参数。 语法与gpbackup部分相同。
示例
此示例YAML文件指定根据操作的成功或失败向电子邮件地址发送电子邮件。 对于备份操作,根据备份操作的成功或失败,将电子邮件发送到不同的地址。 对于还原操作,仅当操作成功或带错完成时才会向gpadmin@example.com发送电子邮件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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/目录中。 如果指定自定义备份目录,则会将此相同文件路径创建为备份目录的子目录。 下表描述了元数据和支持文件的名称和内容。
文件名 | 描述 |
---|---|
gpbackup | 包含全局和数据库特定的元数据:用于Greenplum数据库集群全局对象的DDL,不属于集群中的特定数据库。用于备份数据库中的对象的DDL(使用—dbname指定),必须在还原实际数据之前创建,以及在还原数据后必须创建的对象的DDL。全局对象包括:表空间数据库数据库范围的配置参数设置(GUCs)Resource group定义Resource queue定义RolesGRANT分配给数据库的角色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选项,以在每个节点上创建单个数据文件。 文件存储在/backups/YYYYMMDD/YYYYMMDDHHMMSS/。
如果指定自定义备份目录,则节点数据文件将复制到与备份目录的子目录相同的文件路径中。 如果包含--leaf-partition-data选项,则gpbackup为分区表的每个叶子分区创建一个数据文件,而不是为表创建一个文件。
每个数据文件使用文件吗格式 gpbackup___.gz,其中:
- 是节点的content ID。
- 是gpbackup操作的时间戳。
- 是表的object ID。 元数据文件gpbackup__toc.yaml引用此以查找schema中特定的表的数据。
您可以选择使用--compression-level选项指定gzip压缩级别(1-9),或使用--no-compression完全禁用压缩。 如果未指定压缩级别,则gpbackup默认使用压缩级别1。
使用gpbackup和gprestore创建增量备份
gpbackup和gprestore工具支持创建追加优化表的增量备份以及从增量备份还原。 只有表被更改时,增量备份才会备份所有指定的堆表和追加优化的表(包括追加优化的,面向列的表)。 例如,如果追加优化表的行已更改,则会备份该表。 对于分区的追加优化表,仅备份更改的叶子分区。
当自上次备份以来,追加优化表更或分区表更改的数据与未更改的数据相比量很小的时候,增量备份是高效的。
仅当在上次全量备份或增量备份后对表执行以下操作之一时,增量备份才会备份追加优化表:
- ALTER TABLE
- DELETE
- INSERT
- TRUNCATE
- UPDATE
- DROP然后重建表
要从增量备份还原数据,您需要一个完整的增量备份集。
关于增量备份集
一个增量备份集包含如下备份:
- 一个全量的备份。这是增量备份基于的全量备份。
- 捕获全量备份后数据库的增量备份集。
例如:创建一个全量备份,然后创建三个天级增量备份。 全量备份和全部三个增量备份就是备份集。 关于增量备份更多信息,请参考使用增量备份集的例子。
创建或添加到增量备份集时,gpbackup可确保使用一组一致的备份选项创建集合中的备份,以确保可以在还原操作中使用备份集。 关于备份集合一致性的信息,参考使用增量备份。
创建增量备份时,包含这些选项与其他gpbackup选项一起创建备份:
--leaf-partition-data - 增量备份集中的所有备份都需要。
- 创建全量备份时必需,该备份将作为增量备份集的基备份。
- 创建增量备份时必须。
--incremental - 创建增量备份时必须。
不能将--data-only或--metadata-only和--incremental一起使用。
--from-timestamp - 可选的。该选项可以和--incremental一起使用。 指定的时间戳是一个已经存在的备份。 可以是一个全量备份或增量备份。 创建的备份必须和使用--from-timestamp选项指定的备份兼容。
如果不指定--from-timestamp,gpbackup会尝试基于gpbackup历史文件找一个兼容的备份。 参考增量备份说明。
Parent topic: 使用gpbackup和gprestore创建增量备份
使用增量备份
将增量备份添加到备份集时,gpbackup通过检查以下gpbackup选项来确保全量备份和增量备份是一致的:
--dbname - 数据库必须相同。
--backup-dir - 文件夹必须相同。备份集,全量和增量备份路径必须相同。
--single-data-file - 这个选项在集合中所有的备份,要么全部指定,要么全部非指定。
--plugin-config - 如果指定该选项,则必须在备份集中所有的备份中都指定。 配置必须引用相同的二进制插件文件。
--include-table-file, --include-schema, 或其他过滤表和schema的选项必须相同。
当检查schema筛选时,只检查schema名字,不检查schema里包含的对象。
--no-compression - 如果这个选项被指定,必须在备份集中所有的备份中都要指定。
如果在全量备份上使用压缩,则必须在增量备份上使用压缩。 备份集中的备份允许不同的压缩级别。
如果尝试将增量备份添加到备份集,则如果gpbackup选项不一致,则备份操作将失败。
关于gpbackup和gprestore工具选项信息, 参考Greenplum数据库工具指南中的gpbackup 和gprestore.
使用增量备份集的例子
每个备份都有一个创建备份时的时间戳。 例如,如果您在2017年5月14日创建备份,则备份文件名包含20170514hhmmss。 hhmmss表示时间:小时,分钟和秒。
此示例假定您已创建数据库mytest的两个全量备份和增量备份。 要创建全量备份,请使用以下命令:
1 | gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data |
使用下面命令创建增量备份:
1 | gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental |
当指定--backup-dir选项时,备份被创建在每个数据库主机的/mybackup目录里。
在该示例中,全量备份具有时间戳键20170514054532和20171114064330。其他备份是增量备份。 该示例包含两个备份集,第一个具有两个增量备份,第二个具有一个增量备份。 备份从最早到最近列出。
- 20170514054532 (全量备份)
- 20170714095512
- 20170914081205
- 20171114064330 (全量备份)
- 20180114051246
要基于最新的增量备份创建新的增量备份,必须包含与增量备份相同的--backup-dir选项以及--leaf-partition-data和--incremental选项。
1 | gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental |
您可以指定--from-timestamp选项以基于现有增量备份或全量备份创建增量备份。 根据该示例,此命令将第四个增量备份添加到备份集,其中包括20170914081205作为增量备份,并使用20170514054532作为全量备份。
1 | gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental --from-timestamp 20170914081205 |
此命令基于全量备份20171114064330创建增量备份集,并与包含增量备份20180114051246的备份集分开。
1 | gpbackup --dbname mytest --backup-dir /mybackup --leaf-partition-data --incremental --from-timestamp 20171114064330 |
要使用增量备份20170914081205还原数据库, 需要增量备份20120914081205和20170714095512, 以及全量备份20170514054532。这将是gprestore命令。
1 | gprestore --backup-dir /backupdir --timestamp 20170914081205 |
使用gpbackup创建增量备份
gpbackup输出显示增量备份所基于的备份的时间戳。 在此示例中,增量备份基于时间戳为20180802171642的备份。 备份20180802171642可以是增量备份或全量备份。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $ gpbackup --dbname test --backup-dir /backups --leaf-partition-data --incremental 20180803:15:40:51 gpbackup:gpadmin:mdw:002907-[INFO]:-Starting backup of database test 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Backup Timestamp = 20180803154051 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Backup Database = test 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Gathering list of tables for backup 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Acquiring ACCESS SHARE locks on tables Locks acquired: 5 / 5 [================================================================] 100.00% 0s 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Gathering additional table metadata 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Metadata will be written to /backups/gpseg-1/backups/20180803/20180803154051/gpbackup_20180803154051_metadata.sql 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing global database metadata 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Global database metadata backup complete 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing pre-data metadata 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Pre-data metadata backup complete 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing post-data metadata 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Post-data metadata backup complete 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Basing incremental backup off of backup with timestamp = 20180802171642 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Writing data to file Tables backed up: 4 / 4 [==============================================================] 100.00% 0s 20180803:15:40:52 gpbackup:gpadmin:mdw:002907-[INFO]:-Data backup complete 20180803:15:40:53 gpbackup:gpadmin:mdw:002907-[INFO]:-Found neither /usr/local/greenplum-db/./bin/gp_email_contacts.yaml nor /home/gpadmin/gp_email_contacts.yaml 20180803:15:40:53 gpbackup:gpadmin:mdw:002907-[INFO]:-Email containing gpbackup report /backups/gpseg-1/backups/20180803/20180803154051/gpbackup_20180803154051_report will not be sent 20180803:15:40:53 gpbackup:gpadmin:mdw:002907-[INFO]:-Backup completed successfully |
使用gprestore从增量备份恢复
从增量备份还原时,可以指定--verbose选项以在命令行上显示还原操作中使用的备份。 例如,以下gprestore命令使用时间戳20180807092740(增量备份)还原备份。 输出包括用于还原数据库数据的备份。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ gprestore --create-db --timestamp 20180807162904 --verbose ... 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[INFO]:-Pre-data metadata restore complete 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Verifying backup file count 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Restoring data from backup with timestamp: 20180807162654 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.tbl_ao from file (table 1 of 1) 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Checking whether segment agents had errors during restore 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Restoring data from backup with timestamp: 20180807162819 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.test_ao from file (table 1 of 1) 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Checking whether segment agents had errors during restore 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Restoring data from backup with timestamp: 20180807162904 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.homes2 from file (table 1 of 4) 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.test2 from file (table 2 of 4) 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.homes2a from file (table 3 of 4) 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Reading data for table public.test2a from file (table 4 of 4) 20180807:16:31:56 gprestore:gpadmin:mdw:008603-[DEBUG]:-Checking whether segment agents had errors during restore 20180807:16:31:57 gprestore:gpadmin:mdw:008603-[INFO]:-Data restore complete 20180807:16:31:57 gprestore:gpadmin:mdw:008603-[INFO]:-Restoring post-data metadata 20180807:16:31:57 gprestore:gpadmin:mdw:008603-[INFO]:-Post-data metadata restore complete ... |
输出显示还原操作使用了三个备份。
从增量备份还原时,gprestore还会在gprestore日志文件中列出还原操作中使用的备份。
在还原操作期间,如果全量备份或其他所需的增量备份不可用,gprestore将显示错误。
增量备份说明
要创建增量备份或从增量备份集还原数据,您需要完整的备份集。 存档增量备份时,必须存档完整的备份集。 您必须归档在master和所有segment上创建的所有文件。
每次运行gpbackup时,该工具都会将备份信息添加到Greenplum数据库master数据目录中的历史文件gpbackup_history.yaml。 该文件包括备份选项和其他备份信息。
如果在创建增量备份时未指定--from-timestamp选项,则gpbackup将使用具有一致选项集的最新备份。 该工具检查备份历史记录文件以查找具有一致选项集的备份。 如果工具找不到具有一致选项集的备份或历史文件不存在,则gpbackup会显示一条消息,指出必须先创建全量备份才能创建增量。
如果在创建增量备份时指定--from-timestamp选项,则gpbackup可确保正在创建的备份选项与指定备份的选项一致。
对于备份集中的所有备份,gpbackup选项--with-stats不需要相同。 但是,要使用gprestore选项--with-stats执行还原操作以还原统计信息,您指定的备份必须在创建备份时必须使用--with-stats。
您可以从备份集中的任何备份执行还原操作。 但是,将不会还原在备份用于还原数据库数据之后的增量备份中捕获的更改。
从增量备份集还原时,gprestore会检查备份并从备份集中最新版本的追加优化表中还原每个追加优化表,并从最新备份还原堆表。
增量备份集,全量备份和关联的增量备份必须位于单个设备上。 例如,备份集中的备份必须全部位于文件系统上,或者必须全部位于Data Domain系统上。
Warning: 对Greenplum数据库segment配置的更改会使增量备份无效。 更改segment配置(添加或删除segment实例)后,必须先创建全量备份,然后才能创建增量备份。
将gpbackup和gprestore与BoostFS一起使用
您可以将Greenplum数据库gpbackup和gprestore工具与Data Domain DD Boost文件系统插件(BoostFS)一起使用来访问Data Domain系统。 BoostFS利用DD Boost技术,有助于减少带宽使用,可以缩短备份时间,提供负载平衡和机上加密,并支持Data Domain多租户功能集。
您可以在Greenplum数据库主机系统上安装BoostFS插件,以便将Data Domain系统作为标准文件系统安装点进行访问。 通过直接访问BoostFS挂载点,gpbackup和gprestore可以利用DD Boost协议的存储和网络效率进行备份和恢复。
有关配置BoostFS的信息,可以从Dell支持站点https://www.dell.com/support下载BoostFS for Linux配置指南(需要登录)。 登录到支持站点后,您可以通过搜索“BoostFS for Linux配置指南”找到该指南。 您可以通过选择仅将“手册和文档”列为资源来限制搜索结果。
要使用BoostFS进行备份或还原,请使用选项--backup-dir和gpbackup或gprestore命令来访问Data Domain系统。
安装BoostFS
从Dell支持站点https://www.dell.com/support下载最新的BoostFS RPM(需要登录)。
登录支持站点后,您可以通过搜索“boostfs”找到RPM。 您可以选择仅将“下载和驱动程序”列为资源来限制搜索结果。 要列出搜索结果顶部附近的最新RPM,请按降序日期对结果进行排序。
RPM支持RHEL和SuSE。
这些步骤安装BoostFS并创建一个访问Data Domain系统的安装目录。
在所有Greenplum数据库主机上执行这些步骤。您创建的安装目录在所有主机上必须相同。
将BoostFS RPM复制到主机并安装RPM。
安装后,DDBoostFS软件包文件位于/opt/emc/boostfs下。
使用带有boostfs工具的存储单元设置BoostFS密码箱。 根据提示输入Data Domain用户密码。
1/opt/emc/boostfs/bin/boostfs lockbox set -d <Data_Domain_IP> -s <Storage_Unit> -u <Data_Domain_User>是Data Domain存储单元ID。 是可以访问存储单元的Data Domain用户。
在要安装BoostFS的位置创建目录。
1mkdir <path_to_mount_directory>使用boostfs工具安装Data Domain存储单元。 使用mount选项-allow-others=true允许其他用户写入BoostFS挂载的文件系统。
1/opt/emc/boostfs/bin/boostfs mount <path_to_mount_directory> -d $<Data_Domain_IP> -s <Storage_Unit> -o allow-others=true运行此命令确认安装成功。
1mountpoint <mounted_directory>该命令将目录列为安装点。
1<mounted_directory> is a mountpoint
您现在可以使用--backup-dir选项运行gpbackup和gprestore, 以将数据库备份到Data Domain系统上的,并从Data Domain系统还原数据。
Parent topic: 将gpbackup和gprestore与BoostFS一起使用
使用BoostFS备份和恢复
使用BoostFS将数据备份到Data Domain系统时,这些是必需的gpbackup选项。
- --backup-dir - 指定装入的Data Domain存储单元。
- --no-compression - 禁用压缩。 数据压缩会干扰DD Boost重复数据去重。
- --single-data-file - 在每个segment主机上创建单个数据文件。 单个数据文件可避免BoostFS流限制。
使用gprestore从具有BoostFS的Data Domain系统还原备份时,必须使用选项--backup-dir指定已装入的Data Domain存储单元。
使用gpbackup选项--single-data-file时,不能指定--jobs选项以使用gprestore执行并行还原操作。
此示例gpbackup命令备份test数据库。 该示例假定目录/boostfs-test是已装入的Data Domain存储单元。
1 | $ gpbackup --dbname test --backup-dir /boostfs-test/ --single-data-file --no-compression |
这些命令将删除test数据库并从备份中还原数据库。
1 | $ dropdb test$ gprestore --backup-dir /boostfs-test/ --timestamp 20171103153156 --create-db |
值20171103153156是要还原的gpbackup备份集的时间戳。 有关gpbackup如何使用时间戳创建备份,参考使用gpbackup和gprestore并行备份。 关于-timestamp选项的信息,参考gprestore。
使用gpbackup存储插件
您可以配置Greenplum数据库gpbackup和gprestore工具,以使用存储插件在备份或还原操作期间处理备份文件。 例如,在备份操作期间,插件会将备份文件发送到远程位置。 在还原操作期间,插件从远程位置检索文件。
您还可以使用Greenplum数据库备份/还原存储插件API(Beta)开发自定义存储插件。 参考备份/恢复存储插件API(Beta版)。
Note: 只有备份/还原存储插件API才是Beta功能。存储插件是受支持的功能。
使用带有gpbackup和gprestore的S3存储插件
S3存储插件应用程序允许您在运行gpbackup和gprestore时使用Amazon Simple Storage Service(Amazon S3)位置来存储和检索备份。 Amazon S3提供安全,持久,高度可扩展的对象存储。
S3存储插件还可以连接到Amazon S3兼容服务,例如Dell EMC Elastic Cloud Storage和Minio。
要使用S3存储插件应用程序,请在配置文件中指定插件的位置以及S3登录和备份位置。 运行gpbackup或gprestore时,使用选项--plugin-config指定配置文件。 有关配置文件的信息,请参阅S3存储插件配置文件格式。
如果使用gpbackup选项--plugin-config执行备份操作,则还必须在使用gprestore还原备份时指定--plugin-config选项。
S3存储插件配置文件格式
配置文件指定Greenplum数据库S3存储插件可执行文件,连接凭据和S3位置的绝对路径。
S3存储插件配置文件使用YAML 1.1文档格式并实现自己的模式, 以指定Greenplum数据库S3存储插件的位置,连接凭据以及S3位置和登录信息。
配置文件必须是有效的YAML文档。 gpbackup和gprestore工具按顺序处理控制文件文档,并使用缩进(空格)来确定文档层次结构以及这些部分之间的关系。 使用空白区域非常重要。 不应仅将白色空间用于格式化目的,并且根本不应使用制表符。
这是S3存储插件配置文件的结构。
1 2 3 4 5 6 7 8 9 | executablepath: <absolute-path-to-gpbackup_s3_plugin> options: region: <aws-region> endpoint: <S3-endpoint> aws_access_key_id: <aws-user-id> aws_secret_access_key: <aws-user-id-key> bucket: <s3-bucket> folder: <s3-location> encryption: [on|off] |
executablepath
需要。 插件可执行文件的绝对路径。 例如,Pivotal Greenplum数据库安装位置是$GPHOME/bin/gpbackup_s3_plugin。 该插件必须位于每个Greenplum数据库主机上的相同位置。
options
需要。开始S3存储插件选项部分。- region
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | AWS S3必需。如果连接到S3兼容服务,则不需要此选项。 endpoint S3兼容服务所必需的。 指定此选项可连接到S3兼容服务,例如ECS。 该插件连接到指定的S3端点(主机名或IP地址)以访问S3兼容的数据存储。 如果指定了此选项,则插件将忽略region选项,并且不使用AWS来解析端点。 如果未指定此选项,插件将使用region来确定AWS S3端点。 aws\_access\_key\_id 可选的。用于访问存储备份文件的S3存储桶位置的S3 ID。 如果未指定此参数,则使用来自会话环境的S3身份验证信息。见[备注](#topic_ur2_fsn_ndb__s3_notes)。 aws\_secret\_access\_key 仅在指定aws\_access\_key\_id时才需要。S3 ID的S3密码,用于访问S3存储桶位置。 bucket 需要。AWS区域或S3兼容数据存储中的S3存储桶的名称。桶必须存在。 folder 需要。备份的S3位置。在备份操作期间,如果S3存储桶中不存在,则插件会创建S3位置。 encryption 可选的。连接到S3位置时启用或禁用安全套接字层(SSL)。 默认值为on,使用通过SSL保护的连接。将此选项设置为off以连接到未配置为使用SSL的S3兼容服务。 除off之外的任何值都被视为on。 |
示例
这是在下一个gpbackup示例命令中使用的示例S3存储插件配置文件。 该文件的名称是s3-test-config.yaml。
1 2 3 4 5 6 7 | executablepath: $GPHOME/bin/gpbackup_s3_plugin options: region: us-west-2 aws_access_key_id: test-s3-user aws_secret_access_key: asdf1234asdf bucket: gpdb-backup folder: test/backup3 |
这个gpbackup示例使用S3存储插件备份数据库演示。 S3存储插件配置文件的绝对路径是/home/gpadmin/s3-test。
1 | gpbackup --dbname demo --plugin-config /home/gpadmin/s3-test-config.yaml |
S3存储插件将备份文件写入AWS区域us-west-2中的此S3位置。
1 | gpdb-backup/test/backup3/backups/YYYYMMDD/YYYYMMDDHHMMSS/ |
备注
S3存储插件应用程序必须位于每个Greenplum数据库主机上的相同位置。 仅在master主机上需要配置文件。
使用S3存储插件执行备份时,插件会将备份文件存储在S3存储桶中的此位置。
1 | <folder>/backups/<datestamp>/<timestamp> |
其中folder是您在S3配置文件中指定的位置,而datestamp和timestamp是备份日期和时间戳。
使用Amazon S3备份和还原数据需要Amazon AWS账户可以访问Amazon S3存储桶。 这些是备份和还原数据所需的Amazon S3存储桶权限。
- 上传/删除上传文件的S3用户ID
- 打开/下载和查看访问文件的S3用户ID
如果未在配置文件中指定aws_access_key_id和aws_secret_access_key,则S3插件将使用来自运行备份操作的会话的系统环境的S3身份验证信息。 S3插件使用第一个可用源搜索这些源中的信息。
- 环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。
- 使用AWS CLI命令设置的身份验证信息是aws configure。
- 如果从EC2实例运行备份,则为Amazon EC2 IAM角色的凭据。
有关Amazon S3的信息,参考Amazon S3。
- 有关Amazon S3区域和端点的信息,参考http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region。
- 有关S3存储桶和文件夹的信息,请参阅Amazon S3文档https://aws.amazon.com/documentation/s3/。
总结
1、gpbackup和gprestore是一个逻辑备份工具,也就是说,它会生成SQL语句来重建数据库的结构和数据。你可以使用gprestore工具来恢复gpbackup生成的备份文件。
2、GreenPlum没有提供官方的物理备份工具,因为物理备份需要对数据库的目录结构和文件进行复制,这在MPP架构下会很复杂和低效。GreenPlum推荐使用gpbackup这样的逻辑备份工具,它可以利用数据库的MVCC特性,不需要对表或目录加锁,也不影响其他业务进程。如果你想要进行物理备份,你可能需要使用第三方的工具或者自己编写脚本来实现。
参考
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/e0bff9a50288bdd2.md
https://www.xmmup.com/greenplumbeifenhuifugongjuzhigpbackuphegprestore.html
https://www.xmmup.com/greenplumbeifenhuifugongjuzhipg_dumppg_dumpal-pg_restoredeng.html