管理 TiDB Data Migration 上游数据源

dmctl 是运维 TiDB Data Migration (DM) 集群的命令行工具。本文介绍了如何使用 dmctl 组件来管理数据源配置,包括如何加密数据库密码,数据源操作,查看数据源配置,改变数据源与 DM-worker 的绑定关系。

加密数据库密码

在 DM 相关配置文件中,推荐使用经 dmctl 加密后的密码。对于同一个原始密码,每次加密后密码不同。

  1. ./dmctl -encrypt 'abc!@#123'
  1. MKxn0Qo3m3XOyjCnhEMtsUCm83EhGQDZ/T4=

数据源操作

operate-source 命令向 DM 集群加载、列出、移除数据源。

  1. help operate-source
  1. `create`/`stop`/`show` upstream MySQL/MariaDB source.
  2. Usage:
  3. dmctl operate-source <operate-type> [config-file ...] [--print-sample-config] [flags]
  4. Flags:
  5. -h, --help help for operate-source
  6. -p, --print-sample-config print sample config file of source
  7. Global Flags:
  8. -s, --source strings MySQL Source ID

参数解释

  • create:创建一个或多个上游的数据库源。创建多个数据源失败时,会尝试回滚到执行命令之前的状态

  • stop:停止一个或多个上游的数据库源。停止多个数据源失败时,可能有部分数据源已成功停止

  • show:显示已添加的数据源以及对应的 DM-worker

  • config-file

    • 指定 source.yaml 的文件路径
    • 可传递多个文件路径
  • --print-sample-config:打印示例配置文件。该参数会忽视其余参数

命令用法示例

使用 operate-source 命令创建数据源配置:

  1. operate-source create ./source.yaml

其中 source.yaml 的配置参考上游数据库配置文件介绍

结果如下:

  1. {
  2. "result": true,
  3. "msg": "",
  4. "sources": [
  5. {
  6. "result": true,
  7. "msg": "",
  8. "source": "mysql-replica-01",
  9. "worker": "dm-worker-1"
  10. }
  11. ]
  12. }

查看数据源配置

数据源操作 - 图1

注意

config 命令仅在 DM v6.0 及其以后版本支持,之前版本可使用 get-config 命令。

如果知道 source-id,可以通过 dmctl --master-addr <master-addr> config source <source-id> 命令直接查看数据源配置。

  1. config source mysql-replica-01
  1. {
  2. "result": true,
  3. "msg": "",
  4. "cfg": "enable-gtid: false
  5. flavor: mysql
  6. source-id: mysql-replica-01
  7. from:
  8. host: 127.0.0.1
  9. port: 8407
  10. user: root
  11. password: '******'
  12. }

如果不知道 source-id,可以先通过 dmctl --master-addr <master-addr> operate-source show 查看源数据库列表。

  1. operate-source show
  1. {
  2. "result": true,
  3. "msg": "",
  4. "sources": [
  5. {
  6. "result": true,
  7. "msg": "source is added but there is no free worker to bound",
  8. "source": "mysql-replica-02",
  9. "worker": ""
  10. },
  11. {
  12. "result": true,
  13. "msg": "",
  14. "source": "mysql-replica-01",
  15. "worker": "dm-worker-1"
  16. }
  17. ]
  18. }

改变数据源与 DM-worker 的绑定关系

transfer-source 用于改变数据源与 DM-worker 的绑定关系。

  1. help transfer-source
  1. Transfers a upstream MySQL/MariaDB source to a free worker.
  2. Usage:
  3. dmctl transfer-source <source-id> <worker-id> [flags]
  4. Flags:
  5. -h, --help help for transfer-source
  6. Global Flags:
  7. -s, --source strings MySQL Source ID.

在改变绑定关系前,DM 会检查待解绑的 worker 是否正在运行同步任务,如果正在运行则需要先暂停任务,并在改变绑定关系后恢复任务

命令用法示例

如果不清楚 DM-worker 的绑定关系,可以通过 dmctl --master-addr <master-addr> list-member --worker 查看。

  1. list-member --worker
  1. {
  2. "result": true,
  3. "msg": "",
  4. "members": [
  5. {
  6. "worker": {
  7. "msg": "",
  8. "workers": [
  9. {
  10. "name": "dm-worker-1",
  11. "addr": "127.0.0.1:8262",
  12. "stage": "bound",
  13. "source": "mysql-replica-01"
  14. },
  15. {
  16. "name": "dm-worker-2",
  17. "addr": "127.0.0.1:8263",
  18. "stage": "free",
  19. "source": ""
  20. }
  21. ]
  22. }
  23. }
  24. ]
  25. }

在本示例中 mysql-replica-01 绑定到了 dm-worker-1 上。使用如下命令可以将该数据源绑定到 dm-worker-2

  1. transfer-source mysql-replica-01 dm-worker-2
  1. {
  2. "result": true,
  3. "msg": ""
  4. }

再次通过 dmctl --master-addr <master-addr> list-member --worker 查看,检查命令已生效。

  1. list-member --worker
  1. {
  2. "result": true,
  3. "msg": "",
  4. "members": [
  5. {
  6. "worker": {
  7. "msg": "",
  8. "workers": [
  9. {
  10. "name": "dm-worker-1",
  11. "addr": "127.0.0.1:8262",
  12. "stage": "free",
  13. "source": ""
  14. },
  15. {
  16. "name": "dm-worker-2",
  17. "addr": "127.0.0.1:8263",
  18. "stage": "bound",
  19. "source": "mysql-replica-01"
  20. }
  21. ]
  22. }
  23. }
  24. ]
  25. }