Amazon Redshift 快照和备份 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon Redshift 快照和备份

快照概述

快照是集群的时间点备份。存在两种类型的快照:自动手动。Amazon Redshift 通过使用加密的安全套接字层 (SSL) 连接,在 Amazon S3 内部存储这些快照。

Amazon Redshift 会自动拍摄递增快照,来跟踪自上次自动快照拍摄以来集群发生的变化。自动快照保留从快照还原集群所需的全部数据。您可以创建快照计划来控制何时拍摄自动快照,也可以随时拍摄手动快照。

当您从快照还原时,Amazon Redshift 将创建一个新集群并使该新集群在所有数据都已加载前可用,从而使您可以立即开始查询新集群。该集群将按需流式传输来自快照的数据以响应活动查询,然后在后台加载剩余的数据。

在启动集群时,可以设置自动快照和手动快照的保留期。您可以通过修改集群来更改自动快照和手动快照的默认保留期。您可以在创建快照时或通过修改快照来更改手动快照的保留期。

您可以通过下列方式监控快照进度:在 Amazon Web Services Management Console中查看快照详细信息、调用 CLI 中的 describe-cluster-snapshots 或调用 DescribeClusterSnapshots API 操作。对于正在进行的快照,通过上述方式可以看到增量快照的大小、传输速率、已用时间以及估计的剩余时间等信息。

为了确保您的备份始终对集群可用,Amazon Redshift 将快照存储在由 Amazon Redshift 管理的内部托管 Amazon S3 桶中。要管理存储费用,请估计需要将自动快照保留多少天并相应地配置其保留期。删除所有不再需要的手动快照。有关备份存储成本的更多信息,请参阅 Amazon Redshift 定价

使用 Amazon Redshift Serverless 中的快照和备份

Amazon Redshift Serverless 与预置集群一样,使您能够将备份作为命名空间中的对象和数据在某个时间点的表示形式。Amazon Redshift Serverless 中的备份有两种类型:手动创建的快照,以及 Amazon Redshift Serverless 自动创建的恢复点。您可以在使用快照和恢复点中找到有关使用 Amazon Redshift Serverless 快照的更多信息。

您也可以将快照从预置集群还原到无服务器命名空间。有关更多信息,请参阅从快照还原无服务器命名空间

自动快照

当某个集群的自动快照处于启用状态时,Amazon Redshift 会定期拍摄该集群的快照。默认情况下,Amazon Redshift 大约每 8 小时或在每节点数据更改达到 5 GB 时拍摄一次快照,以先到者为准。如果您的数据大于 5 GB * 节点数,则自动快照创建间隔的最短时间为 15 分钟。或者,您也可以创建快照计划来控制何时拍摄自动快照。如果您使用自定义计划,则自动快照间隔的最短时间为 1 小时。当您创建集群时,自动快照默认处于启用状态。

系统会在保留期结束时删除自动快照。默认保留期为一天;不过,您可以使用 Amazon Redshift 控制台对其进行修改,也可以使用 Amazon Redshift API 或 CLI 以编程方式对其进行修改。

要禁用自动快照,只需将保留期设置为零即可。如果您禁用自动快照,则 Amazon Redshift 会停止拍摄快照并删除相应集群的任何现有自动快照。您不能为 RA3 节点类型禁用自动快照。您可以将 RA3 节点类型的自动保留期设置为 1-35 天。

只有 Amazon Redshift 才能删除自动快照;您不能手动删除它们。Amazon Redshift 会在下列情况下删除自动快照:快照的保留期结束时、您禁用了集群的自动快照或您删除了集群。Amazon Redshift 会保留最新的自动快照,直到您禁用自动快照或删除集群为止。

如果您想要将自动快照保留更长时间,则可以创建一份副本作为手动快照。自动快照会保留至保留期结束;而相应的手动快照在您将其手动删除前或保留期结束前将会一直保留。

自动快照计划

要精确控制拍摄快照的时间,您可以创建快照计划并将其附加到一个或多个集群。修改快照计划时,将修改所有关联集群的计划。如果集群未附加快照计划,其将使用默认的自动快照计划。

