gpdbrestore

gpcrondump生成的一组转储文件恢复一个数据库。

概要

  1. gpdbrestore { -t timestamp_key { [-L] |
  2. [--netbackup-service-host netbackup_server
  3. [--netbackup-block-size size] ] }
  4. -b YYYYMMDD | -R hostname:path_to_dumpset | -s database_name }
  5. [--noplan] [--noanalyze] [-u backup_directory] [--list-backup]
  6. [--prefix prefix_string] [--report-status-dir report_directory]
  7. [-S schema_name ]
  8. [-T schema.table ] [--table-file file_name] [--truncate] [-e]
  9. [-m]
  10. [-restore-stats [include | only]]
  11. [-G [include | only]] [--change-schema schema_name]
  12. [-B parallel_processes] [-d master_data_directory] [-a] [-q]
  13. [-l logfile_directory] [-v]
  14. [--ddboost [--ddboost-storage-unit=unit-ID] ]
  15. [--redirect database_name ]
  16. gpdbrestore -?
  17. gpdbrestore --version

描述

gpdbrestore工具使用gpcrondump操作创建的脚本文件在Greenplum数据库中重新创建数据定义(模式)和用户数据。

当用户从一个增量备份恢复时,gpdbrestore工具会假设完整的备份集可用。完整的备份集包括下列备份文件:

  • 指定的增量备份之前最后一个完全备份
  • 在那一次完全备份和指定的增量备份之间所有被创建的增量备份

gpdbrestore工具提供下列功能:

  • 为压缩自动重新配置。
  • 验证转储文件的数量正确(只对主Segment、只对镜像Segment、主Segment和镜像Segment都验证或者由某些镜像和主Segment转储文件构成的子集)。
  • 如果检测到失效Segment,则恢复到活动的Segment实例。
  • 除了从NetBackup服务器恢复数据时之外,用户不需要知道要恢复的备份集的完整的时间戳键(-t)。提供了额外的选项来只给出一个要恢复的日期(-b)、备份集目录位置(-R)或者数据库名(-s)。
  • -R选项允许从位于Greenplum数据库阵列之外的一台主机(归档主机)之上的备份进行恢复。确保正确的转储文件去到正确的Segment实例。
  • 从备份集自动标识数据库名。
  • 允许用户仅恢复特定的表(-T选项)而不是整个数据库。注意单个表在恢复之前不会自动被删除或者截断。

    在被恢复的表上会执行ANALYZE操作。用户可以通过指定选项--noanalyze来禁用ANALYZE操作。

  • 可以恢复角色和表空间这样的全局对象(-G选项)。

  • 检测备份集是只对主Segment还是针对主Segment和镜像Segment,并且执行合适的恢复操作。
  • 允许用户在单个操作中先删除目标数据库再进行恢复。

备份包含服务器配置参数gp_default_storage_options、optimizer以及search_path的数据库级设置,在用户执行恢复操作并且指定-e选项在执行恢复操作之前创建一个空的目标数据库时,这些设置会被恢复。

重要: 在恢复表数据到一个现有表时,该工具假设数据库表定义与被备份的表相同。该工具不会检查表定义。

数据库、方案以及表的名称

用户可以指定包含这些特殊字符的数据库名、方案名和表名。

“ ‘ ` ~ # $ % ^ & * ( ) _ - + [ ] { } > < \ | ; : / ?以及空格字符。

注意: 不支持字符!、逗号(,)以及点号(.)。此外,制表符(\t)以及新行(\n)字符也不被支持。

当名称包含特殊字符并且在命令行上被指定时,命令必须被封闭在双引号(”)中。对于不包含特殊字符的名称,双引号是可选的。例如,在命令行上使用”my#1schema”.mytable或者”my#1schema”.”mytable”都是有效的。在名称内,这些特殊字符必须被使用反斜线(\)转义: “ ` $ \ 。

当名称在一个输入文件中指定时,名称不能被封闭在双引号中。特殊字符不需要转义。

从带DD Boost的Data Domain系统恢复

当用户通过gpcrondump使用DD Boost创建备份时,备份被存储在一个Data Domain系统的存储单元中。在恢复备份时,用户必须使用备份数据时的同一个存储单元ID。用户可以使用gpcrondump的选项--ddboost-show-config显示包括该存储单元ID的当前DD Boost配置信息。

