我需要使用 AWS DMS 将一个 MySQL RDS 实例复制到另一个。我一直在尝试,已经完成了所有设置,并且已经成功进行了迁移。问题是它没有创建索引。
我理解这背后的原因,显然不复制会更快,但我有太多跨多个架构的表,无法手动将它们添加回来。有没有办法让 DMS 在复制后复制索引?或者有其他解决方案?
答案1
事实证明,如果幸运的话,DMS 只会创建主键和可能还有几个索引。
当然有办法使用 mysql 命令来解决这个问题,但我发现 AWS 实现数据库迁移的方法是首先使用AWS 模式转换工具,然后使用 AWS DMS 复制您的数据。
答案2
我遇到了同样的问题 - AWS DMS 仅迁移了 PK。二级索引、自动增量计数器、用户和授权(不属于数据的所有内容)必须单独迁移。
解决方案:
从源 RDS 转储数据库结构:
mysqldump -u <username> -P <port> -h <host_source> --no-data -p --all-databases > schemas.sql
在目标RDS上导入结构:
mysql -u <username> -P <port> -h <host_target> -p < schemas.sql
在数据迁移任务中指定对目标表“不执行任何操作”
笔记:
对于迁移大型数据库,最好切换到更大的 RDS 实例类型。经验表明,当所有 RDS 实例都位于同一区域 (AZ) 且具有相同/相似的实例类型(即源、目标和副本实例)时,迁移将稳定。
最重要的是用一些自定义的高值(取决于数据库数据大小)切换 RDS 存储预配置 IOPS。
参考文档
缺少外键和二级索引
AWS DMS 会创建表、主键,在某些情况下还会创建唯一索引,但不会创建任何其他不需要从源高效迁移数据的对象。例如,它不会创建二级索引、非主键约束或数据默认值。
要从数据库迁移次要对象,如果您要迁移到与源数据库相同的数据库引擎,请使用数据库的本机工具。如果您要迁移到与源数据库用于迁移次要对象的数据库引擎不同的数据库引擎,请使用架构转换工具。
PS:将数据导入带有索引的表中效率不高,权衡取决于每种情况。