快照计划 是一组计划规则。您可以基于指定的时间间隔(例如每 8 小时或每 12 小时)定义简单的计划规则。也可以添加规则来在一周中的某些天、特定时间或特定时段拍摄快照。此外,您还可以使用类 Unix 系统的 cron 表达式定义规则。

快照计划格式

您可以在 Amazon Redshift 控制台中创建快照计划。然后,您可以将计划附加到集群来触发创建系统快照。可以将计划附加到多个集群,也可以在计划中创建多个 cron 定义来触发快照。

您可以使用 cron 语法为快照定义计划。这些计划的定义使用经过修改的类 Unix 系统的 cron 语法。您可以使用协调世界时 (UTC) 格式指定时间。您可以创建最大频率为 1 小时、最小精度为 1 分钟的计划。

Amazon Redshift 修改后的 cron 表达式有 3 个必填字段,之间以空格分隔。

语法

cron(Minutes Hours Day-of-month Month Day-of-week Year)
字段 通配符

分钟

0-59

, - * /

小时

0-23

, - * /

日期

1-31

, - * ? / L W

1-12 或 JAN-DEC

, - * /

星期几

1–7 或 SUN-SAT

, - * ? L #

1970-2199

, - * /

通配符
  • ,(逗号)通配符包含其他值。在 Day-of-week 字段中,MON,WED,FRI 将包含星期一、星期三和星期五。总值限制为每字段 24 个。

  • -(破折号)通配符用于指定范围。在 Hour 字段中,1–15 将包含指定日期的 1 - 15 小时。

  • *(星号)通配符包含该字段中的所有值。在 Hours 字段中,* 将包含每个小时。

  • /(正斜杠)通配符用于指定增量。在 Hours 字段中,您可以输入 1/10 来指定从当天的第 1 个小时开始每隔 10 小时(例如,01:00、11:00 和 21:00)。

  • ?(问号)通配符用于指定一个或另一个。在 Day-of-month 字段中,您可以输入 7,如果您不介意 7 日是星期几,则可以在“星期几”字段中输入 ?

  • 字段中的 Day-of-monthLDay-of-week 通配符用于指定月或周的最后一天。

  • Day-of-month 字段中的 W 通配符用于指定工作日。在 Day-of-month 字段中,3W 用于指定最靠近当月的第三周的日。

  • “星期几”字段中的 # 通配符用于指定一个月内所指定星期几的特定实例。例如,3#2 指该月的第二个星期二:3 指的是星期二,因为它是每周的第三天,2 是指该月内该类型的第二天。

    注意

    如果使用 “#” 字符,则只能在星期字段中定义一个表达式。例如,“3#1,6#3”是无效的,因为它被解释为两个表达式。

限制
  • 您无法在同一 cron 表达式中为 Day-of-monthDay-of-week 字段同时指定值。如果您在其中一个字段中指定了值,则必须在另一个字段中使用 ?(问号)。

  • 快照计划不支持以下频率:

    • 计划快照的频率超过每小时 1 次。

    • 计划快照的频率低于每天 1 次(24 小时)。

    如果您有重叠的计划导致在 1 小时时段内计划了多次快照,将产生验证错误。

在创建计划时,您可以使用以下示例 cron 字符串。

分钟 小时 星期几 意义

0

14-20/1

TUE

星期二下午 2 点到晚上 8 点之间,每小时拍摄一次。

0

21

MON-FRI

每天晚上 9 点,星期一至星期五。

30

0/6

SAT-SUN

星期六和星期日从当天午夜 30 分 (00:30) 开始,每 6 小时拍摄一次。这导致在每天的 [00:30、06:30、12:30 和 18:30] 拍摄快照。

30

12/4

*

每天从 12:30 开始,每 4 小时拍摄一次。这将解析为 [12:30、16:30、20:30]。

例如,要运行每天从 15:15 开始、每 2 小时拍摄一次的计划 (解析为 [15:15、17:15、19:15、21:15、23:15]),请指定:

cron(15 15/2 *)

