gprestore

gprestore

恢复由gpbackup创建的Greenplum数据库备份。默认gprestore 使用位于Greenplum Master主机数据目录下的元数据文件和DDL文件,使用存储于Segment主机上的表数据CSV 文件。

概要

gprestore --timestamp YYYYMMDDHHMMSS
   [--backup-dir directory]
   [--create-db]
   [--debug]
   [--exclude-schema schema_name]
   [--exclude-table schema.table]
   [--exclude-table-file file_name]
   [--include-schema schema_name]
   [--include-table schema.table]
   [--include-table-file file_name]
   [--data-only | --metadata-only]
   [--jobs int]
   [--on-error-continue]
   [--plugin-config config_file_location]
   [--quiet]
   [--redirect-db database_name]
   [--verbose]
   [--version]
   [--with-globals]
   [--with-stats]

gprestore --help

描述

使用gprestore从备份集恢复时,必须包含--timestamp选项来指定 确切一个来自备份集的恢复时间值(YYYYMMDDHHMMSS)。如果在备份时指定了--backup-dir, 那么gprestore同样要指定--backup-dir来获取备份文件。

如果指定的是增量备份,那么还需要一个完全备份的文件集合(一个全备和所有需要的增量备份)。 gprestore会在开始恢复之前验证备份集合是可用的。
Important: 对于增量备份集,备份必须在单独设备上。例如,备份集的所有文件必须全部在 Data Domain系统。

有关增量备份的详细信息,请见使用gpbackup和gprestore创建增量备份

当从备份集恢复时,gprestore会将数据恢复到创建备份时指定的数据库。 如果目标数据库存在,并且数据库中存在该表,恢复操作会失败。如果目标数据库不存在,可以通过指定 --create-db选项来创建数据库。也可以通过指定--redirect-db 选项来将数据恢复到不同的数据库。

当恢复分区表的子分区时,分区表和数据会一同被恢复。例如,使用gpbackup--include-table-file选项创建了一个备份。恢复数据时会恢复创建分区表并 只将数据恢复到列表文件中指定的分区。

Greenplum数据库系统对象会自动包含在gpbackup备份集中,但是只有在用 gprestore进行恢复时指定--with-globals选项才会 进行恢复。相似的情况还有,如果备份时使用--with-stats选项备份了查询计划 统计信息,那么在使用gprestore进行恢复时必须指定--with-stats 才能对这部分数据进行恢复。默认情况下,只有备份集中的数据库对象会被恢复。

恢复操作的性能可以通过提高创建多个并行连接的方式来同时恢复多个表和元数据。默认gprestore 使用1个连接,但是我们可以通过--jobs选项来为大的恢复过程增加处理进程数。

当一个操作完成后,gprestore会返回一个状态码。详见 Return Codes

gprestore在恢复操作完成后可以发送邮件通知。可以指定发送邮件和接收邮件的 配置文件。详见配置邮件通知

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

选项

