📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

移行に関するよくある質問



このドキュメントには、TiDB データ移行に関連するよくある質問 (FAQ) がまとめられています。

移行関連ツールに関するよくある質問については、以下のリスト内の対応するリンクをクリックしてください。

完全なデータのエクスポートとインポート

MySQL 上で実行されているアプリケーションを TiDB に移行するにはどうすればよいですか?

TiDB はほとんどの MySQL 構文をサポートしているため、ほとんどの場合、コードを 1 行も変更することなくアプリケーションを TiDB に移行できます。

データのインポートとエクスポートが遅く、他のエラーはなく、多くの再試行と EOF エラーが各コンポーネントのログに記録されます。

他に論理エラーが発生していない場合は、ネットワークの問題が原因で再試行および EOF エラーが発生している可能性があります。最初にツールを使用してネットワーク接続を確認することをお勧めします。次の例では、トラブルシューティングにiperfが使用されます。

  • リトライおよび EOF エラーが発生したサーバー側ノードで次のコマンドを実行します。

    iperf3 -s
  • 再試行および EOF エラーが発生したクライアント側ノードで次のコマンドを実行します。

    iperf3 -c <server-IP>

次の例は、ネットワーク接続が良好なクライアント ノードの出力です。

$ iperf3 -c 192.168.196.58 Connecting to host 192.168.196.58, port 5201 [ 5] local 192.168.196.150 port 55397 connected to 192.168.196.58 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 18.0 MBytes 150 Mbits/sec [ 5] 1.00-2.00 sec 20.8 MBytes 175 Mbits/sec [ 5] 2.00-3.00 sec 18.2 MBytes 153 Mbits/sec [ 5] 3.00-4.00 sec 22.5 MBytes 188 Mbits/sec [ 5] 4.00-5.00 sec 22.4 MBytes 188 Mbits/sec [ 5] 5.00-6.00 sec 22.8 MBytes 191 Mbits/sec [ 5] 6.00-7.00 sec 20.8 MBytes 174 Mbits/sec [ 5] 7.00-8.00 sec 20.1 MBytes 168 Mbits/sec [ 5] 8.00-9.00 sec 20.8 MBytes 175 Mbits/sec [ 5] 9.00-10.00 sec 21.8 MBytes 183 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 208 MBytes 175 Mbits/sec sender [ 5] 0.00-10.00 sec 208 MBytes 174 Mbits/sec receiver iperf Done.

出力にネットワーク帯域幅が低く、帯域幅が大きく変動していることが示されている場合、多数の再試行と EOF エラーが各コンポーネントログに表示される可能性があります。この場合、ネットワークの品質を改善するには、ネットワーク サービス プロバイダーに相談する必要があります。

各メトリックの出力が良好であると思われる場合は、各コンポーネントを更新してみてください。更新後も問題が解決しない場合は、PingCAP またはコミュニティから支持を得ます 。

誤って MySQL ユーザー テーブルを TiDB にインポートしたり、パスワードを忘れてログインできなくなった場合は、どう対処すればよいですか?

TiDB サービスを再起動し、構成ファイルに-skip-grant-table=trueパラメータを追加します。パスワードを使用せずにクラスターにログインし、ユーザーを再作成するか、 mysql.userを再作成します。特定のテーブル スキーマについては、公式ドキュメントを検索してください。

TiDB のデータをエクスポートするにはどうすればよいですか?

次の方法を使用して、TiDB 内のデータをエクスポートできます。

  • mysqldump とWHERE句を使用してデータをエクスポートします。
  • MySQL クライアントを使用して、 selectの結果をファイルにエクスポートします。

DB2 または Oracle から TiDB に移行するにはどうすればよいですか?

すべてのデータを移行するか、DB2 または Oracle から TiDB に段階的に移行するには、次の解決策を参照してください。

  • OGG、Gateway、CDC (Change Data Capture) などの Oracle の公式移行ツールを使用します。
  • データをインポートおよびエクスポートするためのプログラムを開発します。
  • スプールをテキスト ファイルとしてエクスポートし、Load infile を使用してデータをインポートします。
  • サードパーティのデータ移行ツールを使用します。

現時点では、OGG を使用することをお勧めします。

エラー: Sqoop を使用して TiDB にデータをbatchesで書き込むときに、 java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation

Sqoop では、 --batch各バッチで 100 のstatementをコミットすることを意味しますが、デフォルトでは、各statementに 100 の SQL ステートメントが含まれます。したがって、SQL ステートメントは 100 * 100 = 10000 となり、単一の TiDB トランザクションで許可されるステートメントの最大数である 5000 を超えます。

2 つの解決策:

  • 次のように-Dsqoop.export.records.per.statement=10オプションを追加します。

    sqoop export \ -Dsqoop.export.records.per.statement=10 \ --connect jdbc:mysql://mysql.example.com/sqoop \ --username sqoop ${user} \ --password ${passwd} \ --table ${tab_name} \ --export-dir ${dir} \ --batch
  • 単一の TiDB トランザクション内の限られた数のステートメントを増やすこともできますが、これによりより多くのメモリが消費されます。

Dumpling がThe local disk space is insufficientエラーを返したり、テーブルのエクスポート時にアップストリーム データベースのメモリ不足を引き起こしたりするのはなぜですか?

この問題には次の原因が考えられます。

  • データベースの主キーは均等に分散されていません (たとえば、 SHARD_ROW_ID_BITSを有効にした場合)。
  • アップストリーム データベースは TiDB で、エクスポートされたテーブルはパーティションテーブルです。