您可以在计划中创建多个 cron 计划定义。例如,以下 Amazon CLI 命令在一个计划中包含两个 cron 计划。

create-snapshot-schedule --schedule-identifier "my-test" --schedule-definition "cron(0 17 SAT,SUN)" "cron(0 9,17 MON-FRI)"

手动快照

您可以随时制作手动快照。默认情况下,即使您删除相应集群,手动快照也会无限期保留。您可以在创建手动快照时指定保留期,也可以通过修改快照来更改保留期。有关更改保留期的更多信息,请参阅更改手动快照保留期

如果删除某个快照,则无法启动任何引用该快照的新操作。不过,如果某个还原操作正在进行中,则该还原操作会运行完成。

Amazon Redshift 设有配额,用以限制您能够创建的手动快照的总数;该配额因不同的 Amazon 账户及不同的 Amazon 区域而异。默认的配额列出在 Amazon Redshift 资源中的配额和限制 中。

管理快照存储

由于快照会产生存储费用,因此,当您不再需要快照时,务必将其手动删除。在相应的快照保留期结束时,Amazon Redshift 将删除自动快照和手动快照。您也可以使用 Amazon Web Services Management Console 或 batch-delete-cluster-snapshots CLI 命令来删除手动快照。

您可以通过修改手动快照设置来更改手动快照的保留期。

您可以使用 Amazon Redshift 控制台或 describe-storage CLI 命令获取有关快照占用的存储量的信息。

从快照中排除表

默认情况下,所有用户定义的永久表都包含在快照中。如果表(如暂存表)不需要备份,您可以显著降低创建快照并从快照还原所需的时间。您还可以使用无备份表减小在 Amazon S3 上占用的存储空间。要创建无备份表,请在创建该表时包含 BACKUP NO 参数。有关语法的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 CREATE TABLECREATE TABLE AS

将快照复制到另一个 Amazon 区域

您可以配置 Amazon Redshift,以将集群的快照(自动或手动)自动复制到另一个 Amazon 区域。在集群的主要 Amazon 区域创建快照时,它会复制到辅助 Amazon 区域。这两个 Amazon 区域分别称为源 Amazon 区域目标 Amazon 区域。如果您在另一个 Amazon 区域中存储快照副本,则在有任何事情影响主要 Amazon 区域时,您可以使用最新数据还原集群。您可以配置集群,一次仅将快照复制到一个目标 Amazon 区域。有关 Amazon Redshift 区域的列表,请参阅《Amazon Web Services 一般参考》中的区域和端点

启用 Amazon Redshift 以自动将快照复制到另一个 Amazon 区域时,您需要指定要将快照复制到哪个目标 Amazon 区域。对于自动快照,您也可以指定此类快照在目标 Amazon 区域中的保留期。自动快照复制到目标 Amazon 区域且达到保留期之后,便会从目标 Amazon 区域删除。这样做可以降低快照的使用率。若要让自动快照在目标 Amazon 区域中保留更短时间或更长时间,请更改此保留期。

您为复制到目标 Amazon 区域的自动快照设置的保留期与源 Amazon 区域中的自动快照的保留期无关。复制的快照的默认保留期为七天。该七天保留期仅适用于自动快照。在源和目标 Amazon 区域中,将在快照保留期结束时或手动删除时删除手动快照。

您可以随时禁用集群的自动快照复制功能。当您禁用此功能时,快照将不再从源 Amazon 区域复制到目标 Amazon 区域。复制到目标 Amazon 区域的所有自动快照都将在达到保留期时删除,除非您为其创建手动快照副本。此类手动快照以及从目标 Amazon 区域复制的所有手动快照在您将其手动删除之前将会一直保留在目标 Amazon 区域中。

若要更改用于接收复制快照的目标 Amazon 区域,请先禁用自动复制功能。然后重新启用它,并指定新的目标 Amazon 区域。

某个快照复制到目标 Amazon 区域之后,便处于活动和可用状态,可用于还原相关内容。

