TiDB データ移行でのタスク ステータスのクエリ
このドキュメントでは、 query-statusコマンドを使用してタスクのステータスと DM のサブタスクのステータスを問い合わせる方法を紹介します。
クエリ結果
次の手順でquery-statusを使用することをお勧めします。
- 実行中の各タスクが通常の状態であるかどうかを確認するには、 
query-status使用します。 - タスクでエラーが発生した場合は、 
query-status <taskName>コマンドを使用して詳細なエラー情報を確認します。このコマンドの<taskName>エラーが発生したタスクの名前を示します。 
成功したクエリ結果は次のとおりです。
» query-status
{
    "result": true,
    "msg": "",
    "tasks": [
        {
            "taskName": "test",
            "taskStatus": "Running",
            "sources": [
                "mysql-replica-01",
                "mysql-replica-02"
            ]
        },
        {
            "taskName": "test2",
            "taskStatus": "Paused",
            "sources": [
                "mysql-replica-01",
                "mysql-replica-02"
            ]
        }
    ]
}
クエリ結果の一部のフィールドは次のように説明されます。
result: クエリが成功したかどうか。msg: クエリが失敗した場合に返されるエラー メッセージ。tasks: 移行タスクのリスト。各タスクには次のフィールドが含まれます。taskName: タスクの名前。taskStatus: タスクのステータス。taskStatusの詳しい説明はタスクのステータスを参照してください。sources: アップストリーム MySQL データベースのリスト。
タスクのステータス
DM 移行タスクのステータスは、DM ワーカーに割り当てられた各サブタスクのステータスによって異なります。サブタスクのステータスの詳細については、 サブタスクのステータスを参照してください。次の表は、サブタスクのステータスとタスクのステータスの関係を示しています。
| タスク内のサブタスクのステータス | タスクのステータス | 
|---|---|
1 つのサブタスクがpaused状態にあり、エラー情報が返されます。 | Error - Some error occurred in subtask | 
同期フェーズの 1 つのサブタスクはRunning状態ですが、そのリレー処理ユニットは実行されていません ( Error / Paused / Stopped状態)。 | Error - Relay status is Error/Paused/Stopped | 
1 つのサブタスクはPaused状態にあり、エラー情報は返されません。 | Paused | 
すべてのサブタスクはNew状態になります。 | New | 
すべてのサブタスクはFinished状態になります。 | Finished | 
すべてのサブタスクはStopped状態になります。 | Stopped | 
| その他の状況 | Running | 
詳細なクエリ結果
» query-status test
{
    "result": true,
    "msg": "",
    "sources": [
        {
            "result": true,
            "msg": "",
            "sourceStatus": {
                "source": "mysql-replica-01",
                "worker": "worker1",
                "result": null,
                "relayStatus": null
            },
            "subTaskStatus": [
                {
                    "name": "test",
                    "stage": "Running",
                    "unit": "Sync",
                    "result": null,
                    "unresolvedDDLLockID": "test-`test`.`t_target`",
                    "sync": {
                        "masterBinlog": "(bin.000001, 3234)",
                        "masterBinlogGtid": "c0149e17-dff1-11e8-b6a8-0242ac110004:1-14",
                        "syncerBinlog": "(bin.000001, 2525)",
                        "syncerBinlogGtid": "",
                        "blockingDDLs": [
                            "USE `test`; ALTER TABLE `test`.`t_target` DROP COLUMN `age`;"
                        ],
                        "unresolvedGroups": [
                            {
                                "target": "`test`.`t_target`",
                                "DDLs": [
                                    "USE `test`; ALTER TABLE `test`.`t_target` DROP COLUMN `age`;"
                                ],
                                "firstPos": "(bin|000001.000001, 3130)",
                                "synced": [
                                    "`test`.`t2`"
                                    "`test`.`t3`"
                                    "`test`.`t1`"
                                ],
                                "unsynced": [
                                ]
                            }
                        ],
                        "synced": false,
                        "totalRows": "12",
                        "totalRps": "1",
                        "recentRps": "1"
                    }
                }
            ]
        },
        {
            "result": true,
            "msg": "",
            "sourceStatus": {
                "source": "mysql-replica-02",
                "worker": "worker2",
                "result": null,
                "relayStatus": null
            },
            "subTaskStatus": [
                {
                    "name": "test",
                    "stage": "Running",
                    "unit": "Load",
                    "result": null,
                    "unresolvedDDLLockID": "",
                    "load": {
                        "finishedBytes": "115",
                        "totalBytes": "452",
                        "progress": "25.44 %",
                        "bps": "2734"
                    }
                }
            ]
        },
        {
            "result": true,
            "sourceStatus": {
                "source": "mysql-replica-03",
                "worker": "worker3",
                "result": null,
                "relayStatus": null
            },
            "subTaskStatus": [
                {
                    "name": "test",
                    "stage": "Paused",
                    "unit": "Load",
                    "result": {
                        "isCanceled": false,
                        "errors": [
                            {
                                "Type": "ExecSQL",
                                "msg": "Error 1062: Duplicate entry '1155173304420532225' for key 'PRIMARY'\n/home/jenkins/workspace/build_dm/go/src/github.com/pingcap/tidb-enterprise-tools/loader/db.go:160: \n/home/jenkins/workspace/build_dm/go/src/github.com/pingcap/tidb-enterprise-tools/loader/db.go:105: \n/home/jenkins/workspace/build_dm/go/src/github.com/pingcap/tidb-enterprise-tools/loader/loader.go:138: file test.t1.sql"
                            }
                        ],
                        "detail": null
                    },
                    "unresolvedDDLLockID": "",
                    "load": {
                        "finishedBytes": "0",
                        "totalBytes": "156",
                        "progress": "0.00 %",
                        "bps": "0"
                    }
                }
            ]
        },
        {
            "result": true,
            "msg": "",
            "sourceStatus": {
                "source": "mysql-replica-04",
                "worker": "worker4",
                "result": null,
                "relayStatus": null
            },
            "subTaskStatus": [
                {
                    "name": "test",
                    "stage": "Running",
                    "unit": "Dump",
                    "result": null,
                    "unresolvedDDLLockID": "",
                    "dump": {
                        "totalTables": "10",
                        "completedTables": "3",
                        "finishedBytes": "2542",
                        "finishedRows": "32",
                        "estimateTotalRows": "563",
                        "progress": "30.52 %",
                        "bps": "445"
                    }
                }
            ]
        },
    ]
}
返された結果の一部のフィールドは次のように説明されます。
result: クエリが成功したかどうか。msg: クエリが失敗した場合に返されるエラー メッセージ。sources: アップストリーム MySQL インスタンスのリスト。各ソースには次のフィールドが含まれます。resultmsgsourceStatus: 上流の MySQL データベースの情報。subTaskStatus: 上流の MySQL データベースのすべてのサブタスクの情報。各サブタスクには次のフィールドが含まれる場合があります。name: サブタスクの名前。stage: サブタスクのステータス。 「sources」の「subTaskStatus」の「stage」の状態説明と状態切り替え関係については、 サブタスクのステータスを参照してください。unit: 「チェック」、「ダンプ」、「ロード」、「同期」を含む DM の処理単位。result: サブタスクが失敗した場合にエラー情報を表示します。unresolvedDDLLockID: 異常な状態でシャーディング DDL ロックを手動で処理するために使用されるシャーディング DDL ロック ID。 「sources」の「subTaskStatus」の「unresolvedDDLLockID」の操作詳細については、 シャーディング DDL ロックを手動で処理するを参照してください。sync:Syncプロセッシングユニットのレプリケーション情報。この情報は、現在の処理ユニットと同じコンポーネントに関するものです。masterBinlog: 上流データベース内のbinlogの位置。masterBinlogGtid: 上流データベースの GTID 情報。syncerBinlog:Sync処理ユニットで複製されたbinlogの位置。syncerBinlogGtid: GTID を使用してレプリケートされたbinlogの位置。blockingDDLs: 現在ブロックされている DDL リスト。この DM ワーカーのすべての上流テーブルが「同期」ステータスにある場合にのみ空ではありません。この場合、実行されるシャーディング DDL ステートメント、またはスキップされるシャーディング DDL ステートメントを示します。unresolvedGroups: 解決されていないシャーディング グループ。各グループには次のフィールドが含まれます。target: レプリケートされるダウンストリーム データベース テーブル。DDLs: DDL ステートメントのリスト。firstPos: シャーディング DDL ステートメントの開始位置。synced: 実行されたシャーディング DDL ステートメントがSyncユニットによって読み取られた上流シャーディング テーブル。unsynced: このシャーディング DDL ステートメントを実行していない上流テーブル。レプリケーションを完了していない上流テーブルがある場合、blockingDDLsは空になります。
synced: 増分レプリケーションがアップストリームに追いつき、アップストリームと同じbinlog位置を持つかどうか。セーブ ポイントはSyncバックグラウンドではリアルタイムで更新されないため、syncedのfalseは必ずしもレプリケーションの遅延が発生することを意味するわけではありません。totalRows: このサブタスクでレプリケートされる行の合計数。totalRps: このサブタスクで 1 秒あたりにレプリケートされる行の数。recentRps: 最後の 1 秒間にこのサブタスクでレプリケートされた行の数。
load:Loadプロセッシングユニットのレプリケーション情報。finishedBytes: ロードされたバイト数。totalBytes: ロードする必要がある合計バイト数。progress: ロードプロセスの進行状況。bps: フルロードの速度。
dump:Dumpプロセッシングユニットのレプリケーション情報。totalTables: ダンプするテーブルの数。completedTables: ダンプされたテーブルの数。finishedBytes: ダンプされたバイト数。finishedRows: ダンプされた行の数。estimateTotalRows: ダンプされる推定行数。progress: ダンププロセスの進行状況。bps: ダンプ速度 (バイト/秒)。
サブタスクのステータス
ステータスの説明
New:- 初期状態。
 - サブタスクでエラーが発生しない場合は、 
