外部ストレージ

Backup & Restore (BR)、 TiDB Lightning、およびDumplingは、ローカル ファイルシステムと Amazon S3 でのデータの読み取りと書き込みをサポートしています。 BR は、 Google クラウド ストレージ (GCS)およびAzure ブロブ ストレージ (Azblob)でのデータの読み取りと書き込みもサポートします。これらは、BR に渡される--storageパラメータ、 TiDB Lightningに渡される-dパラメータ、およびDumplingに渡される--output ( -o ) パラメータの URL スキームによって区別されます。

スキーム

次のサービスがサポートされています。

サービススキームURL の例
すべてのノードに分散されたローカルファイルシステムローカルlocal:///path/to/dest/
Amazon S3 と互換性のあるサービスs3s3://bucket-name/prefix/of/dest/
Google クラウド ストレージ (GCS)gcs、gsgcs://bucket-name/prefix/of/dest/
Azure ブロブ ストレージ紺碧、アズブロブazure://container-name/prefix/of/dest/
どこにも書き込みません (ベンチマーク専用)ヌープnoop://

URL パラメータ

S3、GCS、Azblob などのクラウド ストレージでは、接続のために追加の構成が必要になる場合があります。このような構成のパラメーターを指定できます。例えば:

  • Dumplingを使用してデータを S3 にエクスポートします。

    ./dumpling -u root -h 127.0.0.1 -P 3306 -B mydb -F 256MiB \ -o 's3://my-bucket/sql-backup'
  • TiDB Lightningを使用して S3 からデータをインポートします。

    ./tidb-lightning --tidb-port=4000 --pd-urls=127.0.0.1:2379 --backend=local --sorted-kv-dir=/tmp/sorted-kvs \ -d 's3://my-bucket/sql-backup'
  • TiDB Lightningを使用して S3 からデータをインポートします (リクエスト モードでパス スタイルを使用)。

    ./tidb-lightning --tidb-port=4000 --pd-urls=127.0.0.1:2379 --backend=local --sorted-kv-dir=/tmp/sorted-kvs \ -d 's3://my-bucket/sql-backup?force-path-style=true&endpoint=http://10.154.10.132:8088'
  • TiDB Lightningを使用して S3 からデータをインポートします (特定のIAMロールを使用して S3 データにアクセスします)。

    ./tidb-lightning --tidb-port=4000 --pd-urls=127.0.0.1:2379 --backend=local --sorted-kv-dir=/tmp/sorted-kvs \ -d 's3://my-bucket/test-data?role-arn=arn:aws:iam::888888888888:role/my-role'
  • BR を使用してデータを GCS にバックアップします。

    ./br backup full -u 127.0.0.1:2379 \ -s 'gcs://bucket-name/prefix'
  • BR を使用してデータを Azblob にバックアップします。

    ./br backup full -u 127.0.0.1:2379 \ -s 'azure://container-name/prefix'

S3 URL パラメータ