要将 Amazon KMS 加密的集群的快照复制到另一个 Amazon 区域,则必须为 Amazon Redshift 创建授权,以在目标 Amazon 区域中使用客户主密钥。然后在启用源 Amazon 区域中的快照复制功能时选择该权限授予。有关配置快照复制授权的更多信息,请参阅将 Amazon KMS 加密的快照复制到另一个 Amazon 区域

从快照还原集群

快照包含来自您的集群上运行的任何数据库的数据。它还包含有关集群的信息,包括节点数、节点类型和管理员用户名。如果您从快照恢复集群,Amazon Redshift 会使用集群信息来创建新集群。然后它会从快照数据中恢复所有数据库。

对于从源快照创建的新集群,您可以选择配置,例如节点类型和节点数。如果您没有在请求中指定其他可用区,则该集群存储在相同的 Amazon 区域和可用区。当您从快照还原集群时,可为新集群选择兼容的维护跟踪。

注意

当您将快照恢复到具有不同配置的集群时,该快照必须在集群版本为 1.0.10013 或更高版本的集群上获取。

恢复正在进行时,事件通常按以下顺序发出:

  1. RESTORE_STARTED – 当恢复过程开始时发送 REDSHIFT-EVENT-2008。

  2. RESTORE_SUCCEEDED – 新集群已创建时发送 REDSHIFT-EVENT-3003。

    集群可用于查询。

  3. DATA_TRANSFER_COMPLETED – 数据传输完成时发送 REDSHIFT-EVENT-3537。

注意

RA3 集群仅发出 RESTORE_STARTED 和 RESTORE_SUCCEEDED 事件。由于 RA3 节点类型将数据存储在 Amazon Redshift 托管存储中,因此在 RESTORE 成功后不会进行显式的数据传输。使用 RA3 节点,作为正常查询处理的一部分,数据在 RA3 节点和 Amazon Redshift 托管存储之间持续传输。RA3 节点在本地缓存热数据,并自动将查询频率较低的数据块保存在 Amazon Redshift 托管存储中。

您可以通过下列方式监控还原进度:调用 DescribeClusters API 操作或在 Amazon Web Services Management Console 中查看集群详细信息。对于正在进行的还原,通过上述方式可以看到快照数据的大小、传输速率、已用时间以及估计的剩余时间等信息。有关这些指标的说明,请参阅 RestoreStatus

您无法使用快照将活动的集群还原为之前的状态。

注意

当您将快照还原为新集群时,如果您没有指定其他值,则使用默认的安全组和参数组。

出于以下原因,您可能想要将快照恢复到具有不同配置的集群:

  • 集群由较小的节点类型组成,且您想要将它合并到具有较少节点的较大节点类型。

  • 您监控工作负载并确定需要迁移到具有更多 CPU 和存储的节点类型。

  • 您想要衡量具有不同节点类型的测试工作负载的性能。

还原具有以下限制:

  • 新的节点配置必须为现有数据提供足够的存储空间。甚至在添加节点时,由于数据的重新分配方式,新配置可能没有足够的存储空间。

  • 还原操作将检查快照是否在与新集群的集群版本兼容的集群版本上创建。如果新集群的版本级别太早,则恢复操作将失败,并在错误消息中报告更多信息。

  • 可还原到的可能配置(节点数和节点类型)取决于原始集群中的节点数量和新集群的目标节点类型。要确定可能的配置,您可以使用 Amazon Redshift 控制台或 describe-node-configuration-options Amazon CLI 命令结合 action-type restore-cluster。有关使用 Amazon Redshift 控制台进行还原的更多信息,请参阅从快照还原集群

