重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

SQLファイルからTiDBへのデータの移行

このドキュメントでは、TiDBLightningを使用してTiDB LightningファイルからTiDBにデータを移行する方法について説明します。 MySQL SQLファイルの生成方法については、 Dumplingを使用してSQLファイルにエクスポートするを参照してください。

前提条件

ステップ1.SQLファイルを準備します

すべてのSQLファイルを/data/my_datasource/s3://my-bucket/sql-backup?region=us-west-2などの同じディレクトリに配置します。 TiDB Lightingは、このディレクトリとそのサブディレクトリ内の.sqlのファイルすべてを再帰的に検索します。

手順2.ターゲットテーブルスキーマを定義する

データをTiDBにインポートするには、ターゲットデータベースのテーブルスキーマを作成する必要があります。

Dumplingを使用してデータをエクスポートする場合、テーブルスキーマファイルは自動的にエクスポートされます。他の方法でエクスポートされたデータの場合、次のいずれかの方法でテーブルスキーマを作成できます。

  • 方法1 : TiDB Lightningを使用してターゲットテーブルスキーマを作成します。

    必要なDDLステートメントを含むSQLファイルを作成します。

    • ${db_name}-schema-create.sqlのファイルにCREATE DATABASEのステートメントを追加します。
    • ${db_name}.${table_name}-schema.sqlのファイルにCREATE TABLEのステートメントを追加します。
  • 方法2 :ターゲットテーブルスキーマを手動で作成します。

ステップ3.構成ファイルを作成します

次の内容でtidb-lightning.tomlのファイルを作成します。

[lightning]
# Log
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
# "local": Default. The local backend is used to import large volumes of data (around or more than 1 TiB). During the import, the target TiDB cluster cannot provide any service.
# "tidb": The "tidb" backend can also be used to import small volumes of data (less than 1 TiB). During the import, the target TiDB cluster can provide service normally. For the information about backend mode, 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 and exclusive I/O for the directory.
sorted-kv-dir = "${sorted-kv-dir}"

[mydumper]
# Directory of the data source
data-source-dir = "${data-path}" # Local or S3 path, such as 's3://my-bucket/sql-backup?region=us-west-2'

[tidb]
# The information of target cluster
host = ${host}                # For example, 172.16.32.1
port = ${port}                # For example, 4000
user = "${user_name}"         # For example, "root"
password = "${password}"      # For example, "rootroot"
status-port = ${status-port}  # During the import process, TiDB Lightning needs to obtain table schema information from the "Status Port" of TiDB, such as 10080.
pd-addr = "${ip}:${port}"     # The address of the cluster's PD. TiDB Lightning obtains some information through PD, such as 172.16.31.3:2379. When backend = "local", you must correctly specify status-port and pd-addr. Otherwise, the import will encounter errors.

構成ファイルの詳細については、 TiDB LightningConfiguration / コンフィグレーションを参照してください。

ステップ4.データをインポートします

インポートを開始するには、 tidb-lightningを実行します。コマンドラインでプログラムを起動すると、 SIGHUP信号のためにプログラムが終了する場合があります。この場合、 nohupまたはscreenのツールを使用してプログラムを実行することをお勧めします。

S3からデータをインポートする場合は、アカウントのSecretKeyAccessKeyを環境変数として渡す必要があります。アカウントには、S3バックエンドストレージにアクセスするためのアクセス許可があります。

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 &

TiDB Lightningは、 ~/.aws/credentialsからのクレデンシャルファイルの読み取りもサポートしています。

インポートが開始されたら、次のいずれかの方法で進行状況を確認できます。

  • デフォルトで5分ごとに更新されるgrepログでprogressキーワードを検索します。
  • Grafanaダッシュボードを使用します。詳細については、 TiDB Lightning監視を参照してください。
  • Webインターフェイスを使用します。詳細については、 TiDB Lightningインターフェイスを参照してください。

インポートが完了すると、 TiDB Lightningは自動的に終了します。ログの最後の5行にthe whole procedure completedが含まれている場合は、インポートが正常に完了したことを意味します。

ノート:

インポートが成功したかどうかに関係なく、最後の行にはtidb lightning exitが表示されます。これは、タスクの完了ではなく、 TiDB Lightningが正常に終了したことを意味するだけです。インポートプロセス中に問題が発生した場合は、トラブルシューティングについてTiDB Lightning FAQを参照してください。