Runningに切り替えられます。それ以外の場合はPausedに切り替えられます。 
Running: 通常の動作状態。Paused:- 一時停止状態。
 - サブタスクでエラーが発生した場合、サブタスクは
Pausedに切り替わります。 - サブタスクが
Runningステータスにあるときにpause-taskを実行すると、タスクはPausedに切り替わります。 - サブタスクがこのステータスの場合、 
resume-taskコマンドを実行してタスクを再開できます。 
Stopped:- 停止状態。
 - サブタスクが
RunningまたはPausedステータスにあるときにstop-task実行すると、タスクはStoppedに切り替わります。 - サブタスクがこのステータスの場合、 
resume-taskを使用してタスクを再開することはできません。 
Finished:- 完了したサブタスクのステータス。
 - フルレプリケーションサブタスクが正常に終了した場合のみ、この状態に切り替わります。
 
ステータススイッチ図
                                         error occurs
                            New --------------------------------|
                             |                                  |
                             |           resume-task            |
                             |  |----------------------------|  |
                             |  |                            |  |
                             |  |                            |  |
                             v  v        error occurs        |  v
  Finished <-------------- Running -----------------------> Paused
                             ^  |        or pause-task       |
                             |  |                            |
                  start task |  | stop task                  |
                             |  |                            |
                             |  v        stop task           |
                           Stopped <-------------------------|