--timestamp YYYYMMDDHHMMSS
必须。指定一个用来恢复gpbackup备份集的时间戳。默认gprestore 会尝试从Master主机的$MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDhhmmss/ 路径下定位时间戳对应的元数据文件,从每个Segment主机的<seg_dir>/backups/YYYYMMDD/YYYYMMDDhhmmss/ 路径下定位CSV数据文件。
--backup-dir directory
可选。从指定的路径下找所有备份文件(元数据文件和数据文件)。必须指定directory 为一个绝对路径(不能是相对路径)。如果没有指定该选项,gprestore会尝试从Master主机的 $MASTER_DATA_DIRECTORY/backups/YYYYMMDD/YYYYMMDDhhmmss/ 路径下定位时间戳对应的元数据文件,从每个Segment主机的<seg_dir>/backups/YYYYMMDD/YYYYMMDDhhmmss/ 路径下定位CSV数据文件。如果gpbackup操作指定了该选项,那么恢复时请同时指定该选项。
该选项不能和--plugin-config选项一起使用。
--create-db
可选。在恢复数据库对象元数据之前先创建数据库。
通过复制空的系统标准数据库template0来创建指定的数据库。
--data-only
可选。仅恢复gpbackup创建的表数据,不恢复创建数据库表的操作。该选项假定 数据库中已经存在对应的表。如果要恢复指定的集合,可以通过指定选项来包含表/模式或排除表/模式。 指定--with-stats选项来从备份集恢复表的统计信息。
备份集必须包含要被恢复的表数据。例如,gpbackup采用选项 --metadata-only备份的备份集不包含表数据,不能用来恢复数据。
如果要仅恢复数据库表,不恢复表里的数据,参见选项 --metadata-only
--debug
可选。显示操作期间的详细信息和调试日志。
--exclude-schema schema_name
可选。指定恢复操作期间要排除的数据库模式。可以多次指定以排除多个模式。该选项不能和 --include-schema或表过滤选项(例如:--include-table) 一起使用。
--exclude-table schema.table
可选。指定恢复操作期间要排除的表。指定的格式必须为<schema-name>.<table-name>。 如果表名或模式名使用了非小写字母、数字或下划线,那改名字可以用双引号包裹。客户可以多次指定该选项。 如果表不在备份集中,恢复操作会失败。不能指定分区表的子分区。
该选项不能与--exclude-schema或表过滤选项(例如:--include-table) 一起使用。
--exclude-table-file file_name
可选。指定恢复期间要排除的表的列表文件。文件为text格式,并且每行都必须定义一个单独的表,格式为 <schema-name>.<table-name>。文件不能包含多余的行。 如果表名或模式名使用了非小写字母、数字或下划线,那改名字可以用双引号包裹。客户可以多次指定该选项。 如果表不在备份集中,恢复操作会失败。不能指定分区表的子分区。
该选项不能与--exclude-schema或表过滤选项(例如:--include-table) 一起使用。
--include-schema schema_name
可选。指定要恢复的数据库模式。可以多次指定该选项以包含多个模式。如果指定了该选项,那定义的任何 模式都必须在备份集中。没在--include-schema选项中指定的所有模式都会被忽略。
如果指定的模式在目标数据库中存在,该工具会产生一个错误然后继续操作。如果被恢复的表在数据库中存在, 该工具会失败。
如果备份集在多个模式下存在依赖关系,那不能使用该选项。
更多信息请见过滤备份和恢复的内容
--include-table schema.table
可选。指定一个要恢复的表。格式必须为<schema-name>.<table-name>。 如果任何表名或模式名使用非小写字母、数字或下划线,那么可以用双引号包裹名字。该选项可以多次指定。 不能指定分区表的子分区。
也可以指定一个有效的模式或视图。
如果指定了该选项,工具不会自动恢复依赖对象。必须指定需要的依赖对象。例如,如果恢复一个视图, 那么必须也恢复它对应的表。如果恢复的表使用到了一个序列,那么也必须恢复该序列。这些对应的对象 也必须都在备份集中存在。
不能将该选项与--include-schema或表过滤选项 (例如--exclude-table-file)一起使用。
--include-table-file file_name
可选。指定一个包含恢复表名的列表文件。每行代表一张单独的表,格式必须为 <schema-name>.<table-name>。该文件不能包含多余的行。 如果表名或模式名使用了非小写字母、数字或下划线,那改名字可以用双引号包裹。客户可以多次指定该选项。 如果表不在备份集中,恢复操作会失败。不能指定分区表的子分区。
也可以指定一个有效的模式或视图。
如果指定了该选项,工具不会自动恢复依赖对象。必须指定需要的依赖对象。例如,如果恢复一个视图, 那么必须也恢复它对应的表。如果恢复的表使用到了一个序列,那么也必须恢复该序列。这些对应的对象 也必须都在备份集中存在。
如果使用--include-table-file选项,gprestore 不会创建表的角色或用户集合。工具会恢复表的索引和规则。触发器也会被恢复,但是Greenplum 目前不支持触发器。
更多信息请见过滤备份或恢复的内容
--jobs int
可选。指定恢复表数据和元数据的并行连接的数量。默认gprestore使用1个连接。 增加该参数会提高数据恢复的速度。
Note: 如果使用gpbackup --single-data-file选项合并表备份为每个Segment 节点1个单独的文件,那么不能在恢复过程中指定--jobs超过1来进行并行恢复。
--metadata-only
可选。从一个gpbackup创建的备份集中创建数据库表,不恢复数据。该选项 假设目标数据库中不存在这些表。要从备份集创建指定的表集合,可以通过指定对应的选项来选择或 排除相应的表或模式。指定选项--with-globals来恢复Greenplum数据库 系统对象。
备份集必须包含要恢复的表的DDL数据。例如,gpbackup选项--data-only 生成的备份集就不包含表的DDL信息。
创建完数据库表后再恢复表数据,请见选项 --data-only
--on-error-continue
可选。指定该选项以在创建数据库元数据(例如表、对象或函数)或恢复数据过程中出现SQL错误时, 忽略错误继续执行。如果有其他类型错误出现,工具会退出。工具会显示错误信息汇总并将错误信息写入到 gprestore日志文件,并继续恢复操作。
默认为第一次出现错误即退出。
--plugin-config config-file_location
指定gpbackup插件配置文件位置,它是一个YAML格式的文本文件。该文件包含 gprestore在恢复操作期间使用的插件的配置信息。
如果备份数据库时指定了--plugin-config选项,那么在从该备份集恢复 数据时也必须指定该配置文件。
该选项不能与--backup-dir同时使用。
有关存储插件应用的详细信息,请见 使用gpbackup存储插件
--quiet
可选。禁止任何非告警、非错误日志输出。
--redirect-db database_name
可选。恢复到指定的database_name,而不是备份时的默认数据库名。
--verbose
可选。显示恢复操作期间的详细日志信息。
--version
可选。打印版本号并退出。
--with-globals
可选。恢复备份集合中的Greenplum数据库系统对象,和其余数据库对象。详见备份或还原中包含的对象
--with-stats
可选。从备份集合恢复查询计划统计信息。
--help
显示在线帮助信息。