URL パラメータ説明
access-keyアクセスキー
secret-access-keyシークレット アクセス キー
use-accelerate-endpointAmazon S3 で加速エンドポイントを使用するかどうか (デフォルトはfalse )
endpointS3 互換サービスのカスタム エンドポイントの URL (例: https://s3.example.com/ )
force-path-style仮想ホスト スタイル アクセスではなく、パス スタイル アクセスを使用します (デフォルトはtrue )。
storage-classアップロードされたオブジェクトのストレージ クラス (例: STANDARDSTANDARD_IA )
sseアップロードの暗号化に使用されるサーバー側の暗号化アルゴリズム (空、 AES256またはaws:kms )
sse-kms-key-idsseaws:kmsに設定されている場合、KMS ID を指定します
aclアップロードされたオブジェクトの既定の ACL (例: privateauthenticated-read )
role-arn指定されたIAMロールを使用してサードパーティから Amazon S3 データにアクセスする必要がある場合、 arn:aws:iam::888888888888:role/my-roleなどのrole-arn URL クエリ パラメータを使用して、 IAMロールの対応するAmazon リソースネーム (ARN)を指定できます。 IAMロールを使用してサードパーティから Amazon S3 データにアクセスする方法の詳細については、 AWS ドキュメントを参照してください。
external-idサードパーティから Amazon S3 データにアクセスする場合、正しい外部 IDを指定してIAMロールを想定する必要がある場合があります。この場合、このexternal-idの URL クエリ パラメータを使用して、外部 ID を指定できます。外部 ID は、Amazon S3 データにアクセスするためにIAMロール ARN とともにサードパーティによって提供される任意の文字列です。 IAMロールを引き受ける際の外部 ID の提供はオプションです。つまり、サードパーティがIAMロールの外部 ID を指定していない場合、ロールを引き受けて、このパラメーターを提供しなくても対応する S3 データにアクセスできます。

ノート:

アクセス キーとシークレット アクセス キーをストレージ URL に直接渡すことはお勧めしません。これらのキーはプレーン テキストでログに記録されるためです。

アクセスキーとシークレットアクセスキーも、 IAMロールの ARN ( role-arn ) と外部 ID ( external-id ) も指定されていない場合、移行ツールは次の順序で環境からこれらのキーを推測しようとします。

  1. $AWS_ACCESS_KEY_IDおよび$AWS_SECRET_ACCESS_KEYの環境変数
  2. $AWS_ACCESS_KEYおよび$AWS_SECRET_KEYの環境変数
  3. $AWS_SHARED_CREDENTIALS_FILE環境変数で指定されたパスにあるツール ノード上の共有資格情報ファイル
  4. ~/.aws/credentialsのツール ノード上の共有資格情報ファイル
  5. Amazon EC2 コンテナの現在のIAMロール
  6. Amazon ECS タスクの現在のIAMロール

GCS URL パラメータ

URL パラメータ説明
credentials-fileツール ノードの資格情報 JSON ファイルへのパス
storage-classアップロードされたオブジェクトのストレージ クラス (例: STANDARDCOLDLINE )
predefined-aclアップロードされたオブジェクトの定義済み ACL (例: privateproject-private )

credentials-fileが指定されていない場合、移行ツールは次の順序で環境から資格情報を推測しようとします。

  1. $GOOGLE_APPLICATION_CREDENTIALS環境変数で指定されたパスにあるツール ノード上のファイルの内容
  2. ~/.config/gcloud/application_default_credentials.jsonのツール ノード上のファイルの内容
  3. GCE または GAE で実行している場合、資格情報はメタデータサーバーから取得されます。

Azblob URL パラメーター

URL パラメータ説明
account-nameストレージのアカウント名
account-keyアクセスキー
access-tierアップロードされたオブジェクトのアクセス層 (例: HotCoolArchive )。 access-tierが設定されていない (値が空である) 場合、デフォルトの値はHotです。

TiKV と BR が同じストレージ アカウントを使用するようにするために、BR はaccount-nameの値を決定します。つまり、デフォルトでsend-credentials-to-tikv = trueが設定されています。 BR は、次の順序で環境からこれらのキーを推測します。

  1. account-nameaccount-keyの両方を指定すると、このパラメーターで指定されたキーが使用されます。
  2. account-keyが指定されていない場合、BR は BR のノードの環境変数から関連する資格情報を読み取ろうとします。 BR は、最初に$AZURE_CLIENT_ID$AZURE_TENANT_ID 、および$AZURE_CLIENT_SECRETを読み取ります。同時に、BR は TiKV がそれぞれのノードからこれら 3 つの環境変数を読み取り、Azure AD (Azure Active Directory) を使用して変数にアクセスできるようにします。
  3. 上記の 3 つの環境変数が BR ノードで構成されていない場合、BR はアクセス キーを使用して$AZURE_STORAGE_KEYを読み取ろうとします。

ノート:

  • Azure Blob Storage を外部ストレージとして使用する場合は、 send-credentials-to-tikv = trueを設定する必要があります (既定で設定されています)。そうしないと、バックアップ タスクが失敗します。
  • $AZURE_CLIENT_IDは、 $AZURE_CLIENT_SECRET Azure アプリケーションのアプリケーション ID $AZURE_TENANT_ID 、テナント ID client_id 、クライアント パスワードtenant_idを示しclient_secret 。 3 つの環境変数の存在を確認する方法、または環境変数をパラメータとして設定する方法については、 環境変数の構成を参照してください。

コマンドライン パラメータ

URL パラメーターに加えて、BR とDumplingは、コマンドライン パラメーターを使用してこれらの構成を指定することもサポートしています。例えば:

./dumpling -u root -h 127.0.0.1 -P 3306 -B mydb -F 256MiB \ -o 's3://my-bucket/sql-backup' \ --s3.role-arn="arn:aws:iam::888888888888:role/my-role"

上記のコマンドは、次のコマンドと同等です。

./dumpling -u root -h 127.0.0.1 -P 3306 -B mydb -F 256MiB \ -o 's3://my-bucket/sql-backup&role-arn=arn:aws:iam::888888888888:role/my-role'

URL パラメーターとコマンド ライン パラメーターを同時に指定した場合、URL パラメーターはコマンド ライン パラメーターによって上書きされます。

S3 コマンドライン パラメータ

コマンドライン パラメータ説明
--s3.endpointS3 互換サービスのカスタム エンドポイントの URL。たとえば、 https://s3.example.com/です。
--s3.storage-classアップロード オブジェクトのストレージ クラス。たとえば、 STANDARDまたはSTANDARD_IAです。
--s3.sseアップロードの暗号化に使用されるサーバー側の暗号化アルゴリズム。値のオプションは空で、 AES256aws:kmsです。
--s3.sse-kms-key-id--s3.sseaws:kmsとして構成されている場合、このパラメーターを使用して KMS ID を指定します。
--s3.aclアップロード オブジェクトの既定の ACL。たとえば、 privateまたはauthenticated-readです。
--s3.providerS3 互換サービスのタイプ。サポートされているタイプはawsalibabacephnetease 、およびotherです。
--s3.role-arn指定されたIAMロールを使用してサードパーティから Amazon S3 データにアクセスする必要がある場合は、対応するAmazon リソースネーム (ARN)のIAMロールを--s3.role-arnオプション ( arn:aws:iam::888888888888:role/my-roleなど) で指定できます。 IAMロールを使用してサードパーティから Amazon S3 データにアクセスする方法の詳細については、 AWS ドキュメントを参照してください。
--s3.external-idサードパーティから Amazon S3 データにアクセスする場合、正しい外部 IDを指定してIAMロールを想定する必要がある場合があります。この場合、この--s3.external-idオプションを使用して外部 ID を指定できます。外部 ID は、Amazon S3 データにアクセスするためにIAMロール ARN とともにサードパーティによって提供される任意の文字列です。 IAMロールを引き受ける際の外部 ID の提供はオプションです。つまり、サードパーティがIAMロールの外部 ID を指定していない場合、ロールを引き受けて、このパラメーターを提供しなくても対応する S3 データにアクセスできます。

非 AWS S3 クラウド ストレージにデータをエクスポートするには、クラウド プロバイダーと使用するかどうかを指定しますvirtual-hosted style 。次の例では、データは Alibaba Cloud OSS ストレージにエクスポートされます。

  • Dumplingを使用して Alibaba Cloud OSS にデータをエクスポートします。

    ./dumpling -h 127.0.0.1 -P 3306 -B mydb -F 256MiB \ -o "s3://my-bucket/dumpling/" \ --s3.endpoint="http://oss-cn-hangzhou-internal.aliyuncs.com" \ --s3.provider="alibaba" \ -r 200000 -F 256MiB
  • BR を使用してデータを Alibaba Cloud OSS にバックアップします。

    ./br backup full --pd "127.0.0.1:2379" \ --storage "s3://my-bucket/full/" \ --s3.endpoint="http://oss-cn-hangzhou-internal.aliyuncs.com" \ --s3.provider="alibaba" \ --send-credentials-to-tikv=true \ --ratelimit 128 \ --log-file backuptable.log
  • TiDB Lightningを使用して Alibaba Cloud OSS にデータをエクスポートします。 YAML 形式の構成ファイルで次の内容を指定する必要があります。

    [mydumper] data-source-dir = "s3://my-bucket/dumpling/?endpoint=http://oss-cn-hangzhou-internal.aliyuncs.com&provider=alibaba"

GCS コマンドライン パラメータ

コマンドライン パラメータ説明
--gcs.credentials-fileツール ノード上の JSON 形式の資格情報のパス
--gcs.storage-classアップロード オブジェクトのストレージ タイプ (例: STANDARDまたはCOLDLINE )
--gcs.predefined-aclアップロード オブジェクトの定義済み ACL (例: privateまたはproject-private )

Azblob コマンド ライン パラメーター

| |コマンドライン パラメータ |説明 | | | --azblob.account-name |ストレージのアカウント名 | | | --azblob.account-key |アクセスキー | | | --azblob.access-tier |アップロードされたオブジェクトのアクセス層 (例: HotCoolArchive )。 access-tierが設定されていない (値が空である) 場合、値はデフォルトでHotになります。 | |

BR が資格情報を TiKV に送信

デフォルトでは、S3、GCS、または Azblob の宛先を使用する場合、BR はすべての TiKV ノードに資格情報を送信して、セットアップの複雑さを軽減します。

ただし、これは、すべてのノードが独自の役割と権限を持つクラウド環境には適していません。このような場合、 --send-credentials-to-tikv=false (または短い形式の-c=0 ) を使用して資格情報の送信を無効にする必要があります。

./br backup full -c=0 -u pd-service:2379 -s 's3://bucket-name/prefix'

バックアップする戻すのデータに SQL ステートメントを使用する場合、 SEND_CREDENTIALS_TO_TIKV = FALSEオプションを追加できます。

BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE;

このオプションは、 TiDB LightningおよびDumplingではサポートされていません。これは、2 つのアプリケーションが現在スタンドアロンであるためです。