我有一个带有SSD 1000GB的RDS(Postgres)实例,但数据只有100GB大小。
如何轻松缩小RDS的存储资源?
答案 0 :(得分:20)
RDS不允许您减少分配给数据库实例的存储量,只增加它。
要将数据库移动到更少的存储空间,您必须使用所需的存储空间创建新的RDS实例,然后使用类似pg_dump / pg_restore的数据将数据从旧数据库移动到新数据库。
另请注意,具有1,000GB SSD存储的RDS实例的基本IOPS为3,000。具有100GB SSD存储的RDS实例的基本IOPS为300,偶尔突发多达3,000个。
答案 1 :(得分:12)
基于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
。)
答案 2 :(得分:5)
亚马逊不允许减少RDS实例的硬盘大小,您可以有两种方法来减少存储空间。
1:如果你能负担得起停机时间,那么旧实例的mysqldump备份可以恢复到存储容量较小的新实例。
2: - 您可以使用数据库迁移服务将数据从一个实例移动到另一个实例,而不会出现任何停机。
答案 3 :(得分: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,您将无法存钱。而其他折扣因素也可能发挥作用。
答案 4 :(得分:0)
您可以通过将数据库迁移到Aurora来实现。
如果您不想要Aurora,我认为数据迁移服务是最好的选择。我们正在将生产转移到Aurora,所以这没关系,我们可以始终使用pg_dump
或DMS将其从Aurora中撤回。 (我认为这同样适用于MySQL,但尚未对其进行测试。)
我的特定目标是在停用最初创建的每个实例具有1TB以上存储的某些实例后,减小RDS Postgres最终快照的大小。
如果愿意,可以停在3点,然后继续使用Aurora数据库。