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

DumplingとTiDB Lightningを使用してデータをバックアップおよび復元する



このドキュメントでは、 DumplingとTiDB Lightningを使用してTiDBの完全なデータをバックアップおよび復元する方法について説明します。

少量のデータ(例えば、50 GiB未満)をバックアップする必要があり、高速なバックアップ速度を必要としない場合は、 Dumplingを使用してTiDBデータベースからデータをエクスポートし、その後TiDB Lightningを使用して別のTiDBデータベースにデータを復元することができます。

大規模なデータベースをバックアップする必要がある場合は、 BRを使用することをお勧めします。Dumplingは大規模なデータベースもエクスポートできますが、 BRの方が適しています。

要件

リソース要件

オペレーティングシステム: このドキュメントの例では、新規の CentOS 7 インスタンスを使用しています。仮想マシンは、ローカル ホストまたはクラウドにデプロイできます。TiDB Lightning はデフォルトで必要なだけの CPU リソースを消費するため、専用サーバーにデプロイすることをお勧めします。それが不可能な場合は、他の TiDB コンポーネント (たとえばtikv-server ) と一緒に単一のサーバーにデプロイし、 region-concurrencyを構成して、 TiDB Lightningの CPU 使用率を制限できます。通常、論理 CPU の 75% にサイズを設定できます。

メモリとCPU : TiDB Lightningは多くのリソースを消費するため、64 GiB以上のメモリと32以上のCPUコアを割り当てることを推奨します。最高のパフォーマンスを得るには、CPUコアとメモリ(GiB)の比率が1:2以上であることを確認してください。

ディスク容量

外部ストレージとしては、Amazon S3、Google Cloud Storage (GCS)、またはAzure Blob Storageの利用をお勧めします。これらのクラウドストレージを利用すれば、ディスク容量の制限を受けることなく、バックアップファイルを迅速に保存できます。

バックアップタスクのデータをローカルディスクに保存する必要がある場合は、以下の制限事項に注意してください。

  • Dumplingには、データソース全体を保存できる(またはエクスポートされるすべての上流テーブルを保存できる)ディスク容量が必要です。必要なスペースを計算するには、 ターゲットデータベースのストレージ要件を参照してください。
  • インポート処理中、 TiDB Lightningはソート済みのキーと値のペアを保存するための一時的な領域を必要とします。ディスク容量は、データソースの最大の単一テーブルを格納できるのに十分な量が必要です。

注記: DumplingによってMySQLからエクスポートされる正確なデータ量を計算することは困難ですが、次のSQLステートメントを使用してinformation_schema.tablesテーブルのDATA_LENGTHフィールドを要約することで、データ量を推定できます。

-- Calculate the size of all schemas SELECT TABLE_SCHEMA, FORMAT_BYTES(SUM(DATA_LENGTH)) AS 'Data Size', FORMAT_BYTES(SUM(INDEX_LENGTH)) 'Index Size' FROM information_schema.tables GROUP BY TABLE_SCHEMA; -- Calculate the 5 largest tables SELECT TABLE_NAME, TABLE_SCHEMA, FORMAT_BYTES(SUM(data_length)) AS 'Data Size', FORMAT_BYTES(SUM(index_length)) AS 'Index Size', FORMAT_BYTES(SUM(data_length+index_length)) AS 'Total Size' FROM information_schema.tables GROUP BY TABLE_NAME, TABLE_SCHEMA ORDER BY SUM(DATA_LENGTH+INDEX_LENGTH) DESC LIMIT 5;

ターゲットとなるTiKVクラスターのディスク容量

ターゲットの TiKV クラスターには、インポートされたデータを保存するのに十分なディスク容量が必要です。標準ハードウェア要件に加えて、ターゲットの TiKV クラスターのストレージ容量は、データソースのサイズ × レプリカ数× 2よりも大きくなければなりません。たとえば、クラスターがデフォルトで 3 つのレプリカを使用する場合、ターゲットの TiKV クラスターは、データソースのサイズの 6 倍よりも大きなストレージ容量が必要です。この式に x 2 が含まれている理由は次のとおりです。

  • インデックスには余分な容量が必要になる場合があります。
  • RocksDBには空間増幅がある。

