TiDBセルフマネージドからTiDB Cloudへの移行
このドキュメントでは、 Dumplingと TiCDC を介して TiDB セルフマネージド クラスターからTiDB Cloud (AWS) にデータを移行する方法について説明します。
全体的な手順は次のとおりです。
- 環境を構築し、ツールを準備します。
- 完全なデータを移行します。プロセスは次のとおりです。
- Dumplingを使用して、TiDB Self-Managed から Amazon S3 にデータをエクスポートします。
- Amazon S3 からTiDB Cloudにデータをインポートします。
- TiCDC を使用して増分データを複製します。
- 移行したデータを確認します。
前提条件
S3 バケットとTiDB Cloudクラスターを同じリージョンに配置することをお勧めします。リージョン間の移行では、データ変換に追加コストが発生する可能性があります。
移行する前に、次のものを準備する必要があります。
- 管理者アクセス権を持つAWS アカウント
- AWS S3 バケット
- AWS でホストされているターゲットTiDB Cloudクラスターへのアクセス権が少なくとも
Project Data Access Read-Write
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 を展開するには:
ツールキットパッケージダウンロードしてください。
それをターゲットマシンに解凍します。
tiup install dumpling
実行すると、 TiUPを使用してDumplingを取得できます。その後、tiup dumpling ...
を使用してDumpling を実行できます。詳細については、 Dumplingの紹介を参照してください。
Dumplingの権限を設定する
アップストリーム データベースからデータをエクスポートするには、次の権限が必要です。
- 選択
- リロード
- ロックテーブル
- レプリケーションクライアント
- プロセス
TiCDC をデプロイ
アップストリーム TiDB クラスターからTiDB Cloudに増分データを複製するには、 TiCDCを展開するが必要です。
現在の TiDB バージョンが TiCDC をサポートしているかどうかを確認します。TiDB v4.0.8.rc.1 以降のバージョンは TiCDC をサポートしています。TiDB クラスターで
select tidb_version();
実行すると、TiDB バージョンを確認できます。アップグレードが必要な場合はTiUPを使用して TiDB をアップグレードするを参照してください。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-8300TiCDCコンポーネントを追加し、ステータスを確認します。
tiup cluster scale-out <cluster-name> scale-out.yml tiup cluster display <cluster-name>
全データを移行
TiDB Self-Managed クラスターからTiDB Cloudにデータを移行するには、次のようにして完全なデータ移行を実行します。
- TiDB セルフマネージド クラスターから Amazon S3 にデータを移行します。
- 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 コンソールでアクセスキーを作成します。詳細はアクセスキーを作成する参照してください。
AWS アカウント ID またはアカウントエイリアス、 IAMユーザー名、およびパスワードを使用してIAMコンソールにサインインします。
右上のナビゲーション バーでユーザー名を選択し、 [Security資格情報]をクリックします。
アクセス キーを作成するには、 [アクセス キーの作成] をクリックします。次に、 [.csv ファイルのダウンロード]を選択して、アクセス キー ID とシークレット アクセス キーをコンピューター上の CSV ファイルに保存します。ファイルは安全な場所に保存してください。このダイアログ ボックスを閉じると、シークレット アクセス キーに再度アクセスできなくなります。CSV ファイルをダウンロードしたら、 [閉じる]を選択します。アクセス キーを作成すると、キー ペアは既定でアクティブになり、すぐに使用できます。
ステップ 3. Dumplingを使用して上流の TiDB クラスターから Amazon S3 にデータをエクスポートする
Dumplingを使用してアップストリーム TiDB クラスターから Amazon S3 にデータをエクスポートするには、次の手順を実行します。
Dumplingの環境変数を設定します。
export AWS_ACCESS_KEY_ID=${AccessKey} export AWS_SECRET_ACCESS_KEY=${SecretKey}AWS コンソールから S3 バケット URI とリージョン情報を取得します。詳細についてはバケットを作成する参照してください。
次のスクリーンショットは、S3 バケット URI 情報を取得する方法を示しています。
次のスクリーンショットは、地域情報を取得する方法を示しています。
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参照してください。
エクスポート データを確認します。通常、エクスポートされたデータには次のものが含まれます。
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に移行する必要があります。
TiDB Cloudコンソールでクラスターのアカウント ID と外部 ID を取得します。詳細については、 ステップ2. Amazon S3アクセスを構成するを参照してください。
次のスクリーンショットは、アカウント ID と外部 ID を取得する方法を示しています。
Amazon S3 のアクセス権限を設定します。通常、次の読み取り専用権限が必要です。
- s3:オブジェクトの取得
- s3:オブジェクトバージョンの取得
- s3:リストバケット
- s3:バケットの場所を取得する
S3 バケットがサーバー側暗号化 SSE-KMS を使用する場合は、KMS 権限も追加する必要があります。
- kms:復号化
アクセス ポリシーを構成します。 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>" } ] }ロールを設定します。1 IAMロールの作成 (コンソール)参照してください。アカウント ID フィールドに、手順 1 で書き留めたTiDB Cloudアカウント ID とTiDB Cloud外部 ID を入力します。
Role-ARN を取得します。 AWS コンソール > IAM > アクセス管理 > ロールに進みます。 リージョンに切り替えます。 作成したロールをクリックし、ARN を書き留めます。 TiDB Cloudにデータをインポートするときに使用します。
TiDB Cloudにデータをインポートします。1 Amazon S3 または GCS から CSV ファイルをTiDB Cloudにインポートする参照してください。
増分データを複製する
増分データを複製するには、次の手順を実行します。
増分データ移行の開始時刻を取得します。たとえば、完全データ移行のメタデータ ファイルから取得できます。
TiCDC にTiDB Cloudへの接続を許可します。 TiDB Cloudコンソールでクラスターを見つけて、 「ネットワーク」ページに移動します。 「IP アドレスの追加」 > 「IP アドレスの使用」をクリックします。 「IP アドレス」フィールドに TiCDCコンポーネントのパブリック IP アドレスを入力し、 「確認」をクリックして保存します。これで、TiCDC はTiDB Cloudにアクセスできるようになります。詳細については、 IPアクセスリストを構成するを参照してください。
ダウンストリームTiDB Cloudクラスターの接続情報を取得します。 TiDB Cloudコンソールで、 [概要] > [接続]に移動します。接続ダイアログで、 [接続タイプ]ドロップダウン リストから[パブリック]を選択し、 [接続先]ドロップダウン リストから[一般]を選択します。接続情報から、クラスターのホスト IP アドレスとポートを取得できます。詳細については、 パブリック接続経由で接続を参照してください。
増分レプリケーション タスクを作成して実行します。アップストリーム クラスターで、次のコマンドを実行します。
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
を設定します。現在、このスキームはmysql
、tidb
、kafka
、s3
、および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 とコンフィグレーションパラメータ参照してください。
アップストリーム クラスターで 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)増分レプリケーション タスクを確認します。
出力に「Create changefeed successfully!」というメッセージが表示されたら、レプリケーション タスクは正常に作成されています。
状態が
normal
の場合、レプリケーション タスクは正常です。tiup cdc cli changefeed list --pd=http://172.16.6.122:2379レプリケーションを確認します。アップストリーム クラスターに新しいレコードを書き込み、そのレコードがダウンストリームTiDB Cloudクラスターにレプリケートされているかどうかを確認します。