我有一个 AWS RDS (Postgres) 实例,存储 SSD 1000 GB,但数据大小只有 100 GB。
如何轻松缩减AWS RDS的存储资源?
RDS 不允许您减少分配给数据库实例的存储量,只能增加它。
要将数据库移动到更少的存储空间,您必须使用所需的存储空间创建一个新的 RDS 实例,然后使用 pg_dump/pg_restore 之类的工具将数据从旧数据库移动到新数据库。
另请注意,具有 1,000GB SSD 存储的 RDS 实例的基本 IOPS 为 3,000。具有 100GB SSD 存储的 RDS 实例的基本 IOPS 为 300,偶尔会突发高达 3,000。
基于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
。)
Amazon 不允许减少 RDS 实例的 HDD 大小,您可能有两种选择来减少存储大小。
1:-如果您可以承受停机时间,那么旧实例的 mysqldump 备份可以恢复到存储大小较小的新实例。
2:- 您可以使用数据库迁移服务将数据从一个实例移动到另一个实例,而无需任何停机。
使用 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,您将不会节省任何钱。其他折扣因素也可能发挥作用。
您可以通过将数据库迁移到 Aurora 来完成此操作。
如果您不需要 Aurora,我认为数据迁移服务是最佳选择。我们正在将生产转移到 Aurora,所以这并不重要,我们始终可以使用
pg_dump
或 DMS 将其从 Aurora 中恢复。 (我认为这也适用于 MySQL,但尚未测试过。)
我的具体目标是在停用一些最初使用 1TB 以上存储创建的实例后减少 RDS Postgres 最终快照大小。
如果需要,您可以在 3 处停止,然后继续使用 Aurora DB。
#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
创建一个具有较小磁盘空间的只读副本,将其提升为独立副本,然后将其切换为主副本怎么样?我想这就是我会做的。