TiDBデータ移行のクイックスタートガイド

このドキュメントでは、 TiDBデータ移行 (DM)を使用してMySQLからTiDBにデータを移行する方法について説明します。

DMを実稼働環境にデプロイする必要がある場合は、以下のドキュメントを参照してください。

サンプルシナリオ

オンプレミス環境にDM-masterインスタンスとDM-workerインスタンスをデプロイし、データをアップストリームのMySQLインスタンスからダウンストリームのTiDBインスタンスに移行するとします。

各インスタンスの詳細情報は次のとおりです。

実例サーバーアドレスポート
DMマスター127.0.0.18261、8291(内部ポート)
DMワーカー127.0.0.18262
MySQL-3306127.0.0.13306
TiDB127.0.0.14000

バイナリパッケージを使用してDMをデプロイ

DMバイナリパッケージをダウンロード

DMの最新のバイナリパッケージをダウンロードするか、パッケージを手動でコンパイルします。

方法1:最新バージョンのバイナリパッケージをダウンロードする

wget http://download.pingcap.org/dm-nightly-linux-amd64.tar.gz tar -xzvf dm-nightly-linux-amd64.tar.gz cd dm-nightly-linux-amd64

方法2:最新バージョンのバイナリパッケージをコンパイルする

git clone https://github.com/pingcap/dm.git cd dm make

DMマスターをデプロイ

次のコマンドを実行して、DMマスターを起動します。

nohup bin/dm-master --master-addr='127.0.0.1:8261' --log-file=/tmp/dm-master.log --name="master1" >> /tmp/dm-master.log 2>&1 &

DM-workerをデプロイ

次のコマンドを実行して、DM-workerを起動します。

nohup bin/dm-worker --worker-addr='127.0.0.1:8262' --log-file=/tmp/dm-worker.log --join='127.0.0.1:8261' --name="worker1" >> /tmp/dm-worker.log 2>&1 &

展開ステータスを確認する

DMクラスタが正常にデプロイされたかどうかを確認するには、次のコマンドを実行します。

bin/dmctl --master-addr=127.0.0.1:8261 list-member

通常のDMクラスタは、次の情報を返します。

{ "result": true, "msg": "", "members": [ { "leader": { "msg": "", "name": "master1", "addr": "127.0.0.1:8261" } }, { "master": { "msg": "", "masters": [ { "name": "master1", "memberID": "11007177379717700053", "alive": true, "peerURLs": [ "http://127.0.0.1:8291" ], "clientURLs": [ "http://127.0.0.1:8261" ] } ] } }, { "worker": { "msg": "", "workers": [ { "name": "worker1", "addr": "127.0.0.1:8262", "stage": "free", "source": "" } ] } } ] }

MySQLからTiDBにデータを移行する

サンプルデータを準備する

DMを使用する前に、次のサンプルデータをMySQL-3306に挿入します。

drop database if exists `testdm`; create database `testdm`; use `testdm`; create table t1 (id bigint, uid int, name varchar(80), info varchar(100), primary key (`id`), unique key(`uid`)) DEFAULT CHARSET=utf8mb4; create table t2 (id bigint, uid int, name varchar(80), info varchar(100), primary key (`id`), unique key(`uid`)) DEFAULT CHARSET=utf8mb4; insert into t1 (id, uid, name) values (1, 10001, 'Gabriel García Márquez'), (2, 10002, 'Cien años de soledad'); insert into t2 (id, uid, name) values (3, 20001, 'José Arcadio Buendía'), (4, 20002, 'Úrsula Iguarán'), (5, 20003, 'José Arcadio');

データソース構成をロードする

データ移行タスクを実行する前に、まず対応するデータソース(つまり、例ではMySQL-3306 )の構成ファイルをDMにロードする必要があります。

データソースのパスワードを暗号化する

ノート:

  • データソースにパスワードがない場合は、この手順をスキップできます。
  • プレーンテキストのパスワードを使用して、DMv2.0以降のバージョンでデータソース情報を構成できます。

安全上の理由から、データソースに暗号化されたパスワードを設定して使用することをお勧めします。パスワードが「123456」であるとします。

./bin/dmctl --encrypt "123456"
fCxfQ9XKCezSzuCD0Wf5dUD+LsKegSg=

この暗号化された値を保存し、次の手順でMySQLデータソースを作成するために使用します。

MySQLインスタンスのソース構成ファイルを編集します

次の構成をconf/source1.yamlに書き込みます。

# MySQL1 Configuration. source-id: "mysql-replica-01" from: host: "127.0.0.1" user: "root" password: "fCxfQ9XKCezSzuCD0Wf5dUD+LsKegSg=" port: 3306

データソース構成ファイルをロードします

dmctlを使用してMySQLのデータソース構成ファイルをDMクラスタにロードするには、ターミナルで次のコマンドを実行します。

./bin/dmctl --master-addr=127.0.0.1:8261 operate-source create conf/source1.yaml

返される結果の例を次に示します。

{ "result": true, "msg": "", "sources": [ { "result": true, "msg": "", "source": "mysql-replica-01", "worker": "worker1" } ] }

これで、データソースMySQL-3306がDMクラスタに正常に追加されました。

データ移行タスクを作成する

サンプルデータMySQL-3306に挿入した後、次の手順を実行してテーブルtestdmを移行します。 t1testdmt2ダウンストリームTiDBインスタンスへ:

  1. タスク構成ファイルtestdm-task.yamlを作成し、次の構成をファイルに追加します。

    --- name: testdm task-mode: all target-database: host: "127.0.0.1" port: 4000 user: "root" password: "" # If the password is not null, it is recommended to use password encrypted with dmctl. mysql-instances: - source-id: "mysql-replica-01" block-allow-list: "ba-rule1" block-allow-list: ba-rule1: do-dbs: ["testdm"]
  2. dmctlを使用してタスク構成ファイルをロードします。

    ./bin/dmctl --master-addr 127.0.0.1:8261 start-task testdm-task.yaml

    返される結果の例を次に示します。

    { "result": true, "msg": "", "sources": [ { "result": true, "msg": "", "source": "mysql-replica-01", "worker": "worker1" } ] }

これで、データをMySQL-3306からダウンストリームTiDBインスタンスに移行するデータ移行タスクを正常に作成できました。

データ移行タスクのステータスを確認する

データ移行タスクが作成されたら、 dmtcl query-statusを使用してタスクのステータスを確認できます。次の例を参照してください。

./bin/dmctl --master-addr 127.0.0.1:8261 query-status

返される結果の例を次に示します。

{ "result": true, "msg": "", "tasks": [ { "taskName": "testdm", "taskStatus": "Running", "sources": [ "mysql-replica-01" ] } ] }

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