Return Codes

gprestore完成后会返回如下返回码之一
  • 0 – 成功完成恢复。
  • 1 – 恢复完成,没有严重错误。具体信息见日志文件。
  • 2 – 恢复失败,有严重错误。具体信息见日志文件。

示例

创建demo数据库并恢复备份集合中指定时间的所有表名和模式名:
$ dropdb demo
$ gprestore --timestamp 20171103152558 --create-db
恢复备份集到"demo2"数据库而不是默认备份的"demo"数据库:
$ createdb demo2
$ gprestore --timestamp 20171103152558 --redirect-db demo2
恢复数据库全局对象和查询计划统计信息,而不是默认的全部数据:
$ gprestore --timestamp 20171103152558 --create-db --with-globals --with-stats
使用创建在/home/gpadmin/backup下的文件恢复数据,创建8个并行连接:
$ gprestore --backup-dir /home/gpadmin/backups/ --timestamp 20171103153156 --create-db --jobs 8
仅恢复备份集中的"wikipedia"模式:
$ dropdb demo
$ gprestore --include-schema wikipedia --backup-dir /home/gpadmin/backups/ --timestamp 20171103153156 --create-db

如果从增量备份集中恢复,所有需要的备份文件都必须对gprestore可用。例如, 以下时间戳指定增量备份集。20170514054532时增量备份集合的全备份。

20170514054532 (full backup)
20170714095512 
20170914081205 
20171114064330 
20180114051246

以下gprestore命令指定时间戳20121114064330。时间戳为20120714095512和 20120914081205的增量备份和全量备份必须都能被恢复程序访问。

gprestore --timestamp 20121114064330 --redirect-db mystest --create-db