0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TiDBAdvent Calendar 2024

Day 24

TiDB lightningの使い方

Last updated at Posted at 2024-12-23

はじめに

以前、データエクスポートツールとしてDumplingを紹介しました。

これと対になるツールが、TiDB lightningです。

・・・なのですが、以前紹介した IMPORT INTO 文に将来的に置き換わることが予定されています。ただ、現在のところ複数のファイルを一括インポートする機能には対応しておらず、lightningの方がdumpling後の利用には便利だったりします。

本記事ではtidb-lightningの利用方法について説明します。なお、tidb-lightningはOSS版(セルフマネージ)のクラスタに対して利用すると、TiKVに直接データを投入する物理モードを利用でき、オプションも様々なものがあります。しかしこのモードはTiDB Cloudでは利用できませんので、論理モード(INSERT文を生成して実行する)の説明のみにとどめます。

準備

まずはdumplingでデータを出力しないことには始まりません。前回のDumplingの際に使ったMySQLのEmployデータベースを使い、dumplingで出力します。(TiDBは、TiDB Playgroundを利用しています)

tiup dumpling -h 127.0.0.1 -P 3306 -u root -p <password> \
-B employees -o output/ --filetype sql

できるファイルはこんな感じです

> ls output
employees-schema-create.sql		employees.dept_manager.000000000.sql	employees.test.000000000.sql
employees.departments-schema.sql	employees.employees-schema.sql		employees.titles-schema.sql
employees.departments.000000000.sql	employees.employees.000000000.sql	employees.titles.000000000.sql
employees.dept_emp-schema.sql		employees.salaries-schema.sql		metadata
employees.dept_emp.000000000.sql	employees.salaries.000000000.sql
employees.dept_manager-schema.sql	employees.test-schema.sql

tidb-lightning.toml ファイルの準備

tidb lightningの実行には、設定を記述したtomlファイルが必要です。今回利用するファイルは次のようになります。

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

[conflict]
strategy = "replace"

[tikv-importer]
# Configure the import mode
backend = "tidb"

[mydumper]
# Local source data directory
data-source-dir = "output"

[tidb]
# Information of the target cluster
host = "127.0.0.1"
port = 4000
user = "root"
password = ""

設定ファイルの詳細は下記のドキュメントを御覧ください。

ここで利用しているセクションのうち、よく変更するものについて説明します。

conflict

キーやユニーク制約違反が発生した場合の扱いを記載します。

  • strategy: "replace", "ignore", "error" から選択します

replaceはINSERTする行で置き換えます。ignoreは元の行を戻し、errorはエラーにして処理を中断します。

tidb-lightningはすでにデータがあるテーブルに対してのimportもサポートしますが、その際に重複したレコードの扱いを決めるのがこのConflictセクションです。通常は、replaceかerrorと思います。

tikv-importer

  • backend: "tidb"もしくは"local" です。今回利用する論理モードでは "tidb" を利用します

mydumper

  • data-source-dir: dumplingがexportしたディレクトリを指定します

なお、今回のような簡単な例ならコマンドラインでも実行可能です。今回の例のほぼ同等なコマンドラインでの指定例は下記です。

tiup tidb-lightning -d output -tidb-host 127.0.0.1 -tidb-user root -tidb-port 4000 -backend tidb

実行

では実行していきます。tidb-lightningはtiupから利用できます。

> tiup tidb-lightning -config tidb-lightning.toml

Starting component tidb-lightning: /Users/bohnen/.tiup/components/tidb-lightning/v8.5.0/tidb-lightning -config tidb-lightning.toml
Verbose debug logs will be written to tidb-lightning.log

+---+----------------------------------------------+-------------+--------+
| # | CHECK ITEM                                   | TYPE        | PASSED |
+---+----------------------------------------------+-------------+--------+
| 1 | Source data files size is proper             | performance | true   |
+---+----------------------------------------------+-------------+--------+
| 2 | the checkpoints are valid                    | critical    | true   |
+---+----------------------------------------------+-------------+--------+
| 3 | Cluster version check passed                 | critical    | true   |
+---+----------------------------------------------+-------------+--------+
| 4 | Lightning has the correct storage permission | critical    | true   |
+---+----------------------------------------------+-------------+--------+

tidb lightning exit successfully

事前チェックをパスして無事インポートされました。

(Tips) tidb-lightning-ctl ツール

tidb lightiningは実行結果やチェックポイントをDBや /tmp などに作成して、失敗するとこれらの場所にレコードやログが残ります。そして再実行に失敗するケースがあります。

+---+------------------------------------------------------------------------------------------------------------------------------------+-------------+--------+
| # | CHECK ITEM                                                                                                                         | TYPE        | PASSED |
+---+------------------------------------------------------------------------------------------------------------------------------------+-------------+--------+
| 1 | Source data files size is proper                                                                                                   | performance | true   |
+---+------------------------------------------------------------------------------------------------------------------------------------+-------------+--------+
| 2 | TiDB Lightning has failed last time. To prevent data loss, this run will stop now, `employees`.`dept_emp` failed in step(written), | critical    | false  |
|   |  please run command ./tidb-lightning-ctl --checkpoint-error-destroy='`employees`.`dept_emp`' --config=...,You may also run `./tidb |             |        |
|   | -lightning-ctl --checkpoint-error-destroy=all --config=...` to start from scratch,For details of this failure, read the log file f |             |        |
|   | rom the PREVIOUS run                                                                                                               |             |        |
|   | TiDB Lightning has failed last time. To prevent data loss, this run will stop now, `employees`.`employees` failed in step(written) |             |        |
|   | , please run command ./tidb-lightning-ctl --checkpoint-error-destroy='`employees`.`employees`' --config=...,You may also run `./ti |             |        |
|   | db-lightning-ctl --checkpoint-error-destroy=all --config=...` to start from scratch,For details of this failure, read the log file |             |        |
|   |  from the PREVIOUS run                                                                                                             |             |        |
+---+------------------------------------------------------------------------------------------------------------------------------------+-------------+--------+

エラーメッセージには tidb-lightning-ctl を利用するように指示があるのですが、このツール、実はMacバージョンがありません。

Macバージョンは先日記事にしたTiDBのgithubリポジトリで、make build_-lightning-ctl すると作成できます。

または、中間結果を保存しているデータベース、/tmp/ 以下のファイルを削除しても構いません。

mysql> drop database lightning_task_info;
Query OK, 0 rows affected (0.07 sec)
 rm /tmp/tidb_lightning_checkpoint.pb

覚えておくと良いと思います。

おわりに

tidb-lightiningは、dumplingの出力するsql, csvファイルに対応しているデータインポートツールです。また、ローカルファイルだけではなく S3上のファイルや、Aurora Snapshot形式のparquetなどにも対応しています。まだまだ現役ですので使い方を覚えておくとデータの出し入れに便利です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?