TiDBセルフマネージドからTiDB Cloudへの移行

このドキュメントでは、 Dumplingと TiCDC を介して TiDB セルフマネージド クラスターからTiDB Cloud (AWS) にデータを移行する方法について説明します。

全体的な手順は次のとおりです。

  1. 環境を構築し、ツールを準備します。
  2. 完全なデータを移行します。プロセスは次のとおりです。
    1. Dumplingを使用して、TiDB Self-Managed から Amazon S3 にデータをエクスポートします。
    2. Amazon S3 からTiDB Cloudにデータをインポートします。
  3. TiCDC を使用して増分データを複製します。
  4. 移行したデータを確認します。

前提条件

S3 バケットとTiDB Cloudクラスターを同じリージョンに配置することをお勧めします。リージョン間の移行では、データ変換に追加コストが発生する可能性があります。

移行する前に、次のものを準備する必要があります。

ツールを準備する

以下のツールを準備する必要があります。

  • Dumpling: データエクスポートツール
  • TiCDC: データ複製ツール

Dumpling

Dumpling 、TiDB または MySQL から SQL または CSV ファイルにデータをエクスポートするツールです。Dumplingを使用すると、TiDB Self-Managed から完全なデータをエクスポートできます。

Dumpling をデプロイする前に、次の点に注意してください。

  • TiDB Cloudの TiDB クラスターと同じ VPC 内の新しい EC2 インスタンスにDumpling をデプロイすることをお勧めします。
  • 推奨される EC2 インスタンスタイプはc6g.4xlarge (16 vCPU および 32 GiBメモリ) です。ニーズに応じて他の EC2 インスタンスタイプを選択できます。Amazon マシンイメージ (AMI) は、Amazon Linux、Ubuntu、または Red Hat にすることができます。

Dumpling は、 TiUPまたはインストール パッケージを使用して展開できます。

TiUPを使用してDumplingをデプロイ

TiUP使用してDumplingを展開します:

## Deploy TiUP curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh source /root/.bash_profile ## Deploy Dumpling and update to the latest version tiup install dumpling tiup update --self && tiup update dumpling

インストールパッケージを使用してDumplingをデプロイ

インストール パッケージを使用してDumpling を展開するには:

  1. ツールキットパッケージダウンロードしてください。

  2. それをターゲットマシンに解凍します。 tiup install dumpling実行すると、 TiUPを使用してDumplingを取得できます。その後、 tiup dumpling ...を使用してDumpling を実行できます。詳細については、 Dumplingの紹介を参照してください。

Dumplingの権限を設定する

アップストリーム データベースからデータをエクスポートするには、次の権限が必要です。

  • 選択
  • リロード
  • ロックテーブル
  • レプリケーションクライアント
  • プロセス

TiCDC をデプロイ

アップストリーム TiDB クラスターからTiDB Cloudに増分データを複製するには、 TiCDCを展開するが必要です。

  1. 現在の TiDB バージョンが TiCDC をサポートしているかどうかを確認します。TiDB v4.0.8.rc.1 以降のバージョンは TiCDC をサポートしています。TiDB クラスターでselect tidb_version();実行すると、TiDB バージョンを確認できます。アップグレードが必要な場合はTiUPを使用して TiDB をアップグレードするを参照してください。

  2. TiCDCコンポーネントを TiDB クラスターに追加します。1 TiUPを使用して既存の TiDB クラスターに TiCDC を追加またはスケールアウトする参照してくださいscale-out.ymlファイルを編集して TiCDC を追加します。

    cdc_servers: - host: 10.0.1.3 gc-ttl: 86400 data_dir: /tidb-data/cdc-8300 - host: 10.0.1.4 gc-ttl: 86400 data_dir: /tidb-data/cdc-8300
  3. TiCDCコンポーネントを追加し、ステータスを確認します。

    tiup cluster scale-out <cluster-name> scale-out.yml tiup cluster display <cluster-name>

全データを移行

TiDB Self-Managed クラスターからTiDB Cloudにデータを移行するには、次のようにして完全なデータ移行を実行します。

  1. TiDB セルフマネージド クラスターから Amazon S3 にデータを移行します。
  2. Amazon S3 からTiDB Cloudにデータを移行します。

TiDB セルフマネージド クラスターから Amazon S3 にデータを移行する

Dumplingを使用して、TiDB セルフマネージド クラスターから Amazon S3 にデータを移行する必要があります。

TiDB クラスターがローカル IDC 内にある場合、またはDumplingサーバーと Amazon S3 間のネットワークが接続されていない場合は、最初にファイルをローカルstorageにエクスポートし、後で Amazon S3 にアップロードすることができます。

ステップ1.上流のTiDBセルフマネージドクラスタのGCメカニズムを一時的に無効にする

