• 管理数据同步任务
    • dmctl 基本用法
      • dmctl 使用帮助
      • 加密数据库密码
      • 任务管理概览
    • 管理数据同步任务
      • 创建数据同步任务
        • 命令用法示例
        • 参数解释
        • 返回结果示例
      • 查询数据同步任务状态
        • 命令用法示例
        • 参数解释
        • 返回结果示例
      • 暂停数据同步任务
        • 命令用法示例
        • 参数解释
        • 返回结果示例
      • 恢复数据同步任务
        • 命令用法示例
        • 参数解释
        • 返回结果示例
      • 停止数据同步任务
        • 命令用法示例
        • 参数解释
        • 返回结果示例
      • 更新数据同步任务
        • 支持更新项的更新步骤
        • 不支持更新项的更新步骤
        • 命令用法示例
        • 参数解释
        • 返回结果示例
    • 管理 DDL lock
    • 强制刷新 task => DM-workers 映射关系

    管理数据同步任务

    本文介绍了如何使用 dmctl 组件来进行数据同步任务的管理和维护。对于用 DM-Ansible 部署的 DM 集群,dmctl 二进制文件路径为 dm-ansible/dmctl

    dmctl 基本用法

    本部分描述了一些 dmctl 命令的基本用法。

    dmctl 使用帮助

    1. $ ./dmctl --help
    2. Usage of dmctl:
    3. # 打印版本信息
    4. -V prints version and exit
    5. # 按照 DM 提供的加密方法加密数据库密码,用于 DM 的配置文件
    6. -encrypt string
    7. encrypt plaintext to ciphertext
    8. # DM-master 访问地址,dmctl 与 DM-master 交互以完成任务管理操作
    9. -master-addr string
    10. master API server addr

    加密数据库密码

    在 DM 相关配置文件中,要求必须使用经 dmctl 加密后的密码,否则会报错。对于同一个原始密码,每次加密后密码不同。

    1. $ ./dmctl -encrypt 123456
    2. VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU=

    任务管理概览

    1. # 进入命令行模式,与 DM-master 进行交互
    2. $ ./dmctl -master-addr 172.16.30.14
    3. Welcome to dmctl
    4. Release Version: v1.0.0-100-g2bef6f8b
    5. Git Commit Hash: 2bef6f8beda34c0dff57377005c71589b48aa3c5
    6. Git Branch: dm-master
    7. UTC Build Time: 2018-11-02 10:03:18
    8. Go Version: go version go1.11 linux/amd64
    9. » help
    10. DM control
    11. Usage:
    12. dmctl [command]
    13. Available Commands:
    14. break-ddl-lock force to break DM-worker's DDL lock
    15. generate-task-config generate a task config with config file
    16. help Help about any command
    17. pause-relay pause DM-worker's relay unit
    18. pause-task pause a running task with name
    19. query-status query task's status
    20. refresh-worker-tasks refresh worker -> tasks mapper
    21. resume-relay resume DM-worker's relay unit
    22. resume-task resume a paused task with name
    23. show-ddl-locks show un-resolved DDL locks
    24. sql-inject sql-inject injects (limited) sqls into syncer as binlog event
    25. sql-replace sql-replace replaces sql in specific binlog_pos with other sqls, each sql must ends with semicolon;
    26. sql-skip sql-skip skips specified binlog position
    27. start-task start a task with config file
    28. stop-task stop a task with name
    29. switch-relay-master switch master server of DM-worker's relay unit
    30. unlock-ddl-lock force to unlock DDL lock
    31. update-master-config update configure of DM-master
    32. update-task update a task's config for routes, filters, column-mappings, black-white-list
    33. Flags:
    34. -h, --help help for dmctl
    35. -w, --worker strings DM-worker ID
    36. # 使用 `dmctl [command] --help` 来获取某个命令的更多信息

    管理数据同步任务

    本部分描述了如何使用不同的任务管理命令来执行以下操作:

    • 创建数据同步任务
    • 查询数据同步任务状态
    • 暂停数据同步任务
    • 恢复数据同步任务
    • 停止数据同步任务
    • 更新数据同步任务

    创建数据同步任务

    start-task 命令用于创建数据同步任务。 当数据同步任务启动时,DM 将自动对相应权限和配置进行前置检查。

    1. » help start-task
    2. start a task with config file
    3. Usage:
    4. dmctl start-task [-w worker ...] <config_file> [flags]
    5. Flags:
    6. -h, --help help for start-task
    7. Global Flags:
    8. -w, --worker strings dm-worker ID

    命令用法示例

    1. start-task [ -w "172.16.30.15:10081"] ./task.yaml

    参数解释

    • -w
      • 可选
      • 指定在特定的一组 DM-workers 上执行 task.yaml
      • 如果设置,则只启动指定任务在该组 DM-workers 上的子任务
    • config_file
      • 必选
      • 指定 task.yaml 的文件路径

    返回结果示例

    1. » start-task task.yaml
    2. {
    3. "result": true,
    4. "msg": "",
    5. "workers": [
    6. {
    7. "result": true,
    8. "worker": "172.16.30.15:10081",
    9. "msg": ""
    10. },
    11. {
    12. "result": true,
    13. "worker": "172.16.30.16:10081",
    14. "msg": ""
    15. }
    16. ]
    17. }

    查询数据同步任务状态

    query-status 命令用于查询数据同步任务状态。有关查询结果及子任务状态,详见查询状态。

    1. » help query-status
    2. query task's status
    3. Usage:
    4. dmctl query-status [-w worker ...] [task_name] [flags]
    5. Flags:
    6. -h, --help help for query-status
    7. Global Flags:
    8. -w, --worker strings dm-worker ID

    命令用法示例

    1. query-status

    参数解释

    • -w
      • 可选
      • 查询在指定的一组 DM-workers 上运行的数据同步任务的子任务
    • task_name
      • 可选
      • 指定任务名称
      • 如果未设置,则返回全部数据同步任务的查询结果

    返回结果示例

    有关查询结果中各参数的意义,详见查询状态结果。

    1. » query-status
    2. {
    3. "result": true,
    4. "msg": "",
    5. "workers": [
    6. {
    7. "result": true,
    8. "worker": "172.16.30.15:10081",
    9. "msg": "",
    10. "subTaskStatus": [
    11. {
    12. "name": "test",
    13. "stage": "Running",
    14. "unit": "Sync",
    15. "result": null,
    16. "unresolvedDDLLockID": "",
    17. "sync": {
    18. "TotalEvents": "0",
    19. "TotalTps": "0",
    20. "RecentTps": "0",
    21. "MasterBinlog": "(mysql-bin.000004, 484)",
    22. "MasterBinlogGtid": "",
    23. "SyncerBinlog": "(mysql-bin.000004, 484)",
    24. "SyncerBinlogGtid": "",
    25. "blockingDDLs": [
    26. ],
    27. "unresolvedGroups": [
    28. ]
    29. }
    30. }
    31. ],
    32. "relayStatus": {
    33. "MasterBinlog": "(mysql-bin.000004, 484)",
    34. "MasterBinlogGtid": "",
    35. "relaySubDir": "0-1.000001",
    36. "RelayBinlog": "(mysql-bin.000004, 484)",
    37. "RelayBinlogGtid": "",
    38. "relayCatchUpMaster": true,
    39. "stage": "Running",
    40. "result": null
    41. }
    42. },
    43. {
    44. "result": true,
    45. "worker": "172.16.30.16:10081",
    46. "msg": "",
    47. "subTaskStatus": [
    48. {
    49. "name": "test",
    50. "stage": "Running",
    51. "unit": "Sync",
    52. "result": null,
    53. "unresolvedDDLLockID": "",
    54. "sync": {
    55. "TotalEvents": "0",
    56. "TotalTps": "0",
    57. "RecentTps": "0",
    58. "MasterBinlog": "(mysql-bin.000004, 4809)",
    59. "MasterBinlogGtid": "",
    60. "SyncerBinlog": "(mysql-bin.000004, 4809)",
    61. "SyncerBinlogGtid": "",
    62. "blockingDDLs": [
    63. ],
    64. "unresolvedGroups": [
    65. ]
    66. }
    67. }
    68. ],
    69. "relayStatus": {
    70. "MasterBinlog": "(mysql-bin.000004, 4809)",
    71. "MasterBinlogGtid": "",
    72. "relaySubDir": "0-1.000001",
    73. "RelayBinlog": "(mysql-bin.000004, 4809)",
    74. "RelayBinlogGtid": "",
    75. "relayCatchUpMaster": true,
    76. "stage": "Running",
    77. "result": null
    78. }
    79. }
    80. ]
    81. }

    暂停数据同步任务

    pause-task 命令用于暂停数据同步任务。

    1. » help pause-task
    2. pause a running task with name
    3. Usage:
    4. dmctl pause-task [-w worker ...] <task_name> [flags]
    5. Flags:
    6. -h, --help help for pause-task
    7. Global Flags:
    8. -w, --worker strings DM-worker ID

    命令用法示例

    1. pause-task [-w "127.0.0.1:10181"] task-name

    参数解释

    • -w
      • 可选
      • 指定在特定的一组 DM-workers 上暂停数据同步任务的子任务
      • 如果设置,则只暂停该任务在指定 DM-workers 上的子任务
    • task_name
      • 必选
      • 指定任务名称

    返回结果示例

    1. » pause-task test
    2. {
    3. "op": "Pause",
    4. "result": true,
    5. "msg": "",
    6. "workers": [
    7. {
    8. "op": "Pause",
    9. "result": true,
    10. "worker": "172.16.30.15:10081",
    11. "msg": ""
    12. },
    13. {
    14. "op": "Pause",
    15. "result": true,
    16. "worker": "172.16.30.16:10081",
    17. "msg": ""
    18. }
    19. ]
    20. }

    恢复数据同步任务

    resume-task 命令用于恢复数据同步任务。

    1. » help resume-task
    2. resume a paused task with name
    3. Usage:
    4. dmctl resume-task [-w worker ...] <task_name> [flags]
    5. Flags:
    6. -h, --help help for resume-task
    7. Global Flags:
    8. -w, --worker strings dm-worker ID

    命令用法示例

    1. resume-task [-w "127.0.0.1:10181"] task-name

    参数解释

    • -w
      • 可选
      • 指定在特定的一组 DM-workers 上恢复数据同步任务的子任务
      • 如果设置,则只恢复该任务在指定 DM-workers 上的子任务
    • task_name
      • 必选
      • 指定任务名称

    返回结果示例

    1. » resume-task test
    2. {
    3. "op": "Resume",
    4. "result": true,
    5. "msg": "",
    6. "workers": [
    7. {
    8. "op": "Resume",
    9. "result": true,
    10. "worker": "172.16.30.15:10081",
    11. "msg": ""
    12. },
    13. {
    14. "op": "Resume",
    15. "result": true,
    16. "worker": "172.16.30.16:10081",
    17. "msg": ""
    18. }
    19. ]
    20. }

    停止数据同步任务

    stop-task 命令用于停止数据同步任务。

    1. » help stop-task
    2. stop a task with name
    3. Usage:
    4. dmctl stop-task [-w worker ...] <task_name> [flags]
    5. Flags:
    6. -h, --help help for stop-task
    7. Global Flags:
    8. -w, --worker strings dm-worker ID

    命令用法示例

    1. stop-task [-w "127.0.0.1:10181"] task-name

    参数解释

    • -w
      • 可选
      • 指定在特定的一组 DM-workers 上停止数据同步任务的子任务
      • 如果设置,则只停止该任务在指定 DM-workers 上的子任务
    • task_name
      • 必选
      • 指定任务名称

    返回结果示例

    1. » stop-task test
    2. {
    3. "op": "Stop",
    4. "result": true,
    5. "msg": "",
    6. "workers": [
    7. {
    8. "op": "Stop",
    9. "result": true,
    10. "worker": "172.16.30.15:10081",
    11. "msg": ""
    12. },
    13. {
    14. "op": "Stop",
    15. "result": true,
    16. "worker": "172.16.30.16:10081",
    17. "msg": ""
    18. }
    19. ]
    20. }

    更新数据同步任务

    update-task 命令用于更新数据同步任务。

    支持的更新项包括:

    • 表路由规则
    • 表黑白名单规则
    • binlog 过滤规则
    • 列值转换规则

    其余项均不支持更新。

    支持更新项的更新步骤

    1. 使用 query-status <task-name> 查询对应数据同步任务的状态。

      • stage 不为 Paused,则先使用 pause-task <task-name> 暂停任务。
    2. task.yaml 文件中更新需要修改的自定义配置或者错误配置。

    3. 使用 update-task task.yaml 更新任务配置。

    4. 使用 resume-task <task-name> 恢复任务。

    不支持更新项的更新步骤

    1. 使用 query-status <task-name> 查询对应数据同步任务的状态。

      • 若任务存在,则通过 stop-task <task-name> 停止任务。
    2. task.yaml 文件中更新需要修改的自定义配置或者错误配置。

    3. 使用 start-task <task-name> 恢复任务。

    1. » help update-task
    2. update a task's config for routes, filters, column-mappings, black-white-list
    3. Usage:
    4. dmctl update-task [-w worker ...] <config_file> [flags]
    5. Flags:
    6. -h, --help help for update-task
    7. Global Flags:
    8. -w, --worker strings dm-worker ID

    命令用法示例

    1. update-task [-w "127.0.0.1:10181"] ./task.yaml

    参数解释

    • -w
      • 可选
      • 指定在特定的一组 DM-workers 上更新数据同步任务的子任务
      • 如果设置,则只更新指定 DM-workers 上的子任务配置
    • config_file
      • 必选
      • 指定 task.yaml 的文件路径

    返回结果示例

    1. » update-task task_all_black.yaml
    2. {
    3. "result": true,
    4. "msg": "",
    5. "workers": [
    6. {
    7. "result": true,
    8. "worker": "172.16.30.15:10081",
    9. "msg": ""
    10. },
    11. {
    12. "result": true,
    13. "worker": "172.16.30.16:10081",
    14. "msg": ""
    15. }
    16. ]
    17. }

    管理 DDL lock

    详见手动处理 sharding DDL lock。

    强制刷新 task => DM-workers 映射关系

    refresh-worker-tasks 命令用于强制刷新 DM-master 内存中维护的 task => DM-workers 映射关系。

    注意:

    一般不需要使用此命令。仅当已确定 task => DM-workers 映射关系存在,但执行其它命令时仍提示必须刷新它时,你才需要使用此命令。