TiDB データ移行に関するよくある質問
このドキュメントには、TiDB データ移行 (DM) に関するよくある質問 (FAQ) がまとめられています。
DM は Alibaba RDS または他のクラウド データベースからのデータの移行をサポートしていますか?
現在、DM は MySQL または MariaDB binlogの標準バージョンのデコードのみをサポートしています。 Alibaba Cloud RDS やその他のクラウド データベースに対してはテストされていません。binlogが標準形式であることが確認された場合、そのバイナリログはサポートされています。
Alibaba Cloud RDS の主キーのない上流テーブルの場合、そのbinlogに非表示の主キー列が依然として含まれており、元のテーブル構造と矛盾していることが既知の問題です。
互換性のない既知の問題をいくつか次に示します。
- Alibaba Cloud RDSでは、主キーのない上流テーブルの場合、そのbinlogには依然として非表示の主キー列が含まれており、元のテーブル構造と矛盾しています。
- HUAWEI Cloud RDSでは、 binlogファイルの直接読み取りはサポートされていません。詳細については、 HUAWEI Cloud RDS はBinlogバックアップ ファイルを直接読み取ることができますか?参照してください。
タスク設定のブロックと許可リストの正規表現はnon-capturing (?!)
をサポートしていますか?
現在、DM はこれをサポートしておらず、 Golang標準ライブラリの正規表現のみをサポートしています。 Golangでサポートされている正規表現については、 re2 構文参照してください。
上流で実行されるステートメントに複数の DDL 操作が含まれている場合、DM はそのような移行をサポートしますか?
DM は、複数の DDL 変更操作を含む 1 つのステートメントを、1 つの DDL 操作のみを含む複数のステートメントに分割しようとしますが、すべてのケースをカバーできるわけではありません。上流で実行されるステートメントには DDL 操作を 1 つだけ含めるか、テスト環境で検証することをお勧めします。サポートされていない場合は、DM リポジトリに問題を提出できます。
互換性のない DDL ステートメントを処理するにはどうすればよいですか?
TiDB でサポートされていない DDL ステートメントが発生した場合は、dmctl を使用して手動で処理する必要があります (DDL ステートメントをスキップするか、DDL ステートメントを指定された DDL ステートメントに置き換えます)。詳細は失敗した DDL ステートメントを処理するを参照してください。
ノート:
現在、TiDB は、MySQL がサポートするすべての DDL ステートメントと互換性があるわけではありません。 MySQL の互換性を参照してください。
DM はビュー関連の DDL ステートメントと DML ステートメントを TiDB にレプリケートしますか?
現在、DM はビュー関連の DDL ステートメントをダウンストリーム TiDB クラスターに複製しません。また、ビュー関連の DML ステートメントをダウンストリーム TiDB クラスターに複製しません。
データ移行タスクをリセットするにはどうすればよいですか?
データ移行中に例外が発生し、データ移行タスクを再開できない場合は、タスクをリセットしてデータを再移行する必要があります。
stop-task
コマンドを実行して、異常なデータ移行タスクを停止します。ダウンストリームに移行されたデータをパージします。
次のいずれかの方法を使用して、データ移行タスクを再開します。
- タスク構成ファイルに新しいタスク名を指定します。次に
start-task {task-config-file}
を実行します。 start-task --remove-meta {task-config-file}
を実行します。
- タスク構成ファイルに新しいタスク名を指定します。次に
online-ddl-scheme: "gh-ost"
設定された後、gh-ost テーブルに関連する DDL 操作によって返されたエラーを処理する方法は?
[unit=Sync] ["error information"="{\"msg\":\"[code=36046:class=sync-unit:scope=internal:level=high] online ddls on ghost table `xxx`.`_xxxx_gho`\\ngithub.com/pingcap/dm/pkg/terror.(*Error).Generate ......
上記のエラーは、次の理由によって発生する可能性があります。
最後のrename ghost_table to origin table
ステップで、DM はメモリ内の DDL 情報を読み取り、それを元のテーブルの DDL に復元します。
ただし、メモリ内の DDL 情報は、次の 2 つの方法のいずれかで取得されます。
- DM
alter ghost_table
操作中に gh-ost テーブルを処理しますおよびghost_table
の DDL 情報を記録します。 - タスクを開始するために DM-worker が再起動されると、DM は DDL を
dm_meta.{task_name}_onlineddl
から読み取ります。
したがって、増分レプリケーションのプロセスで、指定された Pos がalter ghost_table
DDL をスキップしても、その Pos がまだ gh-ost の online-ddl プロセスにある場合、ghost_table はメモリまたはdm_meta.{task_name}_onlineddl
に正しく書き込まれません。このような場合、上記のエラーが返されます。
次の手順でこのエラーを回避できます。
タスクの
online-ddl-scheme
構成を削除します。block-allow-list.ignore-tables
で_{table_name}_gho
、_{table_name}_ghc
、および_{table_name}_del
を構成します。ダウンストリーム TiDB でアップストリーム DDL を手動で実行します。
Pos が gh-ost プロセス後の位置に複製された後、
online-ddl-scheme
を再度有効にしてblock-allow-list.ignore-tables
コメントアウトします。
既存のデータ移行タスクにテーブルを追加するにはどうすればよいですか?
実行中のデータ移行タスクにテーブルを追加する必要がある場合は、タスクの段階に応じて次の方法で対処できます。
ノート:
既存のデータ移行タスクにテーブルを追加するのは複雑なため、この操作は必要な場合にのみ実行することをお勧めします。
Dump
ステージでは
MySQL はエクスポート用のスナップショットを指定できないため、エクスポート中にデータ移行タスクを更新し、チェックポイントを介してエクスポートを再開するために再起動することはサポートされていません。したがって、第Dump
段階で移行が必要なテーブルを動的に追加することはできません。
移行のためにテーブルを追加する必要がある場合は、新しい構成ファイルを使用してタスクを直接再起動することをお勧めします。
Load
ステージで
エクスポート中、複数のデータ移行タスクは通常、異なるbinlogの位置を持ちます。 Load
段階でタスクをマージすると、binlogの位置について合意に達できない可能性があります。したがって、第Load
段階のデータ移行タスクにテーブルを追加することはお勧めできません。
Sync
ステージでは
データ移行タスクがSync
段階にある場合、構成ファイルにテーブルを追加してタスクを再開すると、DM は新しく追加されたテーブルに対して完全なエクスポートとインポートを再実行しません。代わりに、DM は前のチェックポイントから増分レプリケーションを続行します。
したがって、新しく追加されたテーブルの完全なデータがダウンストリームにインポートされていない場合は、別のデータ移行タスクを使用して、完全なデータをダウンストリームにエクスポートおよびインポートする必要があります。
既存の移行タスクに対応するグローバル チェックポイント ( is_global=1
) の位置情報をcheckpoint-T
(たとえば(mysql-bin.000100, 1234)
として記録します。移行タスクに追加するテーブルの完全エクスポートmetedata
(またはSync
段階の別のデータ移行タスクのチェックポイント) の位置情報をcheckpoint-S
、たとえば(mysql-bin.000099, 5678)
として記録します。次の手順でテーブルを移行タスクに追加できます。
既存の移行タスクを停止するには、
stop-task
を使用します。追加するテーブルが実行中の別の移行タスクに属している場合は、そのタスクも停止します。MySQL クライアントを使用してダウンストリーム TiDB データベースに接続し、既存の移行タスクに対応するチェックポイント テーブル内の情報を
checkpoint-T
からcheckpoint-S
の間の小さい値に手動で更新します。この例では、(mysql- bin.000099, 5678)
です。更新するチェックポイントテーブルはスキーマ
{dm_meta}
の{task-name}_syncer_checkpoint
です。更新されるチェックポイント行は
id=(source-id)
とis_global=1
に一致します。更新されるチェックポイント列は
binlog_name
とbinlog_pos
です。
再入可能実行を保証するには、タスクの
syncers
にsafe-mode: true
を設定します。start-task
を使用してタスクを開始します。query-status
を通じてタスクのステータスを観察します。syncerBinlog
がcheckpoint-T
とcheckpoint-S
の大きい値を超えると、safe-mode
元の値に戻してタスクを再起動します。この例では、(mysql-bin.000100, 1234)
です。
packet for query is too large. Try adjusting the 'max_allowed_packet' variable
完全インポート中に発生するpacket for query is too large. Try adjusting the 'max_allowed_packet' variable
。
以下のパラメータをデフォルトの 67108864 (64M) より大きい値に設定します。
- TiDBサーバーのグローバル変数:
max_allowed_packet
. - タスク構成ファイルの構成項目:
target-database.max-allowed-packet
.詳細はDM 拡張タスクコンフィグレーションファイルを参照してください。
DM 1.0 クラスターの既存の DM 移行タスクが DM 2.0 以降のクラスターで実行されているときに発生するエラーError 1054: Unknown column 'binlog_gtid' in 'field list'
処理する方法は?
DM v2.0 以降、DM 1.0 クラスターのタスク構成ファイルを使用してstart-task
コマンドを直接実行して増分データ レプリケーションを続行すると、エラーError 1054: Unknown column 'binlog_gtid' in 'field list'
が発生します。
このエラーはDM 1.0 クラスターの DM 移行タスクを DM 2.0 クラスターに手動でインポートで処理できます。
TiUP がDM の一部のバージョン (v2.0.0-hotfix など) の展開に失敗するのはなぜですか?
tiup list dm-master
コマンドを使用すると、 TiUPが展開をサポートする DM バージョンを表示できます。 TiUP は、このコマンドで表示されない DM バージョンを管理しません。
DM がデータをレプリケートしているときに発生するエラーparse mydumper metadata error: EOF
を処理する方法は?
このエラーをさらに分析するには、エラー メッセージとログ ファイルを確認する必要があります。原因としては、権限がないためにダンプ ユニットが正しいメタデータ ファイルを生成しないことが考えられます。
シャード化されたスキーマとテーブルをレプリケートするときに DM が致命的なエラーを報告しないのに、ダウンストリーム データが失われるのはなぜですか?
設定項目block-allow-list
とtable-route
を確認します。
block-allow-list
で上流のデータベースとテーブルの名前を構成する必要があります。do-tables
の前に「~」を追加すると、正規表現を使用して名前を照合できます。table-route
正規表現の代わりにワイルドカード文字を使用してテーブル名を照合します。たとえば、table_parttern_[0-63]
table_parttern_0
からtable_pattern_6
までの 7 つのテーブルにのみ一致します。
DM がアップストリームからレプリケートされていないときに、 replicate lag
モニター メトリックにデータが表示されないのはなぜですか?
DM 1.0 では、モニター データを生成するにはenable-heartbeat
を有効にする必要があります。 DM 2.0 以降のバージョンでは、この機能がサポートされていないため、モニター メトリックreplicate lag
にはデータがないことが予想されます。
DM がタスクを開始するときにfail to initial unit Sync of subtask
、エラー メッセージ内のRawCause
にcontext deadline exceeded
示すエラーを処理する方法はありますか?
これは DM 2.0.0 バージョンの既知の問題であり、DM 2.0.1 バージョンで修正される予定です。これは、レプリケーション タスクで処理するテーブルが多数ある場合にトリガーされる可能性があります。 TiUP を使用して DM を展開する場合は、DM を夜間バージョンにアップグレードしてこの問題を解決できます。または、GitHub でDMのリリースページから 2.0.0-hotfix バージョンをダウンロードし、実行可能ファイルを手動で置き換えることもできます。
DM がデータを複製するときにエラーduplicate entry
を処理するにはどうすればよいですか?
まず次のことを確認してください。
disable-detect
はレプリケーション タスクで構成されていません (v2.0.7 以前のバージョン)。- データは手動または他のレプリケーション プログラムによって挿入されません。
- このテーブルに関連付けられた DML フィルターは構成されていません。
トラブルシューティングを容易にするために、まずダウンストリーム TiDB インスタンスの一般的なログ ファイルを収集し、次にTiDB コミュニティのスラック チャンネルでテクニカル サポートを依頼できます。次の例は、一般的なログ ファイルを収集する方法を示しています。
# Enable general log collection
curl -X POST -d "tidb_general_log=1" http://{TiDBIP}:10080/settings
# Disable general log collection
curl -X POST -d "tidb_general_log=0" http://{TiDBIP}:10080/settings
duplicate entry
エラーが発生した場合は、競合データを含むレコードがないかログ ファイルを確認する必要があります。
一部の監視パネルにNo data point
表示されないのはなぜですか?
一部のパネルにデータがないのは正常です。たとえば、エラーが報告されない場合、DDL ロックがない場合、またはリレー ログ機能が有効になっていない場合、対応するパネルにはNo data point
が表示されます。各パネルの詳細な説明については、 DM監視メトリクスを参照してください。
DM v1.0 では、タスクにエラーがあるときにコマンドsql-skip
一部のステートメントをスキップできないのはなぜですか?
まず、 sql-skip
を実行した後もbinlogの位置が進んでいるかどうかを確認する必要があります。そうであれば、 sql-skip
有効になったことを意味します。このエラーが発生し続ける理由は、アップストリームがサポートされていない複数の DDL ステートメントを送信しているためです。 sql-skip -s <sql-pattern>
を使用して、これらのステートメントに一致するパターンを設定できます。
場合によっては、エラー メッセージにparse statement
情報が含まれることがあります。次に例を示します。
if the DDL is not needed, you can use a filter rule with \"*\" schema-pattern to ignore it.\n\t : parse statement: line 1 column 11 near \"EVENT `event_del_big_table` \r\nDISABLE\" %!!(MISSING)(EXTRA string=ALTER EVENT `event_del_big_table` \r\nDISABLE
このタイプのエラーの理由は、TiDB パーサーがアップストリームによって送信された DDL ステートメント ( ALTER EVENT
など) を解析できないため、 sql-skip
期待どおりに機能しないことです。構成ファイルにbinlogイベントフィルター追加してこれらのステートメントをフィルターし、 schema-pattern: "*"
を設定できます。 DM v2.0.1 以降、DM はEVENT
に関連するステートメントを事前にフィルターします。
DM v6.0 以降、 sql-skip
とhandle-error
はbinlog
に置き換えられます。この問題を回避するには、代わりにbinlog
コマンドを使用します。
DM の複製中にREPLACE
ステートメントがダウンストリームに出現し続けるのはなぜですか?
タスクに対してセーフモードが自動的に有効になっているかどうかを確認する必要があります。エラー後にタスクが自動的に再開される場合、または高可用性スケジュールが設定されている場合は、タスクの開始または再開後 1 分以内であるため、セーフ モードが有効になります。
DM-worker ログ ファイルを確認して、 change count
を含む行を検索できます。行内のnew count
ゼロでない場合、セーフ モードが有効になります。有効になっている理由を調べるには、それがいつ発生するか、以前にエラーが報告されているかどうかを確認してください。
DM v2.0 では、タスク中に DM が再起動されると完全インポート タスクが失敗するのはなぜですか?
DM v2.0.1 以前のバージョンでは、完全なインポートが完了する前に DM が再起動されると、アップストリーム データ ソースと DM ワーカー ノード間のバインディングが変更される可能性があります。たとえば、ダンプ ユニットの中間データは DM ワーカー ノード A 上にあるものの、ロード ユニットは DM ワーカー ノード B によって実行されているため、操作が失敗する可能性があります。
この問題に対する解決策は次の 2 つです。
データ ボリュームが小さい (1 TB 未満) 場合、またはタスクがシャード テーブルをマージする場合は、次の手順を実行します。
- ダウンストリーム データベース内のインポートされたデータをクリーンアップします。
- エクスポートされたデータのディレクトリ内のすべてのファイルを削除します。
- dmctl を使用してタスクを削除し、コマンド
start-task --remove-meta
を実行して新しいタスクを作成します。
新しいタスクの開始後は、冗長な DM ワーカー ノードがないことを確認し、完全インポート中に DM クラスターの再起動やアップグレードを避けることをお勧めします。
データ ボリュームが大きい (1 TB を超える) 場合は、次の手順を実行します。
- ダウンストリーム データベース内のインポートされたデータをクリーンアップします。
- データを処理する DM ワーカー ノードに TiDB-Lightningをデプロイ。
- TiDB-Lightning のローカル バックエンド モードを使用して、DM ダンプ ユニットがエクスポートするデータをインポートします。
- 完全なインポートが完了したら、次の方法でタスク構成ファイルを編集し、タスクを再起動します。
task-mode
をincremental
に変更します。- 値
mysql-instance.meta.pos
、ダンプ ユニットが出力するメタデータ ファイルに記録される位置に設定します。
DM ERROR 1236 (HY000): The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.
増分タスク中に再起動した場合は?
このエラーは、ダンプ ユニットによって出力されたメタデータ ファイルに記録された上流のbinlogの位置が、完全な移行中にパージされたことを示します。
この問題が発生した場合は、タスクを一時停止し、ダウンストリーム データベース内の移行されたデータをすべて削除し、オプション--remove-meta
を使用して新しいタスクを開始する必要があります。
次の方法で構成することで、この問題を事前に回避できます。
- 完全な移行タスクが完了する前に、必要なbinlogファイルが誤ってパージされるのを避けるために、アップストリームの MySQL データベースの値
expire_logs_days
増やします。データ量が大きい場合は、ダンプリングと TiDB-Lightning を同時に使用して作業を高速化することをお勧めします。 - このタスクのリレー ログ機能を有効にすると、binlogログの位置がパージされても DM がリレー ログからデータを読み取ることができます。
クラスターがTiUP v1.3.0 または v1.3.1 を使用してデプロイされている場合、DM クラスターの Grafana ダッシュボードfailed to fetch dashboard
はなぜですか?
これはTiUPの既知のバグであり、 TiUP v1.3.2 で修正されています。この問題に対する解決策は次の 2 つです。
- 解決策 1:
- コマンド
tiup update --self && tiup update dm
を使用して、 TiUP を新しいバージョンにアップグレードします。 - クラスター内の Grafana ノードをスケールインからスケールアウトし、Grafana サービスを再起動します。
- コマンド
- 解決策 2:
deploy/grafana-$port/bin/public
フォルダをバックアップします。- TiUP DMオフライン パッケージをダウンロードして解凍します。
- オフライン パッケージの
grafana-v4.0.3-**.tar.gz
を開梱します。 grafana-v4.0.3-**.tar.gz
のフォルダーdeploy/grafana-$port/bin/public
public
フォルダーに置き換えます。tiup dm restart $cluster_name -R grafana
を実行して Grafana サービスを再起動します。
DM v2.0 では、タスクでenable-relay
とenable-gtid
が同時に有効になっている場合、 query-status
コマンドのクエリ結果で Syncer チェックポイント GTID が連続していないことが示されるのはなぜですか?
これは DM の既知のバグであり、DM v2.0.2 で修正されています。このバグは、次の 2 つの条件が同時に完全に満たされた場合に発生します。
- パラメータ
enable-relay
とenable-gtid
ソース構成ファイルでtrue
に設定されます。 - アップストリーム データベースはMySQL セカンダリ データベースです。コマンド
show binlog events in '<newest-binlog>' limit 2
を実行してデータベースのprevious_gtids
をクエリすると、次の例のように結果が不連続になります。
mysql> show binlog events in 'mysql-bin.000005' limit 2;
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000005 | 4 | Format_desc | 123452 | 123 | Server ver: 5.7.32-35-log, Binlog ver: 4 |
| mysql-bin.000005 | 123 | Previous_gtids | 123452 | 194 | d3618e68-6052-11eb-a68b-0242ac110002:6-7 |
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
このバグは、dmctl でquery-status <task>
実行してタスク情報をクエリし、 subTaskStatus.sync.syncerBinlogGtid
は連続していないがsubTaskStatus.sync.masterBinlogGtid
は連続していることが判明した場合に発生します。次の例を参照してください。
query-status test
{
...
"sources": [
{
...
"sourceStatus": {
"source": "mysql1",
...
"relayStatus": {
"masterBinlog": "(mysql-bin.000006, 744)",
"masterBinlogGtid": "f8004e25-6067-11eb-9fa3-0242ac110003:1-50",
...
}
},
"subTaskStatus": [
{
...
"sync": {
...
"masterBinlog": "(mysql-bin.000006, 744)",
"masterBinlogGtid": "f8004e25-6067-11eb-9fa3-0242ac110003:1-50",
"syncerBinlog": "(mysql-bin|000001.000006, 738)",
"syncerBinlogGtid": "f8004e25-6067-11eb-9fa3-0242ac110003:1-20:40-49",
...
"synced": false,
"binlogType": "local"
}
}
]
},
{
...
"sourceStatus": {
"source": "mysql2",
...
"relayStatus": {
"masterBinlog": "(mysql-bin.000007, 1979)",
"masterBinlogGtid": "ddb8974e-6064-11eb-8357-0242ac110002:1-25",
...
}
},
"subTaskStatus": [
{
...
"sync": {
"masterBinlog": "(mysql-bin.000007, 1979)",
"masterBinlogGtid": "ddb8974e-6064-11eb-8357-0242ac110002:1-25",
"syncerBinlog": "(mysql-bin|000001.000008, 1979)",
"syncerBinlogGtid": "ddb8974e-6064-11eb-8357-0242ac110002:1-25",
...
"synced": true,
"binlogType": "local"
}
}
]
}
]
}
この例では、データソースmysql1
のsyncerBinlogGtid
不連続です。この場合、次のいずれかの方法でデータ損失に対処できます。
- 現在の時刻から完全エクスポート タスクのメタデータに記録されている位置までのアップストリーム バイナリ ログがパージされていない場合は、次の手順を実行できます。
- 現在のタスクを停止し、連続しない GTID を持つすべてのデータ ソースを削除します。
- すべてのソース設定ファイルで
enable-relay
~false
を設定します。 - GTID が連続していないデータ ソース (上の例の
mysql1
など) の場合は、タスクを増分タスクに変更し、関連するmysql-instances.meta
を各完全エクスポート タスクのメタデータ情報 (binlog-name
、binlog-pos
、およびbinlog-gtid
の情報を含む) で構成します。 - インクリメンタルタスクの
task.yaml
にsyncers.safe-mode
~true
を設定し、タスクを再起動します。 - 増分タスクがすべての欠落データをダウンストリームにレプリケートした後、タスクを停止し、
task.yaml
のsafe-mode
をfalse
に変更します。 - タスクを再度再開します。
- アップストリームの binlog がパージされても、ローカル リレー ログが残っている場合は、次の手順を実行できます。
- 現在のタスクを停止します。
- GTID が連続していないデータ ソース (上の例の
mysql1
など) の場合は、タスクを増分タスクに変更し、関連するmysql-instances.meta
を各完全エクスポート タスクのメタデータ情報 (binlog-name
、binlog-pos
、およびbinlog-gtid
の情報を含む) で構成します。 - インクリメンタル タスクの
task.yaml
で、前の値binlog-gtid
を前の値previous_gtids
に変更します。上の例では、1-y
を6-y
に変更します。 task.yaml
のうちsyncers.safe-mode
~true
設定してタスクを再起動してください。- 増分タスクがすべての欠落データをダウンストリームにレプリケートした後、タスクを停止し、
task.yaml
のsafe-mode
をfalse
に変更します。 - タスクを再度再開します。
- データ ソースを再起動し、ソース構成ファイルで
enable-relay
またはenable-gtid
をfalse
に設定します。
- 上記の条件がいずれも満たされない場合、またはタスクのデータ量が少ない場合は、次の手順を実行できます。
- ダウンストリーム データベース内のインポートされたデータをクリーンアップします。
- データ ソースを再起動し、ソース構成ファイルで
enable-relay
またはenable-gtid
をfalse
に設定します。 - 新しいタスクを作成し、コマンド
start-task task.yaml --remove-meta
を実行してデータを最初から再度移行します。
上記の 1 番目と 2 番目の解決策で正常にレプリケートできるデータ ソース (上記の例のmysql2
など) の場合、増分タスクを設定するときに、関連するmysql-instances.meta
subTaskStatus.sync
のsyncerBinlog
とsyncerBinlogGtid
情報で構成します。
DM v2.0 では、ハートビート機能が有効になっている仮想 IP 環境で DM ワーカーと MySQL インスタンスの間の接続を切り替えるときに、「ハートビートheartbeat
が以前使用されていたものと異なります: サーバー ID が等しくない」というエラーをどのように処理すればよいですか?
heartbeat
機能は、DM v2.0 以降のバージョンではデフォルトで無効になっています。タスク構成ファイルでこの機能を有効にすると、高可用性機能が妨げられます。この問題を解決するには、タスク構成ファイルでenable-heartbeat
からfalse
を設定してheartbeat
機能を無効にし、タスク構成ファイルを再ロードします。 DM は、以降のリリースでheartbeat
機能を強制的に無効にします。
DM マスターが再起動後にクラスターに参加できず、DM が「埋め込み etcd の開始に失敗しました。RawCause: member xxx はすでにブートストラップされています」というエラーを報告するのはなぜですか?
DM マスターが起動すると、DM は現在のディレクトリに etcd 情報を記録します。 DM マスターの再起動後にディレクトリが変更されると、DM は etcd 情報にアクセスできないため、再起動は失敗します。
この問題を解決するには、 TiUPを使用して DM クラスターを保守することをお勧めします。バイナリ ファイルを使用してデプロイする必要がある場合は、DM マスターの設定ファイルで絶対パスを使用してdata-dir
を設定するか、コマンドを実行する現在のディレクトリに注意する必要があります。
dmctl を使用してコマンドを実行すると DM-master に接続できないのはなぜですか?
dmctl 実行コマンドを使用すると、(コマンドでパラメータ値--master-addr
指定した場合でも) DM マスターへの接続が失敗し、 RawCause: context deadline exceeded, Workaround: please check your network connection.
のようなエラー メッセージが表示される場合があります。しかし、 telnet <master-addr>
のようなコマンドを使用してネットワーク接続をチェックした後、例外は見つかりませんでした。
この場合、環境変数https_proxy
( httpsであることに注意してください) を確認できます。この変数が構成されている場合、 dmctl はhttps_proxy
で指定されたホストとポートに自動的に接続します。ホストに対応するproxy
サービスがない場合、接続は失敗します。
この問題を解決するには、 https_proxy
が必須かどうかを確認してください。そうでない場合は、設定を解除してください。それ以外の場合は、元の dmctl コマンドの前に環境変数設定https_proxy="" ./dmctl --master-addr "x.x.x.x:8261"
を追加します。
ノート:
proxy
に関連する環境変数には、http_proxy
、https_proxy
、およびno_proxy
があります。上記の手順を実行しても接続エラーが解決しない場合は、http_proxy
とno_proxy
の構成パラメータが正しいかどうかを確認してください。
DM バージョン 2.0.2 から 2.0.6 で start-relay コマンドを実行するときに返されたエラーを処理するにはどうすればよいですか?
flush local meta, Rawcause: open relay-dir/xxx.000001/relay.metayyyy: no such file or directory
上記のエラーは、次の場合に発生する可能性があります。
- DM は v2.0.1 以前から v2.0.2 ~ v2.0.6 にアップグレードされ、リレー ログはアップグレード前に開始され、アップグレード後に再起動されます。
- stop-relay コマンドを実行してリレーログを一時停止し、再開します。
次のオプションによってこのエラーを回避できます。
再起動リレーログ:
» stop-relay -s sourceID workerName » start-relay -s sourceID workerNameDM を v2.0.7 以降のバージョンにアップグレードします。
ロード ユニットがUnknown character set
エラーを報告するのはなぜですか?
TiDB は、すべての MySQL 文字セットをサポートしているわけではありません。したがって、完全インポート中にテーブル スキーマを作成するときにサポートされていない文字セットが使用されると、DM はこのエラーを報告します。このエラーを回避するには、特定のデータに応じてTiDB がサポートする文字セット使用してダウンストリームにテーブル スキーマを事前に作成します。