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

Posted

技术标签:

【中文标题】如何减少存储(缩减)我的 RDS 实例?【英文标题】:How to reduce storage(scale down) my RDS instance? 【发布时间】:2016-08-13 06:57:10 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这仍然是有效的答案吗?我刚刚遇到mistwire.com/2018/03/… @Dave 我在那篇文章中没有看到任何关于更改存储卷大小的内容。那篇文章与更改实例大小有关,即可用的 CPU 和 RAM 量。不是磁盘空间。 仍然如此,请求他们的支持。即使在删除 DB 计费大小后也不会减少。 除了答案中提到的 pg_dump 等数据库特定实用程序外,您还可以使用 AWS Database Migration Service。这是相同的getting started 链接。 请记住,DMS 不能顺利处理 JSON 字段,您可能无法利用,已经浪费了大约 4 个小时【参考方案2】:

根据 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。)

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

感谢您推荐数据库迁移服务。它几乎对我有用 - 直到我发现它(当前)不支持 JSON 或 JSONB 列的正确迁移:-( 这是来自亚马逊的指南:aws.amazon.com/premiumsupport/knowledge-center/…【参考方案4】:

使用 RDS 时,您无需进行典型的硬件“容量规划”,只需为短期或中期(取决于)配置足够的磁盘空间,并在需要时进行扩展。

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

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

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

【讨论】:

【参考方案5】:

您可以通过将数据库迁移到 Aurora 来做到这一点。

如果您不想要 Aurora,我认为数据迁移服务是最佳选择。我们正在将生产转移到 Aurora,所以这无关紧要,我们总是可以使用 pg_dump 或 DMS 将其从 Aurora 中恢复。 (我认为这也适用于 MySQL,但尚未测试。)

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

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

如果需要,您可以在 3 点停止,然后继续使用 Aurora DB。

【讨论】:

以上是关于如何减少存储(缩减)我的 RDS 实例?的主要内容,如果未能解决你的问题,请参考以下文章

RDS 实例使用的 EBS 卷

如何让RDS 下的 Mysql 支持 Emoji 表情存储

如何释放 MySQL Amazon RDS 实例中的空间

阿里云rds 实例 存储空间 怎么选择

AWS RDS 是不是支持 MySQL 作为文档存储

请问储存在阿里云的数据如何下载到本地电脑