关于把DD Boost和Data Domain系统与Greenplum数据库一起使用的信息,请见Greenplum数据库管理员指南中的“备份和恢复数据库”。

NetBackup与DD Boost不兼容。NetBackup和DD Boost都不能被用在单个备份操作中。

从NetBackup恢复一个数据库

Greenplum数据库必须被配置为与用于恢复数据库数据的Veritas NetBackup主服务器通信。有关配置Greenplum数据库和NetBackup的信息,可见Greenplum数据库管理员指南。

在从NetBackup服务器恢复时,用户必须用-t选项指定备份的时间戳。

在恢复大量数据时,设置NetBackup的CLIENT_READ_TIMEOUT选项为操作预期时长(以秒为单位)至少两倍的一个值。CLIENT_READ_TIMEOUT的默认值是300秒(5分钟)。

NetBackup与DD Boost不兼容。NetBackup和DD Boost都不能被用在单个备份操作中。

用命名管道恢复数据库

如果用户使用gpcrondump备份数据库时使用了命名管道,在从该备份恢复数据库时带有备份数据的命名管道必须可用。

错误报告

在恢复操作完成后,该工具会在gpdbrestore的状态文件中检查SQL执行错误并且如果找到错误会显示警告。恢复状态文件的默认位置是在db_dumps/date/目录中。

选项

-a (不提示)

不提示用户确认。

-b YYYYMMDD

在Greenplum数据库阵列的主机上Segment数据目录的db_dumps/YYYYMMDD中查找转储文件。如果--ddboost被指定,系统会在Data Domain Boost主机上查找转储文件。

-B parallel_processes

恢复前后验证时并行检查的Segment数量。如果没有指定,根据需要恢复的Segment实例的数量,该工具将启动最多60个并行进程。

--change-schema=schema_name

可选。从gpcrondump创建的备份中恢复表到一个不同的方案中。schema_name必须在数据库中存在。如果该方案不存在,该工具会返回错误。不支持系统目录方案。

用户必须用-T和--table-file选项指定要恢复的表。如果一个被恢复的表在schema-name中存在,该工具会返回一个警告并且尝试从备份中追加数据到表中。用户可以在从备份中恢复数据到该表中之前指定--trunctate选项以截断表数据。

如果-S被指定,则不支持这个选项。

-d master_data_directory

可选。Master主机的数据目录。如果没有指定,将使用为$MASTER_DATA_DIRECTORY设置的值。

--ddboost [—ddboost-storage-unit=unit-ID ]

当数据由gpcrondump工具备份时,如果指定--ddboost选项,则为这个恢复操作使用Data Domain Boost。在使用Data Domain Boost之前,确保已完成一次性Data Domain Boost证书设置。

--ddboost-storage-unit选项是可选的。当从一台Data Domain服务器恢复一个备份时,用户必须使用备份数据时所用的同一个存储单元。

从带有DD Boost的Data Domain系统恢复

如果用户用gpcrondump的选项-g备份了Greenplum数据库配置文件并且指定了--ddboost选项,用户必须从该Data Domain系统手动恢复该备份。必须为Greenplum数据库的Master和所有主机与Segment恢复这些配置文件。Data Domain系统上的备份位置是目录unit_ID/backup_directory/date。当用户用gpcrondump指定Data Domain证书时,backup_directory会被设置。unit_ID是用户备份数据库时使用的Data Domain系统存储单元。

如果--netbackup-service-host被指定,则不支持这个选项。

-e (在恢复前创建目标数据库)

创建目标数据库,然后执行一次恢复操作。如果目标数据库存在,在创建该数据库之前删掉现有的数据库并且执行一次恢复操作。

该工具会为服务器配置参数gp_default_storage_options、optimizer以及search_path恢复数据库级别的设置。

-G [include | only] (恢复全局对象)

如果在Master数据目录中找到全局对象转储文件db_dumps/date/prefix_string_gp_global_-1_1_timestamp,则恢复不与特定方案或表相关的数据库元数据信息,例如角色和表空间。全局对象文件由gpcrondump选项-G创建。

  • 关键词include在执行恢复之外恢复全局对象。如果没有指定关键词,include就是默认选项。
  • 关键词only仅恢复全局对象。不会恢复其他数据库对象或者数据库表。

