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

问题描述 投票:0回答:7

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

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

postgresql amazon-web-services amazon-rds
7个回答
31
投票

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

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

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


18
投票

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

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


8
投票

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

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

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


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,您将不会节省任何钱。其他折扣因素也可能发挥作用。


3
投票

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

如果您不需要 Aurora,我认为数据迁移服务是最佳选择。我们正在将生产转移到 Aurora,所以这并不重要,我们始终可以使用

pg_dump
或 DMS 将其从 Aurora 中恢复。 (我认为这也适用于 MySQL,但尚未测试过。)

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

  1. 创建普通快照。完整配置的存储大小分配给快照。
  2. 将快照升级到 Aurora 支持的引擎版本(如果尚不支持)。我选择了10.7。
  3. 将快照迁移到 Aurora。这将创建一个新的 Aurora 数据库。
  4. 拍摄新的 Aurora 数据库快照。快照存储大小开始时为完整配置大小,但完成后降至实际使用的存储。
  5. 删除新的 Aurora DB。
  6. 再次恢复您的 Aurora 快照并在新的数据库中进行查看,直到您满意可以删除原始快照,以确认您的 Aurora 快照是否良好。
  7. 删除新的 Aurora DB 和原始快照。

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


1
投票

#2 答案在 Windows 10 上不起作用,因为根据这个 dba 溢出问题,当使用

>
运算符时,shell 会重新编码输出。
pg_dump
将生成一个文件,但是
pg_restore
给出了神秘的错误:

pg_restore: [archiver] did not find magic string in file header

添加

-E UTF8
-f
而不是
>

pg_dump -Fc -v -E UTF8 -h your-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username your-databasename -f your-databasename.dump

0
投票

创建一个具有较小磁盘空间的只读副本,将其提升为独立副本,然后将其切换为主副本怎么样?我想这就是我会做的。

© www.soinside.com 2019 - 2024. All rights reserved.