以下步骤使用 Amazon CLI 获取具有许多节点的集群,并将它合并到具有较少节点数的更大节点类型。在此示例中,我们从一个具有 24 个 节点的源集群开始。在本例中,假设我们已经为此集群创建了一个快照,并且我们想要将它恢复到更大的节点类型。

  1. 运行以下命令,获取 24 节点 集群的详细信息。

    aws redshift describe-clusters --region eu-west-1 --cluster-identifier mycluster-123456789012
  2. 运行以下命令,获取快照的详细信息。

    aws redshift describe-cluster-snapshots --region eu-west-1 --snapshot-identifier mycluster-snapshot
  3. 运行以下命令,描述此快照可用的选项。

    aws redshift describe-node-configuration-options --snapshot-identifier mycluster-snapshot --region eu-west-1 --action-type restore-cluster

    此命令会返回一个选项列表,包括每个选项的建议节点类型、节点数和磁盘利用率。在此示例中,上述命令列出以下可能的节点配置。我们选择恢复到三节点 集群。

    { "NodeConfigurationOptionList": [ { "EstimatedDiskUtilizationPercent": 65.26134808858235, "NodeType": "dc2.large", "NumberOfNodes": 24 }, { "EstimatedDiskUtilizationPercent": 32.630674044291176, "NodeType": "dc2.large", "NumberOfNodes": 48 }, { "EstimatedDiskUtilizationPercent": 65.26134808858235, "NodeType": "dc2.8xlarge", "NumberOfNodes": 3 }, { "EstimatedDiskUtilizationPercent": 48.94601106643677, "NodeType": "dc2.8xlarge", "NumberOfNodes": 4 }, { "EstimatedDiskUtilizationPercent": 39.156808853149414, "NodeType": "dc2.8xlarge", "NumberOfNodes": 5 }, { "EstimatedDiskUtilizationPercent": 32.630674044291176, "NodeType": "dc2.8xlarge", "NumberOfNodes": 6 } ] }
  4. 运行以下命令,将快照恢复到我们选择的集群配置。恢复此集群之后,我们拥有与源集群相同的内容,但数据已合并到三个 dc2.8xlarge 节点。

    aws redshift restore-from-cluster-snapshot --region eu-west-1 --snapshot-identifier mycluster-snapshot --cluster-identifier mycluster-123456789012-x --node-type dc2.8xlarge --number-of-nodes 3

如果您有预留节点,例如 DC2 预留节点,则可以升级到 RA3 预留节点。您可以在从快照还原或执行弹性调整大小时执行此操作。您可以使用控制台引导您完成此过程。有关升级到 RA3 节点的更多信息,请参阅升级到 RA3 节点类型

从快照中还原表

您可以从快照还原单个表而不是还原整个集群。在从快照还原单个表时,您需要指定源快照、数据库、架构和表名,以及目标数据库、架构和已还原表的新表名。

新表名不能是现有表的名称。要将现有表替换为从快照还原的表,请先重命名或删除现有表,然后再从快照还原表。

使用源表的列定义、表属性和列属性(外键除外)创建目标表。为了防止因依赖项而导致发生冲突,目标表不从源表继承外键。不向目标表应用任何依赖项(例如,源表上的视图或授予的权限)。

如果源表的拥有者存在,那么该数据库用户是已还原的表的拥有者,前提是该用户拥有足够的权限,可成为指定的数据库和模式中关系的拥有者。否则,已还原的表由在启动集群时创建的管理员用户所有。

已还原的表将返回在执行备份时其所处的状态。这包括由 Amazon Redshift 对可序列化隔离的符合性定义的事务可见性规则,这意味着数据将立即对在备份后启动的进行中事务可见。

从快照还原表受以下限制:

  • 您只能将表还原到当前正在运行的活动集群,并且只能从针对该集群制作的快照还原表。

  • 一次只能还原一个表。

  • 无法从在调整集群大小之前拍摄的集群快照还原表。一个例外是,如果节点类型没有更改,则可以在弹性大小调整后还原表。

  • 不向目标表应用任何依赖项(例如,源表上的视图或授予的权限)。

  • 如果为正在还原的表启用行级安全性,Amazon Redshift 将还原已启用行级安全性的表。

从快照还原表
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择集群,然后选择还原表要使用的集群。

  3. 对于操作,请选择还原表以便显示还原表页面。

  4. 输入要使用的快照、源表和目标表的相关信息,然后选择还原表

例 示例:使用 Amazon CLI 从快照中还原表

以下示例使用 restore-table-from-cluster-snapshot Amazon CLI 命令从 my-source-table 上的 sample-database 架构中还原 my-snapshot-id 表。您可以使用 Amazon CLI 命令 describe-table-restore-status 查看还原操作的状态。此示例将快照还原到具有新表名 mycluster-examplemy-new-table 集群。

