AWS RDS 只读副本:如何避免复制少数表和列

JDe*_*Dev 1 java amazon-web-services amazon-rds mariadb aws-lambda

我正在使用 RDS MariaDB,并且需要一个可以用于分析的从属数据库。我正在寻找 AWS 只读副本,但问题是它没有为我提供跳过包含一些敏感信息的少数表和列的复制的规定,我们不希望从数据库包含这些信息。

我可以使用 AWS 只读副本跳过少数表和列的复制吗?或者在 AWS 只读副本中,我可以编写可以从副本数据库中删除此信息的 AWS Lambda 吗?

Ant*_*ace 7

AWS Database Migration Service适用于以下用例:

  • 您可以使用 AWS Database Migration Service 在异构源数据库和目标数据库之间建立持续的连续复制。
  • AWS DMS 支持源数据库和目标数据库的 MariaDB。
  • AWS DMS 支持从源数据库中按表进行选择。
  • AWS DMS 支持在转换到目标数据库期间删除列。

根据常见问题解答:

问:除了一次性数据迁移外,我是否可以使用 AWS Database Migration Service 进行连续数据复制?

是的,您可以使用 AWS Database Migration Service 将数据一次性迁移到基于 RDS 和 EC2 的数据库中,也可以用于连续数据复制。AWS Database Migration Service 将捕获源数据库上的更改,并以事务一致的方式将它们应用到目标。可以从数据中心到 AWS 中的数据库进行连续复制,或者反过来,从 AWS 中的数据库复制到数据中心中的数据库。持续的连续复制也可以在同构或异构数据库之间进行。对于持续复制,最好使用多可用区以获得高可用性。

如果您不熟悉 AWS DMS,请查看官方文档“入门”页面,然后继续下面的操作。


使用与源相同的架构创建目标数据库,但您不想填充的这几个表和列除外。

将源数据库和目标数据库与 DMS 相关联后,您需要创建一个任务来执行迁移,并使用特定的表映射来排除表和删除列。

排除表格

创建带有规则操作排除的选择规则,并指定要排除的表。迁移所有表的文档中的示例,但表名以 开头的表除外DMS%

{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "DMS%"
            },
            "rule-action": "exclude"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

删除列

使用 rule-action remove 和 rule-target any创建转换规则,指定要删除的列的架构、表和列名称。以下示例也来自文档,从 test.Actor 表中删除所有以字符开头的列col

{
    "rules": [{
        "rule-type": "selection",
        "rule-id": "1",
        "rule-name": "1",
        "object-locator": {
            "schema-name": "test",
            "table-name": "%"
        },
        "rule-action": "include"
    }, {
        "rule-type": "transformation",
        "rule-id": "2",
        "rule-name": "2",
        "rule-action": "remove-column",
        "rule-target": "column",
        "object-locator": {
            "schema-name": "test",
            "table-name": "Actor",
            "column-name": "col%"
        }
    }]
 }
Run Code Online (Sandbox Code Playgroud)

进一步阅读