我正在尝试使用 AWS DMS 将数据从巴黎区域 (eu-west-3( 的源数据库 (AWS RDS MySQL( 移动到爱尔兰区域 (eu-west-1( 的目标数据库 (AWS Redshift(。目标是不断复制正在进行的更改。
我遇到了这些错误:
An error occurred (InvalidResourceStateFault) when calling the CreateEndpoint operation: The redshift cluster datawarehouse needs to be in the same region as the current region. The cluster's region is eu-west-1 and the current region is eu-west-3.
文档说:
使用 AWS DMS 的唯一要求是您的终端节点之一必须 使用 AWS 服务。
因此,我正在努力做的事情应该是可能的。在实践中,这似乎是不允许的。
如何将 AWS DMS 从一个区域使用到另一个区域? 我的终端节点应该在哪个区域? 我的复制任务应该在哪个区域? 我的复制实例必须与 RDS MySQL 实例位于同一区域,因为它们需要共享子网
AWS提供了这份名为"将 AWS 资源迁移到新的 AWS 区域"的白皮书,该白皮书于去年更新。您可能需要联系他们的支持人员,但一个想法是在迁移到 Redshift 之前将您的 RDS 移动到适当区域中的另一个 RDS。在白皮书中,它们提供了一种迁移 RDS 的替代方法(如果您出于某种原因不想使用它,则无需 DMS(:
- 停止所有事务或拍摄快照(但是,在此时间点之后的更改将丢失,可能需要重新应用于 目标亚马逊 RDS 数据库实例(。
- 使用临时 EC2 实例,将所有数据从 Amazon RDS 转储到一个文件中:
- 对于 MySQL,请使用 mysqldump 工具。你可能想要 压缩此转储(请参阅 bzip 或 gzip(。
- 对于 MS SQL,请使用 bcp 实用程序,用于将数据从 AMAZON RDS SQL DB 实例导出到文件中。 可以使用 SQL Server 生成和发布脚本向导来 为整个数据库或仅为选定对象创建脚本。36
- 注意:Amazon RDS 不支持Microsoft SQL Server 备份文件 恢复。
- 对于 Oracle,请使用 Oracle 导出/导入实用程序或 数据抽取功能(请参阅 http://aws.amazon.com/articles/AmazonRDS/4173109646282306(。
- 为 PostgreSQL,你可以使用 pg_dump 命令导出数据。
- 使用 CP、FTP 或 Rsync 等标准工具将此数据复制到目标区域中的实例。
- 使用新的 Amazon RDS 安全组在目标区域中启动新的 Amazon RDS 数据库实例。
- 导入保存的数据。
- 验证数据库是否处于活动状态以及您的数据是否存在。
- 删除源区域中的旧 Amazon RDS 数据库实例
我发现了一个我目前正在测试的解决方法。
我将"Postgres"声明为Redshift集群的引擎类型。它诱使 AWS DMS 认为它是一个外部数据库,并且 AWS DMS 不再检查区域。
我认为这会导致性能下降,因为 DMS 可能会使用 INSERT 而不是 COPY 命令将数据提供给 Redshift。
目前 Redshift 必须与复制实例位于同一区域。
Amazon Redshift 集群必须位于同一 AWS 账户中,并且 与复制实例相同的 AWS 区域。
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html
因此,应该在 VPC 内的 Redshift 区域中创建复制实例 然后使用VPC 对等使复制实例能够连接到其他区域中 MySQL 实例的 VPC
https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html