aws redshift restore-table-from-cluster-snapshot --cluster-identifier mycluster-example --new-table-name my-new-table --snapshot-identifier my-snapshot-id --source-database-name sample-database --source-table-name my-source-table

共享快照

您可以授权其他 Amazon 客户账户访问现有手动快照,以与其共享该快照。对于每个快照,最多可以授权 20 个客户账户;对于每个 Amazon Key Management Service (Amazon KMS) 密钥,则最多可以授权 100 个。例如,如果您有 10 个快照,它们使用了一个 KMS 密钥加密,那么您可以授权 10 个 Amazon 账户来还原每个快照,或者是其他组合:总共 100 账户以及每个快照不超过 20 个账户。然后,以用户身份登录其中一个已授权账户的人可以对快照加以说明,也可以还原快照以在其账户下创建一个新的 Amazon Redshift 集群。例如,如果您针对生产和测试使用不同的 Amazon 客户账户,则用户可以使用生产账户登录并与使用测试账户的用户共享快照。然后,以测试账户用户身份登录的人可以还原快照以创建一个新的集群,该集群由测试账户所有,用于测试或诊断工作。

手动快照由在其下创建该快照的 Amazon 客户账户永久所有。只有拥有相应快照的账户中的用户可以授权其他账户访问该快照或撤消授权。已授权账户中的用户只能对与其共享的任何快照加以说明或还原相应快照;他们无法复制或删除与其共享的快照。授权在快照所有者将其撤消之前保持有效。如果所有者撤消授权,则之前已获授权的用户将无法再看到相应快照,也无法再启动任何引用该快照的新操作。如果在所有者撤消授权时相应账户正在还原快照,则该还原操作会运行完成。您无法删除具有活跃授权的快照;必须先撤消所有授权。

Amazon 客户账户始终能够访问相应账户所有的快照。如果尝试授予或撤消对所有者账户的访问权限,则会收到一条错误消息。您无法还原由非活动 Amazon 客户账户所有的快照,也无法对其加以说明。

当您获得访问 Amazon 客户账户的授权之后,该账户中便没有任何用户可以针对相应快照执行任何操作,除非他们代入的角色具有允许他们这样做的策略。

  • 快照拥有者账户中的用户只能在以下情况下授予和撤消快照访问权限:此类用户代入的角色具有相应的 IAM 策略,允许他们通过包含该快照的资源规范执行此类操作。例如,以下策略允许 Amazon 账户(012345678912)中的用户或角色授权其他账户访问名为 my-snapshot20130829 的快照:

    { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:AuthorizeSnapshotAccess", "redshift:RevokeSnapshotAccess" ], "Resource":[ "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829" ] } ] }
  • 与其共享快照的 Amazon 账户中的用户无法针对该快照执行操作,除非他们具有相应的权限允许他们执行这些操作。为此,您可以将策略分配给角色并代入该角色。

    • 要列出快照或对其加以说明,相应用户必须具有相应的 IAM 策略,允许他们执行 DescribeClusterSnapshots 操作。下方代码显示了一个示例:

      { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:DescribeClusterSnapshots" ], "Resource":[ "*" ] } ] }
    • 要还原快照,用户必须代入角色,该角色具有相应的 IAM 策略允许他们执行 RestoreFromClusterSnapshot 操作,且该策略要有一个资源元素,同时涵盖他们尝试创建的集群以及相应快照。例如,如果账户 012345678912 中的用户与账户 219876543210 共享了快照 my-snapshot20130829,则为了通过还原快照来创建集群,账户 219876543210 中的用户必须代入具有如下策略的角色:

      { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:RestoreFromClusterSnapshot" ], "Resource":[ "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829", "arn:aws:redshift:us-east-1:219876543210:cluster:from-another-account" ] } ] }
    • 在撤销 Amazon 账户对快照的访问权限后,该账户中的所有用户均无法访问该快照。即使这些账户具有允许对以前共享的快照资源执行操作的 IAM 策略,也是如此。