管理数据同步任务

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

    加密数据库密码

    在 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

    命令用法示例

    参数解释

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

    暂停数据同步任务

    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. {
    7. "op": "Pause",
    8. "result": true,
    9. "worker": "172.16.30.15:10081",
    10. "msg": ""
    11. },
    12. {
    13. "op": "Pause",
    14. "result": true,
    15. "msg": ""
    16. }
    17. ]
    18. }
    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
      • 必选
      • 指定任务名称

    返回结果示例

    停止数据同步任务

    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 更新任务配置。

    不支持更新项的更新步骤

    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. ]

    详见。

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