-m选项恢复方案或表相关的元数据。

-l logfile_directory

写日志文件的目录。默认为~/gpAdminLogs。

--list-backup

列出执行基于-t选项所指定的timestamp_key的恢复所需的完全和增量备份集,还有该备份集的位置。

只有为增量备份指定了timestamp_key时,才支持这个选项。

-L (列出备份集中的表名)

当与-t选项一起使用时,列出所提及备份集中存在的表名并且退出。不执行恢复。

-m (仅恢复元数据)

恢复数据库元数据信息(例如方案和表定义)以及SET语句创建的信息。这个选项不恢复数据库表数据。除非指定了包括或者排除表或方案的选项,所有表和方案的元数据都会被恢复。如果指定表或方案过滤器,该工具仅为被指定要恢复的方案和表恢复元数据。

不与特定方案或表相关的数据库信息(例如角色和表空间)不会被恢复。用户可以指定-G选项与这个选项来恢复由gpcrondump工具备份的全局元数据。

数据库统计信息不会被恢复。用户可以指定--restore-stats选项以恢复用gpcrondump工具备份的统计信息。

不支持带有--noplan或--noanalyze选项。

--netbackup-block-size size

指定从Veritas NetBackup服务器传输数据的块尺寸(以字节为单位)。默认是512字节。

如果指定NetBackup选项,则DDBoost备份选项不受支持。

--netbackup-service-host netbackup_server

当备份到NetBackup时,Greenplum数据库连接到的NetBackup主服务器。如果用户指定这个选项,用户必须用-t选项指定备份的时间戳。

这个参数的最大长度是127字符。

如果有-R、-s、-b、-L或者--ddboost中的任意一个,就不支持这个选项。

如果指定NetBackup选项,则DDBoost备份选项不受支持。

--noanalyze

在成功的恢复之后,不运行ANALYZE命令。默认是在被恢复的表上运行ANALYZE命令。如果在用户数据库中的表上运行ANALYZE要求可观的时间,这个选项就有用。

如果指定这个选项,用户应该手工在被恢复的表上运行ANALYZE。在恢复后运行ANALYZE失败可能导致糟糕的数据库性能。

有-m选项时不支持。

--noplan

仅恢复timestamp_key指定的增量备份期间备份的数据。完整备份集中其他的数据不会被恢复。包含增量备份的完全备份必须可用。

如果-t选项指定的timestamp_key没有引用一个增量备份,一个错误会被返回。

有-m选项时不支持。

--prefix prefix_string

如果用户指定gpcrondump选项--prefix prefix_string以创建备份,用户必须在恢复备份时用prefix_string指定这个选项。

如果用gpcrondump创建一组表的完全备份并且指定一个前缀,用户可以使用带有--list-filter-tables和--prefix prefix_string的gpcrondump列出该备份中包括或者排除的表。

-q (无屏幕输出)

运行在静默模式中。命令输出不显示在屏幕上,但仍将被写入到日志文件。

-R hostname:path_to_dumpset

允许用户提供一个主机名以及一组转储文件的完整路径。该主机不必是Greenplum数据库阵列中的主机,但是必须是Greenplum的Master可访问的主机。

--redirect database_name

指定数据在其中被恢复的数据库名。指定这个选项把数据恢复到与备份时指定的数据库不同的数据库中。如果database_name不存在,则它会被创建。

--report-status-dir report_directory

指定每台Greenplum数据库主机()上的目录的绝对路径,gpdbrestore会把恢复操作的报告状态文件写在其中。如果report_directory不存在或者不可写,gpdbrestore会返回错误并且停止。

如果这个选项没有被指定并且-u选项被指定,在-u选项指定的位置可写的情况下,报告状态文件会被写入到该位置中。如果-u选项指定的位置不可写,报告状态文件会被写到Segment的数据目录中。

--restore-stats [include | only]

指定这个选项可以恢复由gpcrondump工具的选项--dump-stats备份的数据库统计信息。

  • 关键词include在执行恢复之外恢复备份的统计信息。如果没有指定关键词,include就是默认选项。
  • 关键词only仅恢复被备份的统计信息。不会恢复其他数据库对象或者数据库数据。

