我正在开发一个项目,使用 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 正确设置此通配符模式的格式感到有点困惑。
我的设置:
有没有人遇到过类似的问题,或者可以提供有关如何在这种情况下正确转义下划线的见解?如果您有任何建议或替代方法能够在 AWS DMS 迁移任务中正确包含带有 company_ 前缀的所有数据库,我们将不胜感激。
您在 DMS 迁移任务中遇到的问题可能是由于使用选择规则模式造成的。您为架构名称提供的语法与 DMS 期望的正则表达式语法不兼容。
不应使用方括号表示下划线字符,而应使用反斜杠对其进行转义。以下是修改选择规则模式的方法:
json 复制代码 { "规则类型": "选择", “规则ID”:“1”, “规则名称”:“1”, “对象定位器”:{ "schema-name": "公司\%", “表名”:“%” }, “规则动作”:“包括” } 在正则表达式中,下划线字符“”有特殊含义,所以需要用反斜杠“_”进行转义才能按字面意思匹配。
通过此修改,选择规则模式应该正确匹配所有带有 company_ 前缀的数据库,并且您的 DMS 迁移任务应该能够找到这些数据库中的表进行迁移。