减少生产 AWS RDS MySQL 实例的存储大小

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

我有一个在生产环境(多可用区)中使用的 MySQL RDS 实例。此实例被定义为“预配置 IOPS”,具有 1,000GB 存储空间和 6,000 预配置 IOPS。 我想减少我所支付的存储和预配置 IOPS 数量,因为我不再需要它们。我面临以下问题:

  1. AWS 不允许减少 RDS 实例的存储大小
  2. 对存储引擎(存储大小和/或类型)的任何更改在这么大的数据库上都需要永远进行(过去我测量了大约 24-36 小时)

我已经尝试过以下解决方案:

  1. 转储当前数据库,创建一个新的(较小的)实例并将转储的数据加载到其中。这很糟糕,因为对于如此大的数据库,转储/加载过程需要很长时间,我不能允许这种情况在生产数据库上发生。
  2. 为主数据库创建只读副本,更改其存储类型并将其提升为主数据库。这失败了,因为我什至无法减小副本的大小。

还有其他方法可以实现这一点吗?我真的想避免为未充分利用的数据库实例付费。

mysql amazon-web-services amazon-rds
1个回答
0
投票

我最近遇到了同样的情况,这就是我使用AWS DMS解决它的方法:

  1. 为RDS实例的参数组设置必要的参数
  2. 转储数据库的架构:
  3. mysqldump -h <original-db-host> -u <db-user> -p --no-data --all-databases --set-gtid-purged=OFF > schema.sql
    。这个
    包括模式而不包括数据,所以这个操作相对快速和可靠。
  4. 转储用户和权限:
  5. mysqlpump -h <original-db-host> -u <db-user> -p --set-gtid-purged=OFF --exclude-databases=% --users >> schema.sql
    
    
  6. 删除
  7. schema.sql
    中与以下用户相关的言论:
    
    • mysql.session
      
      
    • mysql.sys
      
      
    • rdsadmin
      
      
    • 创建RDS实例时设置的主用户
    • 这些是由 RDS/MySQL 自动创建和管理的,因此创建/修改它们将会失败
  8. 创建一个新的数据库实例
  9. ,设置与原始实例相同,只是存储大小减小了。 在新数据库实例中创建架构:
  10. mysql -h <new-db-host> -u <db-user> -p < schema.sql
  11. 为您的原始数据库创建源 DMS 端点
  12. 为您的新数据库创建目标 DMS 端点
  13. 确保将 initstmt=SET FOREIGN_KEY_CHECKS=0; 设置为“额外连接属性”。
  14. 创建 DMS 复制实例
  15. 使用之前在步骤 7、8 和 9 中创建的 DMS 资源创建 DMS 任务。最简单的是,如果您选择“完全加载,持续复制”作为类型,那么该任务将执行完全加载,然后也会同步任何后续更改。至于映射规则,
  16. mysqlsys
    ,
    和 
    performance_schema
     应排除在外,因为同步这些会失败。
    等到完全加载完成,然后验证 DMS 任务是否同步正在进行的更改。
  17. 将使用原数据库的服务切换到新数据库。
  18. 等到原始数据库上没有新的更新完成。这可以通过查看 DMS 任务的表统计信息中的“上次更新”列来验证。
  19. 当您确信没有任何东西再使用原始数据库时,请停止它。
  20. 在安全间隔(例如几天)后清理 AWS 资源:旧 RDS 实例、DMS 任务、DMS 端点、DMS 复制实例。
  21. 请注意,此过程并不容易,风险很大且耗时(可能需要多天),因此我仅建议您在减小尺寸可以节省大量成本的情况下这样做。

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