上記の場合、 Dumpling はエクスポート用に大きすぎるデータ チャンクを分割し、大きすぎる結果を含むクエリを送信します。この問題に対処するには、最新バージョンのDumplingを入手してください。

TiDBにはOracleのフラッシュバッククエリのような機能はありますか? DDLをサポートしていますか?

はい、そうです。また、DDL もサポートしています。詳細はTiDB が履歴バージョンからデータを読み取る方法を参照してください。

オンラインでデータを移行する

TiDB から HBase や Elasticsearch などの他のデータベースにデータをレプリケートする現在のソリューションはありますか?

いいえ。現在、データ レプリケーションはアプリケーション自体に依存しています。

トラフィックを移行する

トラフィックを迅速に移行するにはどうすればよいですか?

TiDB データ移行ツールを使用して MySQL から TiDB にアプリケーション データを移行することをお勧めします。必要に応じてネットワーク構成を編集することで、読み取りおよび書き込みトラフィックをバッチで移行できます。ネットワーク構成を直接編集することでシームレスな移行を実現するには、安定したネットワーク LB (HAproxy、LVS、F5、DNS など) を上位レイヤーにデプロイ。

TiDB の書き込みおよび読み取りの合計容量に制限はありますか?

合計読み取り容量に制限はありません。 TiDB サーバーを追加すると、読み取り容量を増やすことができます。通常、書き込み容量にも制限はありません。 TiKV ノードを追加すると、書き込み容量を増やすことができます。

transaction too largeエラーメッセージが表示される

基礎となるstorageエンジンの制限により、TiDB 内の各キーと値のエントリ (1 行) は 6MB 以下である必要があります。 txn-entry-size-limit設定値は最大 120MB まで調整できます。

分散トランザクションには 2 フェーズ コミットが必要で、最下層でRaftレプリケーションが実行されます。トランザクションが非常に大きい場合、コミット プロセスが非常に遅くなり、書き込み競合が発生する可能性が高くなります。さらに、失敗したトランザクションのロールバックは、不必要なパフォーマンスの低下につながります。これらの問題を回避するために、デフォルトでは、トランザクション内のキーと値のエントリの合計サイズが 100MB 以下に制限されています。より大きなトランザクションが必要な場合は、TiDB 構成ファイルの値txn-total-size-limitを変更します。本設定項目の最大値は10Gまでです。実際の制限は、マシンの物理メモリにも影響されます。

Google Cloud Spanner には同様の制限あります。

データをバッチでインポートするにはどうすればよいですか?

データをインポートするときは、バッチに分けて挿入し、各バッチの行数を 10,000 以内に保ちます。

TiDB はデータを削除した後すぐにスペースを解放しますか?

DELETE 、 TRUNCATE 、およびDROP操作はいずれも、データを直ちに解放しません。 TRUNCATEとDROPの操作では、TiDB GC (ガベージ コレクション) 時間 (デフォルトでは 10 分) が経過すると、データが削除され、スペースが解放されます。 DELETE操作では、データは削除されますが、TiDB GC に従ってスペースは解放されません。後続のデータが RocksDB に書き込まれて実行されるときCOMPACT 、スペースは再利用されます。

データをロードするときにターゲットテーブルに対して DDL 操作を実行できますか?

いいえ。データをロードするときにターゲット テーブルに対して DDL 操作を実行することはできません。実行しないと、データのロードに失敗します。

TiDB はreplace into構文をサポートしていますか?

はい。

データを削除するとクエリの速度が遅くなるのはなぜですか?

大量のデータを削除すると、無駄なキーが大量に残り、クエリの効率に影響します。現在、リージョン結合機能が開発中であり、この問題が解決されることが期待されています。詳細はTiDB ベスト プラクティスのデータの削除セクションを参照してください。

データを削除する最も効率的な方法は何ですか?

大量のデータを削除する場合は、 Delete from t where xx limit 5000;を使用することをお勧めします。トランザクションサイズの制限を超えないように、ループを介して削除し、ループを終了する条件としてAffected Rows == 0を使用します。ビジネス フィルタリング ロジックを満たすことを前提として、強力なフィルタ インデックス列を追加するか、主キーを直接使用して範囲を選択する ( id >= 5000*n+m and id < 5000*(n+1)+mなど) ことをお勧めします。

一度に削除する必要があるデータの量が非常に多い場合、各削除が逆方向に実行されるため、このループ方法はますます遅くなります。以前のデータを削除した後、多数の削除済みフラグが短期間残り (その後、すべてがガベージ コレクションによって処理されます)、次の Delete ステートメントに影響を与えます。可能であれば、Where 条件を調整することをお勧めします。 TiDB ベスト プラクティスの詳細を参照してください。

TiDB でのデータ読み込み速度を向上させるにはどうすればよいですか?

  • TiDB Lightningツールは分散データ インポート用に開発されました。データ インポート プロセスは、パフォーマンス上の理由から完全なトランザクション プロセスを実行しないことに注意してください。したがって、インポート プロセス中にインポートされるデータのACID制約は保証できません。インポートされたデータのACID制約は、インポート プロセス全体が終了した後にのみ保証されます。したがって、該当するシナリオには主に、新しいデータ (新しいテーブルや新しいインデックスなど) のインポート、または完全バックアップと復元 (元のテーブルを切り捨ててからデータをインポート) が含まれます。
  • TiDB へのデータのロードは、ディスクとクラスター全体のステータスに関連しています。データをロードするときは、ホストのディスク使用率、TiClient エラー、バックオフ、スレッド CPU などのメトリクスに注意してください。これらのメトリクスを使用してボトルネックを分析できます。

このページは役に立ちましたか?