如何减少存储(缩小)我的 RDS 实例?

How to reduce storage(scale down) my RDS instance?

我有一个 RDS(Postgres) 实例,存储 SSD 1000GB,但数据只有 100GB 大小。

如何轻松缩容RDS的存储资源?

RDS 不允许您减少分配给数据库实例的存储量,只能增加它。

要将数据库移动到更少的存储空间,您必须使用所需的存储空间创建一个新的 RDS 实例 space,然后使用 pg_dump/pg_restore 之类的方法将数据从旧数据库移动到新的。

另请注意,具有 1,000GB SSD 存储的 RDS 实例的基本 IOPS 为 3,000。具有 100GB SSD 存储的 RDS 实例的基本 IOPS 为 300,偶尔会突发高达 3,000。

使用 RDS 时,无需使用典型的硬件 "capacity planning",您只需配置足够的磁盘 space 供短期或中期使用(视情况而定),在需要时扩展它。

正如@Mark B 提到的,您还需要注意 IOPS。如果需要高性能数据库,可以使用 "provisioned IOPS"。

在进入磁盘 space 存储部分之前,您应该对成本与性能进行调整。 例如。如果将 1000GB 减少到 120GB,对于美国西部,您将节省 0.125x 880GB = 110/月。但最大 IOPS 将为 120x 3 = 360IOPS

配置额外的 IOPS 以提高性能需要 0.10 美元。假设您实际上需要 800IOPS 以获得更高的在线用户响应,
(800-360) x 0.10 = 44 美元。所以实际的节省可能最终是"less"。如果您的 RDS 需要恒定的 1100 IOPS,您将不会节省任何资金。其他折扣因素也可能发挥作用。

基于 AWS 的帮助 here,这是对我有用的完整过程:

1) 将数据库转储到一个文件:运行 这在一台可以通过网络访问数据库的机器上进行: pg_dump -Fc -v -h your-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username your-databasename > your-databasename.dump

2) 在AWS控制台中,新建一个存储空间较小的RDS实例。 (您可能希望使用相同的用户名、密码和数据库名称进行设置。)

3)在新的RDS实例上恢复数据库:运行这个命令(显然和之前的命令在同一台机器上): pg_restore -v -h the-new-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username -d your-databasename your-databasename.dump

(请注意,在第 3 步中,我使用的是新 RDS 实例的端点。另请注意端点地址末尾没有 :5432。)

Amazon 不允许减少 RDS 实例的 HDD 大小,您可能有两种选择来减少存储大小。

1:-如果您能承受停机时间,则可以将旧实例的 mysqldump 备份恢复到具有较小存储大小的新实例。

2:- 您可以使用数据库迁移服务将数据从一个实例移动到另一个实例而无需停机。

您可以通过将数据库迁移到 Aurora 来完成此操作。

如果你不想要极光,我认为数据迁移服务是最好的选择。我们正在将生产转移到 Aurora,所以这无关紧要,我们始终可以使用 pg_dump 或 DMS 将其从 Aurora 中取回。 (我假设这也适用于 MySQL,但尚未测试。)

我的具体目标是在停用一些最初使用 1TB+ 存储创建的实例后减少 RDS Postgres 最终快照的大小。

  1. 创建普通快照。已将完整配置的存储大小分配给快照。
  2. 将快照升级到 Aurora 支持的引擎版本(如果尚不支持)。我选择了10.7.
  3. 将快照迁移到 Aurora。这将创建一个新的 Aurora 数据库。
  4. 为新的 Aurora 数据库创建快照。快照存储大小从完全配置大小开始,但在完成后下降到实际使用的存储。
  5. 删除新的 Aurora 数据库。
  6. 确认您的 Aurora 快照是好的,方法是再次还原它并在新的新数据库中四处寻找,直到您对可以删除原始快照感到满意为止。
  7. 删除新的新 Aurora 数据库和原始快照。

如果需要,您可以在 3 处停止,然后继续使用 Aurora 数据库。