増分移行中に新しく書き込まれたデータが失われないようにするには、移行を開始する前にアップストリーム クラスターのガベージコレクション(GC) メカニズムを無効にして、システムが履歴データをクリーンアップしないようにする必要があります。

設定が成功したかどうかを確認するには、次のコマンドを実行します。

SET GLOBAL tidb_gc_enable = FALSE;

以下は出力例です。1 0無効であることを示します。

SELECT @@global.tidb_gc_enable; +-------------------------+ | @@global.tidb_gc_enable | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.01 sec)

ステップ 2. Dumplingの Amazon S3 バケットへのアクセス権限を設定する

AWS コンソールでアクセスキーを作成します。詳細はアクセスキーを作成する参照してください。

  1. AWS アカウント ID またはアカウントエイリアス、 IAMユーザー名、およびパスワードを使用してIAMコンソールにサインインします。

  2. 右上のナビゲーション バーでユーザー名を選択し、 [Security資格情報]をクリックします。

  3. アクセス キーを作成するには、 [アクセス キーの作成]クリックします。次に、 [.csv ファイルのダウンロード]を選択して、アクセス キー ID とシークレット アクセス キーをコンピューター上の CSV ファイルに保存します。ファイルは安全な場所に保存してください。このダイアログ ボックスを閉じると、シークレット アクセス キーに再度アクセスできなくなります。CSV ファイルをダウンロードしたら、 [閉じる]を選択します。アクセス キーを作成すると、キー ペアは既定でアクティブになり、すぐに使用できます。

    Create access key

    Download CSV file

ステップ 3. Dumplingを使用して上流の TiDB クラスターから Amazon S3 にデータをエクスポートする

Dumplingを使用してアップストリーム TiDB クラスターから Amazon S3 にデータをエクスポートするには、次の手順を実行します。

  1. Dumplingの環境変数を設定します。

    export AWS_ACCESS_KEY_ID=${AccessKey} export AWS_SECRET_ACCESS_KEY=${SecretKey}
  2. AWS コンソールから S3 バケット URI とリージョン情報を取得します。詳細についてはバケットを作成する参照してください。

    次のスクリーンショットは、S3 バケット URI 情報を取得する方法を示しています。

    Get the S3 URI

    次のスクリーンショットは、地域情報を取得する方法を示しています。

    Get the region information

  3. Dumpling を実行して、データを Amazon S3 バケットにエクスポートします。

    dumpling \ -u root \ -P 4000 \ -h 127.0.0.1 \ -r 20000 \ --filetype {sql|csv} \ -F 256MiB \ -t 8 \ -o "${S3 URI}" \ --s3.region "${s3.region}"

    -tオプションは、エクスポートのスレッド数を指定します。スレッド数を増やすと、 Dumplingの同時実行性とエクスポート速度が向上しますが、データベースのメモリ消費も増加します。したがって、このパラメータにあまり大きな数値を設定しないでください。

    詳細についてはDumpling参照してください。

  4. エクスポート データを確認します。通常、エクスポートされたデータには次のものが含まれます。

    • metadata : このファイルには、エクスポートの開始時刻とマスター バイナリ ログの場所が含まれています。
    • {schema}-schema-create.sql : スキーマを作成するためのSQLファイル
    • {schema}.{table}-schema.sql : テーブルを作成するためのSQLファイル
    • {schema}.{table}.{0001}.{sql|csv} : データファイル
    • *-schema-view.sql *-schema-post.sqlその他のエクスポートさ*-schema-trigger.sqlたSQLファイル

Amazon S3 からTiDB Cloudにデータを移行する

TiDB セルフマネージド クラスターから Amazon S3 にデータをエクスポートした後、そのデータをTiDB Cloudに移行する必要があります。

  1. TiDB Cloudコンソールでクラスターのアカウント ID と外部 ID を取得します。詳細については、 ステップ2. Amazon S3アクセスを構成するを参照してください。

    次のスクリーンショットは、アカウント ID と外部 ID を取得する方法を示しています。

    Get the Account ID and External ID

  2. Amazon S3 のアクセス権限を設定します。通常、次の読み取り専用権限が必要です。

    • s3:オブジェクトの取得
    • s3:オブジェクトバージョンの取得
    • s3:リストバケット
    • s3:バケットの場所を取得する

    S3 バケットがサーバー側暗号化 SSE-KMS を使用する場合は、KMS 権限も追加する必要があります。

    • kms:復号化
  3. アクセス ポリシーを構成します。 AWS コンソール > IAM > アクセス管理 > ポリシーに移動してリージョンに切り替え、 TiDB Cloudのアクセス ポリシーがすでに存在するかどうかを確認します。存在しない場合は、このドキュメントJSON タブでポリシーを作成するに従ってポリシーを作成します。

    以下は、json ポリシーのテンプレートの例です。

    ## Create a json policy template ##<Your customized directory>: fill in the path to the folder in the S3 bucket where the data files to be imported are located. ##<Your S3 bucket ARN>: fill in the ARN of the S3 bucket. You can click the Copy ARN button on the S3 Bucket Overview page to get it. ##<Your AWS KMS ARN>: fill in the ARN for the S3 bucket KMS key. You can get it from S3 bucket > Properties > Default encryption > AWS KMS Key ARN. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/viewing-bucket-key-settings.html { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<Your customized directory>" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "<Your S3 bucket ARN>" } // If you have enabled SSE-KMS for the S3 bucket, you need to add the following permissions. { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "<Your AWS KMS ARN>" } , { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "<Your AWS KMS ARN>" } ] }
  4. ロールを設定します。1 IAMロールの作成 (コンソール)参照してください。アカウント ID フィールドに、手順 1 で書き留めたTiDB Cloudアカウント ID とTiDB Cloud外部 ID を入力します。

  5. Role-ARN を取得します。 AWS コンソール > IAM > アクセス管理 > ロールに進みます。 リージョンに切り替えます。 作成したロールをクリックし、ARN を書き留めます。 TiDB Cloudにデータをインポートするときに使用します。

  6. TiDB Cloudにデータをインポートします。1 Amazon S3 または GCS から CSV ファイルをTiDB Cloudにインポートする参照してください。