如果这个选项与其他包括或排除要恢复的表或方案的选项一起被指定,该工具仅恢复被指定要恢复的表的统计信息。

如果要为数据库中不存在的表恢复统计信息,该工具会显示警告。统计信息不会被恢复。

-s database_name

在Greenplum数据库阵列的主机上的Segment数据目录的db_dumps目录中查找给定数据库名的最新转储文件集合。

-S schema_name

从备份中恢复所有由指定方案限定的表、视图、索引、函数以及序列。-S选项可以被指定多次。不支持系统目录方案。在被恢复的数据库的备份集中必须存在该方案名。要用备份中的数据替换方案表中的数据,用户可以指定--truncate选项。在数据被恢复前方案表会被截断。

-S选项不能与--change-schema选项一起指定。

-t timestamp_key

唯一标识要恢复数据的备份集的14位时间戳键。其形式是YYYYMMDDHHMMSS。在Greenplum数据库阵列的主机上Segment数据目录下的db_dumps目录中查找匹配这个时间戳键的转储文件。

-T schema.table_name

要恢复的一个表的名称。-T选项可以被指定多次。被提及的表必须在被恢复的数据库的备份集中存在。在数据从备份中被恢复前,现有的表不会被自动截断。要从备份中替换表中的现有数据,用户可以指定--truncate选项。

不支持通配符。

--table-file file_name

指定一个包含要恢复的表名列表的文件file_name。该文件包含任意数量的表名,每行列出一个。关于恢复指定表的信息请见-T选项。

--truncate

在从备份中恢复数据到表中前截断表中数据。如果没有指定这个选项,在数据被恢复到表中之前,现有表数据不会被移除。

仅在用选项-S、-T或者--table-file恢复一组表时才支持这个选项。如果要被恢复的表在数据库中不存在,该表会被恢复并且该工具返回一个警告消息说明该表在数据库中不存在。

有-e选项时不支持这个选项。

-u backup_directory

指定在每台主机上包含db_dumps目录的目录的绝对路径。如果没有指定,默认为要被备份的每个实例的数据目录。如果用户在创建备份集时用gpcrondump的选项-u指定了一个备份目录,则指定这个选项。

如果backup_directory不可写,备份操作报告状态文件会被写到Segment的数据目录。用户可以使用--report-status-dir选项指定一个写入报告状态文件的不同位置。

注意: 如果--ddboost被指定,则不支持这个选项。

-v | —verbose

指定详细模式。

--version (显示工具版本)

显示这个工具的版本。

-? (帮助)

显示在线帮助。

示例

从gpcrondump生成的最新备份文件恢复sales数据库(假定备份文件在Segment数据目录的db_dumps中):

  1. gpdbrestore -s sales

从位于Greenplum数据库阵列之外的归档主机上的备份文件恢复数据库(命令在Greenplum的Master主机上发出):

  1. gpdbrestore -R archivehostname:/data_p1/db_dumps/20160214

仅恢复全局对象(角色和表空间):

  1. gpdbrestore -G

注意: 在恢复一个包括增量备份的备份集时,不支持-R选项。

如果用户从包含一个增量备份的备份集中恢复,该备份集中的所有文件都必须对gpdbrestore可用。例如,下列时间戳键指定一个备份集。20160514054532是完全备份而其他的都是增量备份。

  1. 20160514054532
  2. 20160714095512
  3. 20150914081205
  4. 20161114064330
  5. 20170114051246

下面的gbdbrestore命令指定时间戳键20161114064330。为了执行一次恢复,时间戳为20160714095512和20160914081205的增量备份以及完全备份都必须可用。

  1. gpdbrestore -t 20161114064330

下面的gbdbrestore命令使用--noplan选项仅恢复带有时间戳键20161114064330的增量备份所备份的数据。之前的增量备份以及完全备份中的数据不会被恢复。

  1. gpdbrestore -t 20161114064330 --noplan

这个gpdbrestore命令从NetBackup的主服务器nbu_server1管理的数据恢复Greenplum数据库数据。选项-t 20170530090000指定gpcrondump在备份创建时生成的时间戳。-e选项指定在目标数据库被恢复前先删除它。

  1. gpdbrestore -t 20170530090000 -e --netbackup-service-host=nbu_server1

另见

gpcrondump