AWS DMS 迁移任务失败,并在 MySQL 的表映射中使用通配符“未找到表”

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

我正在开发一个项目,使用 AWS Database Migration Service (DMS) 将大约 1000 个数据库从 RDS MySQL 5.7 实例迁移到 RDS MySQL 8 实例。所有这些数据库的名称都以前缀 company_ 开头。还有很多其他数据库,因此包含所有数据库并一一排除它们对我来说不是一个选择。

但是,我面临 DMS 迁移任务的问题,该任务失败并显示错误消息:

“任务初始化时未找到表。所选表或架构不再存在,或者找不到表选择模式的匹配项。”

当我尝试在表映射中使用选择规则来包含带有 company_ 前缀的所有数据库时,会发生这种情况。我正在使用的表映射模式是:

{
  "rule-type": "selection",
  "rule-id": "1",
  "rule-name": "1",
  "object-locator": {
    "schema-name": "company[_]%",
    "table-name": "%"
  },
  "rule-action": "include"
}

有趣的是,当我指定单个数据库(例如

company_test-company
,甚至
company_test%
company_t%
)时,迁移会成功完成。但是,当我使用通配符模式包含所有
company_
前缀数据库时,就会出现问题。我还尝试过诸如
company[_][a-z]%
company#_%
company%
之类的变体,但所有这些都会导致相同的错误。

根据我的理解,这个问题似乎与转义模式中的下划线有关,但我似乎无法解决它。表映射必须包含所有表 (%),因此我对如何为 AWS DMS 正确设置此通配符模式的格式感到有点困惑。

我的设置:

  • 来源:RDS MySQL 5.7(使用root用户帐户)
  • 目标:RDS MySQL 8(使用 root 用户帐户)
  • DMS 实例:dms.c5.4xlarge

有没有人遇到过类似的问题,或者可以提供有关如何在这种情况下正确转义下划线的见解?如果您有任何建议或替代方法能够在 AWS DMS 迁移任务中正确包含带有 company_ 前缀的所有数据库,我们将不胜感激。

amazon-rds database-migration aws-dms
1个回答
0
投票

您在 DMS 迁移任务中遇到的问题可能是由于使用选择规则模式造成的。您为架构名称提供的语法与 DMS 期望的正则表达式语法不兼容。

不应使用方括号表示下划线字符,而应使用反斜杠对其进行转义。以下是修改选择规则模式的方法:

json 复制代码 { "规则类型": "选择", “规则ID”:“1”, “规则名称”:“1”, “对象定位器”:{ "schema-name": "公司\%", “表名”:“%” }, “规则动作”:“包括” } 在正则表达式中,下划线字符“”有特殊含义,所以需要用反斜杠“_”进行转义才能按字面意思匹配。

通过此修改,选择规则模式应该正确匹配所有带有 company_ 前缀的数据库,并且您的 DMS 迁移任务应该能够找到这些数据库中的表进行迁移。

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