从 Amazon Aurora MySQL 迁移数据

    假设有两个 Aurora 集群需要迁移数据到 TiDB,其集群信息如下,其中 Aurora-1 包含一个独立的读取器节点。

    DM 在增量同步阶段依赖 格式的 binlog,如果未启用 binlog 及设置正确的 binlog 格式,则不能正常使用 DM 进行数据同步,具体可参见检查内容

    如果需要基于 GTID 进行数据迁移,还需要为 Aurora 集群启用 GTID 支持。

    在 Aurora 集群中,binlog 相关参数是集群参数组中的集群级参数,有关如何为 Aurora 集群启用 binlog 支持,请参考。在使用 DM 进行数据迁移时,需要将 binlog_format 参数设置为 ROW

    如果需要基于 GTID 进行数据迁移,需要将 gtid-modeenforce_gtid_consistency 均设置为 ON。有关如何为 Aurora 集群启用基于 GTID 的数据迁移支持,请参考 Configuring GTID-Based Replication for an Aurora MySQL Cluster

    第 2 步:部署 DM 集群

    目前推荐使用 DM-Ansible 部署 DM 集群,具体部署方法参照使用 DM-Ansible 部署 DM 集群

    使用 DM-Ansible 部署 DM 集群后,相关配置信息如下:

    • DM 集群相关组件配置信息

      | 组件 | 主机 | 端口 | |:|:- |:- | | dm_worker1 | 172.16.10.72 | 8262 | | dm_worker2 | 172.16.10.73 | 8262 | | dm_master | 172.16.10.71 | 8261 |

    • 上下游数据库实例相关信息

    数据库实例 主机 端口 用户名 加密密码
    上游 Aurora-1 pingcap-1.h8emfqdptyc4.us-east-2.rds.amazonaws.com 3306 root VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU=
    上游 Aurora-2 pingcap-2.h8emfqdptyc4.us-east-2.rds.amazonaws.com 3306 root VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU=
    下游 TiDB 172.16.10.83 4000 root
    • dm-master 进程配置文件 {ansible deploy}/conf/dm-master.toml 中的配置

    第 4 步:配置任务

    假设需要将 Aurora-1 和 Aurora-2 实例的 test_db 库的 test_table 表以全量+增量的模式同步到下游 TiDB 的 test_db 库的 test_table 表。

    1. # 任务名,多个同时运行的任务不能重名。
    2. name: "test"
    3. # 全量+增量 (all) 同步模式。
    4. task-mode: "all"
    5. # 下游 TiDB 配置信息。
    6. target-database:
    7. host: "172.16.10.83"
    8. password: ""
    9. # 当前数据同步任务需要的全部上游 MySQL 实例配置。
    10. mysql-instances:
    11. -
    12. # 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。
    13. source-id: "mysql-replica-01"
    14. # 需要同步的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `black-white-list` 的配置。
    15. black-white-list: "global"
    16. # mydumper 的配置项名称,用于引用全局的 mydumper 配置。
    17. mydumper-config-name: "global"
    18. -
    19. source-id: "mysql-replica-02"
    20. black-white-list: "global"
    21. mydumper-config-name: "global"
    22. # 黑白名单全局配置,各实例通过配置项名引用。
    23. black-white-list:
    24. global:
    25. - db-name: "test_db" # 需要同步的表的库名。
    26. tbl-name: "test_table" # 需要同步的表的名称。
    27. # mydumper 全局配置,各实例通过配置项名引用。
    28. mydumpers:
    29. global:
    30. extra-args: "-B test_db -T test_table" # 只导出 `test_db` 库中的 `test_table` 表,可设置 mydumper 的任何参数。
    1. 进入 dmctl 目录 /home/tidb/dm-ansible/resources/bin/

    2. 执行以下命令启动 dmctl

    3. 执行以下命令启动数据同步任务

      1. # `task.yaml` 是之前编辑的配置文件
      2. start-task ./task.yaml
      • 如果执行命令后的返回结果中不包含错误信息,则表明任务已经成功启动
      • 如果包含以下错误信息,则表明上游 Aurora 用户可能拥有 TiDB 不支持的权限类型

        此时可以选择以下两种处理方法中的任意一种进行处理后,再使用 start-task 尝试重新启动任务:

        1. 为用于进行数据迁移的 Aurora 用户移除不被 TiDB 支持的不必要的权限
        2. 如果能确保 Aurora 用户拥有 DM 所需要的权限,可以在 task.yaml 配置文件中添加如下顶级配置项以跳过启用任务时的前置权限检查
          1. ignore-checking-items: ["dump_privilege", "replication_privilege"]

    第 6 步:查询任务

    如需了解 DM 集群中是否存在正在运行的同步任务及任务状态等信息,可在 dmctl 内使用以下命令进行查询: