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

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

このドキュメントでは、 TiDBデータ移行 (DM)を使用してMySQLからTiDBにデータを移行する方法について説明します。このガイドはDM機能の簡単なデモであり、本番環境にはお勧めしません。

ステップ1:DMクラスタをデプロイする

  1. TiUPをインストールし、TiUPを使用してdmctlをインストールします。

    curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
    tiup install dm dmctl
    
  2. DMクラスタの最小限のデプロイメントトポロジファイルを生成します。

    tiup dm template
    
  3. 出力の構成情報をコピーし、変更されたIPアドレスを持つtopology.yamlファイルとして保存します。 TiUPを使用して、 topology.yamlのファイルでDMクラスタをデプロイします。

    tiup dm deploy dm-test 6.0.0 topology.yaml -p
    

ステップ2:データソースを準備する

1つまたは複数のMySQLインスタンスをアップストリームデータソースとして使用できます。

  1. 次のように、各データソースの構成ファイルを作成します。

    source-id: "mysql-01"
    from:
      host: "127.0.0.1"
      user: "root"
      password: "fCxfQ9XKCezSzuCD0Wf5dUD+LsKegSg="  # encrypt with `tiup dmctl --encrypt "123456"`
      port: 3306
    
  2. 次のコマンドを実行して、ソースをDMクラスタに追加します。 mysql-01.yamlは、前の手順で作成した構成ファイルです。

    tiup dmctl --master-addr=127.0.0.1:8261 operate-source create mysql-01.yaml # use one of master_servers as the argument of --master-addr
    

テスト用のMySQLインスタンスがない場合は、次の手順を実行してDockerでMySQLインスタンスを作成できます。

  1. MySQL構成ファイルを作成します。

    mkdir -p /tmp/mysqltest && cd /tmp/mysqltest
    
    cat > my.cnf <<EOF
    [mysqld]
    bind-address     = 0.0.0.0
    character-set-server=utf8
    collation-server=utf8_bin
    default-storage-engine=INNODB
    transaction-isolation=READ-COMMITTED
    server-id        = 100
    binlog_format    = row
    log_bin          = /var/lib/mysql/mysql-bin.log
    show_compatibility_56 = ON
    EOF
    
  2. Dockerを使用してMySQLインスタンスを起動します。

    docker run --name mysql-01 -v /tmp/mysqltest:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:5.7
    
  3. MySQLインスタンスが開始されたら、インスタンスにアクセスします。

    ノート:

    このコマンドは、データ移行の試行にのみ適しており、実稼働環境やストレステストでは使用できません。

    mysql -uroot -p -h 127.0.0.1 -P 3306
    

ステップ3:ダウンストリームデータベースを準備する

データ移行のターゲットとして既存のTiDBクラスタを選択できます。

テスト用のTiDBクラスタがない場合は、次のコマンドを実行して、デモ環境をすばやく構築できます。

tiup playground

ステップ4:テストデータを準備する

1つまたは複数のデータソースにテストテーブルとデータを作成します。既存のMySQLデータベースを使用していて、データベースに使用可能なデータが含まれている場合は、この手順をスキップできます。

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 COLLATE=utf8mb4_bin;
create table t2 (id bigint, uid int, name varchar(80), info varchar(100), primary key (`id`), unique key(`uid`)) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
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');

ステップ5:データ移行タスクを作成する

  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 empty, it is recommended to use a password encrypted with dmctl.
    
    # Configure the information of one or multiple data sources
    mysql-instances:
      - source-id: "mysql-01"
        block-allow-list:  "ba-rule1"
    
    block-allow-list:
      ba-rule1:
        do-dbs: ["testdm"]
    
  2. dmctlを使用してタスクを作成します。

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

これで、 mysql-01のデータベースからTiDBにデータを移行するタスクが正常に作成されました。

手順6:タスクのステータスを確認する

タスクが作成されたら、 dmctl query-statusコマンドを使用してタスクのステータスを確認できます。

tiup dmctl --master-addr 127.0.0.1:8261 query-status testdm