増分データを複製する

増分データを複製するには、次の手順を実行します。

  1. 増分データ移行の開始時刻を取得します。たとえば、完全データ移行のメタデータ ファイルから取得できます。

    Start Time in Metadata

  2. TiCDC にTiDB Cloudへの接続を許可します。 TiDB Cloudコンソールでクラスターを見つけて、 「ネットワーク」ページに移動します。 「IP アドレスの追加」 > 「IP アドレスの使用」をクリックします。 「IP アドレス」フィールドに TiCDCコンポーネントのパブリック IP アドレスを入力し、 「確認」をクリックして保存します。これで、TiCDC はTiDB Cloudにアクセスできるようになります。詳細については、 IPアクセスリストを構成するを参照してください。

  3. ダウンストリームTiDB Cloudクラスターの接続情報を取得します。 TiDB Cloudコンソールで、 [概要] > [接続]に移動します。接続ダイアログで、 [接続タイプ]ドロップダウン リストから[パブリック]を選択し、 [接続先]ドロップダウン リストから[一般]を選択します。接続情報から、クラスターのホスト IP アドレスとポートを取得できます。詳細については、 パブリック接続経由で接続を参照してください。

  4. 増分レプリケーション タスクを作成して実行します。アップストリーム クラスターで、次のコマンドを実行します。

    tiup cdc cli changefeed create \ --pd=http://172.16.6.122:2379 \ --sink-uri="tidb://root:123456@172.16.6.125:4000" \ --changefeed-id="upstream-to-downstream" \ --start-ts="431434047157698561"
    • --pd : 上流クラスタのPDアドレス。形式は次の通りです: [upstream_pd_ip]:[pd_port]

    • --sink-uri : レプリケーション タスクのダウンストリーム アドレス。次の形式に従って--sink-uriを設定します。現在、このスキームはmysqltidbkafkas3 、およびlocalをサポートしています。

      [scheme]://[userinfo@][host]:[port][/path]?[query_parameters]
    • --changefeed-id : レプリケーション タスクの ID。形式は、^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$ 正規表現と一致する必要があります。この ID が指定されていない場合、TiCDC は ID として UUID (バージョン 4 形式) を自動的に生成します。

    • --start-ts : 変更フィードの開始 TSO を指定します。この TSO から、TiCDC クラスターはデータのプルを開始します。デフォルト値は現在の時刻です。

    詳細についてはTiCDC 変更フィードの CLI とコンフィグレーションパラメータ参照してください。

  5. アップストリーム クラスターで GC メカニズムを再度有効にします。増分レプリケーションでエラーや遅延が見つからない場合は、GC メカニズムを有効にしてクラスターのガベージコレクションを再開します。

    設定が機能するかどうかを確認するには、次のコマンドを実行します。

    SET GLOBAL tidb_gc_enable = TRUE;

    以下は出力例です。1 1 GC が無効であることを示します。

    SELECT @@global.tidb_gc_enable; +-------------------------+ | @@global.tidb_gc_enable | +-------------------------+ | 1 | +-------------------------+ 1 row in set (0.01 sec)
  6. 増分レプリケーション タスクを確認します。

    • 出力に「Create changefeed successfully!」というメッセージが表示されたら、レプリケーション タスクは正常に作成されています。

    • 状態がnormalの場合、レプリケーション タスクは正常です。

      tiup cdc cli changefeed list --pd=http://172.16.6.122:2379

      Update Filter

    • レプリケーションを確認します。アップストリーム クラスターに新しいレコードを書き込み、そのレコードがダウンストリームTiDB Cloudクラスターにレプリケートされているかどうかを確認します。

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