Dumplingを使用してフルデータをバックアップします

  1. TiDBからAmazon S3のs3://my-bucket/sql-backupに全データをエクスポートするには、次のコマンドを実行します。

    tiup dumpling -h ${ip} -P 3306 -u root -t 16 -r 200000 -F 256MiB -B my_db1 -f 'my_db1.table[12]' -o 's3://my-bucket/sql-backup'

    DumplingはデフォルトでデータをSQLファイルにエクスポートします。 --filetypeオプションを追加することで、別のファイル形式を指定できます。

    Dumplingのその他の構成については、 Dumplingのオプション一覧参照してください。

  2. エクスポートが完了すると、ディレクトリs3://my-bucket/sql-backupでバックアップファイルを確認できます。

TiDB Lightningを使用して完全なデータを復元します。

  1. tidb-lightning.tomlファイルを編集して、Dumplingを使用してs3://my-bucket/sql-backupにバックアップされた完全なデータを、ターゲットのTiDBクラスターにインポートします。

    [lightning] # log level = "info" file = "tidb-lightning.log" [tikv-importer] # "local": Default backend. The local backend is recommended to import large volumes of data (1 TiB or more). During the import, the target TiDB cluster cannot provide any service. # "tidb": The "tidb" backend is recommended to import data less than 1 TiB. During the import, the target TiDB cluster can provide service normally. For more information on the backends, refer to https://docs.pingcap.com/tidb/stable/tidb-lightning-backends. backend = "local" # Sets the temporary storage directory for the sorted Key-Value files. The directory must be empty, and the storage space must be greater than the size of the dataset to be imported. For better import performance, it is recommended to use a directory different from `data-source-dir` and use flash storage, which can use I/O exclusively. sorted-kv-dir = "${sorted-kv-dir}" [mydumper] # The data source directory. The same directory where Dumpling exports data in "Use Dumpling to back up full data". data-source-dir = "${data-path}" # A local path or S3 path. For example, 's3://my-bucket/sql-backup' [tidb] # The target TiDB cluster information. host = "${host}" # e.g.: 172.16.32.1 port = "${port}" # e.g.: 4000 user = "${user_name}" # e.g.: "root" password = "${password}" # e.g.: "rootroot" status-port = "${status-port}" # During the import, TiDB Lightning needs to obtain the table schema information from the TiDB status port. e.g.: 10080 pd-addr = "${ip}:${port}" # The address of the PD cluster, e.g.: 172.16.31.3:2379. TiDB Lightning obtains some information from PD. When backend = "local", you must specify status-port and pd-addr correctly. Otherwise, the import will be abnormal.

    TiDB Lightning構成の詳細については、 TiDB Lightningの構成を参照してください。

  2. tidb-lightningを実行してインポートを開始します。コマンドラインでプログラムを直接起動すると、 SIGHUPシグナルを受信した後にプロセスが予期せず終了する可能性があります。この場合、 nohupまたはscreenツールを使用してプログラムを実行することをお勧めします。例:

    S3 からデータをインポートする場合は、S3ストレージパスにアクセスできる SecretKey と AccessKey を環境変数としてTiDB Lightningノードに渡してください。また、 ~/.aws/credentialsから認証情報を読み取ることもできます。

    export AWS_ACCESS_KEY_ID=${access_key} export AWS_SECRET_ACCESS_KEY=${secret_key} nohup tiup tidb-lightning -config tidb-lightning.toml > nohup.out 2>&1 &
  3. インポートが開始されたら、ログ内のキーワードprogressgrepすることで、インポートの進行状況を確認できます。進行状況は、デフォルトでは 5 分ごとに更新されます。

  4. TiDB Lightning はインポートが完了すると自動的に終了します。tidb-lightning.logの最後の行にthe whole procedure completedが含まれているかどうかを確認してください。含まれている場合はインポートが成功しています。含まれていない場合は、インポート中にエラーが発生しました。エラーメッセージの指示に従ってエラーに対処してください。

注記:

インポートが成功したかどうかに関わらず、ログの最後の行にはtidb lightning exitと表示されます。これは、 TiDB Lightning が正常に終了したことを意味しますが、必ずしもインポートが成功したことを意味するものではありません。

インポートが失敗した場合は、トラブルシューティングのためにTiDB LightningFAQを参照してください。

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