SQL ファイルから TiDB にデータを移行する
このドキュメントでは、 TiDB Lightningを使用して MySQL SQL ファイルから TiDB にデータを移行する方法について説明します。 MySQL SQL ファイルの生成方法については、 Dumplingを使用して SQL ファイルにエクスポートするを参照してください。
前提条件
ステップ 1.SQL ファイルを準備する
/data/my_datasource/
やs3://my-bucket/sql-backup?region=us-west-2
のように、すべての SQL ファイルを同じディレクトリに配置します。 TiDB Lightningは、このディレクトリとそのサブディレクトリ内の.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 からデータをインポートする場合、アカウントのSecretKey
とAccessKey
を環境変数として渡す必要があります。アカウントには、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 LightningWeb インターフェイスを参照してください。
インポートが完了すると、 TiDB Lightningは自動的に終了します。 tidb-lightning.log
の最後の行にthe whole procedure completed
が含まれているかどうかを確認します。はいの場合、インポートは成功です。 「いいえ」の場合、インポートでエラーが発生します。エラー メッセージの指示に従って、エラーに対処します。
ノート:
インポートが成功したかどうかに関係なく、最後の行には
tidb lightning exit
が表示されます。タスクの完了ではなく、 TiDB Lightningが正常に終了したことを意味するだけです。インポート プロセス中に問題が発生した場合は、トラブルシューティングについてTiDB LightningFAQを参照してください。