このページでは、BAK ファイルを使用して Cloud SQL インスタンスにデータのエクスポートとインポートを行う方法について説明します。また、トランザクション ログファイルを使用して Cloud SQL インスタンスにデータをインポートする方法も説明します。
始める前に
エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。
ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。
インポート オペレーションが完了したら、結果を確認します。
Cloud SQL for SQL Server からデータをエクスポートする
Cloud SQL は、組み込みの BAK ファイルのエクスポートをサポートしています。
エクスポートされたファイルから新しいインスタンスを作成する場合は、バックアップから別のインスタンスに復元またはインスタンスのクローン作成を検討してください。
エクスポート オペレーション中に、選択したデータベースのフル バックアップが Cloud SQL によって実行されます。
Cloud SQL for SQL Server からのエクスポートに必要なロールと権限
Cloud SQL から Cloud Storage にデータをエクスポートするには、エクスポートを開始するユーザーに次のいずれかのロールが必要です。
- Cloud SQL 編集者ロール
- 次の権限を含むカスタムロール:
cloudsql.instances.get
cloudsql.instances.export
また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。
storage.objectAdmin
Identity and Access Management(IAM)ロール- 次の権限を含むカスタムロール:
storage.objects.create
storage.objects.list
(ストライプ エクスポートの場合のみ)storage.objects.delete
(ストライプ エクスポートの場合のみ)storage.buckets.getIamPolicy
(トランザクション ログのエクスポートの場合のみ)storage.buckets.setIamPolicy
(トランザクション ログのエクスポートの場合のみ)
IAM ロールについては、Identity and Access Management をご覧ください。
Cloud SQL for SQL Server から BAK ファイルにデータをエクスポートする
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [エクスポート] をクリックします。
- [ファイル形式] セクションで [BAK] をクリックします。
- [エクスポートするデータ] セクションでプルダウン メニューを使用して、エクスポートするデータベースを選択します。
- [送信先] セクションで [BROWSE] を選択して、エクスポート先の Cloud Storage バケットまたはフォルダを検索します。
- [エクスポート] をクリックしてエクスポートを開始します。
gcloud
- Cloud Storage バケットを作成します。
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。- データベースをエクスポートします。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FILENAME \ --database=DATABASE_NAME
gcloud sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_DUMP_FILE: SQL ダンプファイルのパス
- DATABASE_NAME_1: Cloud SQL インスタンス内のデータベースの名前
- DATABASE_NAME_2: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
リクエストの本文(JSON):
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
REST v1beta4
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
storage.objectAdmin
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_DUMP_FILE: SQL ダンプファイルのパス
- DATABASE_NAME_1: Cloud SQL インスタンス内のデータベースの名前
- DATABASE_NAME_2: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/export
リクエストの本文(JSON):
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
差分データベース バックアップをエクスポートする
差分データベース バックアップをエクスポートする前に、差分ベースをエクスポートする必要があります。
ポイントインタイム リカバリやリードレプリカなどの他のサービスや機能では、フル バックアップ エクスポートと差分バックアップ エクスポートの間でフル バックアップをトリガーする場合は、フル バックアップ エクスポートを再度トリガーする必要があります。
次の例を考えてみましょう。
- 午前 7 時にフル バックアップ リクエストを発行します。
- ポイントインタイム リカバリを午前 9 時に有効にします。これにより、インスタンスのフル バックアップがトリガーされます。
- 午後 5 時に差分バックアップを作成しようとします。最後のフル バックアップがポイントインタイム リカバリによってトリガーされたため、このエクスポート リクエストは失敗し、エラー メッセージが表示されます。
Cloud SQL は、レプリカ インスタンスの --differential-base
または --bak-type=DIFF
を使用したデータベース エクスポート リクエストをサポートしていません。
gcloud
- Cloud Storage バケットを作成します。
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。
これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。データベースを差分ベースとしてエクスポートします。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \ --database=DATABASE_NAME --differential-base
gcloud sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。差分バックアップをエクスポートします。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=DIFF
gcloud sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - データベースのフル バックアップを差分ベースとしてエクスポートします。
データをリクエストする前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_BAK_FILE: SQL BAK ファイルのパス
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前
offload
: サーバーレス エクスポートを有効にして使用するには、この値を TRUE に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "databases": ["DATABASE_NAME"] "offload": TRUE | FALSE "bakExportOptions": { "differentialBase":true } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 差分バックアップをエクスポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_dump_file: SQL ダンプファイルへのパス
- database_name_1: Cloud SQL インスタンス内のデータベースの名前
- database_name_2: Cloud SQL インスタンス内のデータベースの名前
- offload: サーバーレス エクスポートを有効にします。サーバーレス エクスポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false "bakExportOptions": { bakType:"DIFF" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
REST v1beta4
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
storage.objectAdmin
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - データベースのフル バックアップを差分ベースとしてエクスポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_dump_file: SQL ダンプファイルへのパス
- database_name_1: Cloud SQL インスタンス内のデータベースの名前
- database_name_2: Cloud SQL インスタンス内のデータベースの名前
- offload: サーバーレス エクスポートを有効にして使用するには、値を
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false "bakExportOptions": { "differentialBase":true } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 差分バックアップをエクスポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_dump_file: SQL ダンプファイルへのパス
- database_name_1: Cloud SQL インスタンス内のデータベースの名前
- database_name_2: Cloud SQL インスタンス内のデータベースの名前
- offload: サーバーレス エクスポートを有効にして使用するには、この値を
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false "bakExportOptions": { bakType:"DIFF" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
トランザクション ログをエクスポートする
ポイントインタイム リカバリ(PITR)が有効になっており、ログが Cloud Storage に保存されている Cloud SQL Enterprise Plus エディション インスタンスのトランザクション ログをエクスポートできます。
gcloud
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。
これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.Admin
IAM ロールを付与します。IAM 権限の設定の詳細については、バケットでの IAM ポリシーの設定と管理をご覧ください。トランザクション ログをエクスポートします。
gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_PATH --export-log-start-time=START_DATE_AND_TIME / --export-log-end-time=END_DATE_AND_TIME / --database=DATABASE_NAME --bak-type=TLOG
gcloud sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST
-
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
storage.Admin
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、バケットでの IAM ポリシーの設定と管理をご覧ください。 - トランザクション ログをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- FOLDER_PATH: Cloud Storage バケット内のフォルダのパス。Cloud SQL は、このフォルダにトランザクション ログをエクスポートします。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
exportLogStartTime
: エクスポートするトランザクション ログの開始日時。exportLogEndTime
: エクスポートするトランザクション ログの終了日時。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/FOLDER_PATH", "databases": ["DATABASE_NAME"] "bakExportOptions": { bakType:"TLOG" exportLogStartTime: START_DATE_AND_TIME exportLogEndTime: END_DATE_AND_TIME } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
ストライプ エクスポートを使用する
ストライプ エクスポートの利点は次のとおりです。
- オペレーション完了までに必要な時間の短縮
- 5 TB を超えるデータベースをエクスポート可能
ストライプ エクスポートを使用すると、1 つのファイルで構成されたバックアップではなく、複数のファイルに分割されるというデメリットがあります。このセットは「ストライプ セット」と呼ばれます。ストライプ化されたメディアセット(ストライプ セット)でデバイスをバックアップするをご覧ください。Cloud SQL では、単一のファイルを生成する代わりに、Cloud Storage の空のフォルダにエクスポートします。詳細については、ストライプ エクスポートの使用方法をご覧ください。
運用の計画
ストライプ エクスポートを使用すると、エクスポートのパフォーマンスが向上します。ただし、ユースケースで単一の出力ファイルが必要な場合、またはデータベースのサイズが 5 TB 未満の場合で、高速なパフォーマンスが重要でない場合は、ストライプ化されていないエクスポートを使用することをおすすめします。
ストライプ エクスポートを使用する場合は、ストライプの数を考慮してください。この値は、gcloud CLI コマンドまたは REST API 呼び出しで指定できます。ただし、パフォーマンスに最適なストライプ数が必要な場合や、数値がわからない場合は、数値を省略します。最適なストライプ数が自動的に設定されます。
Cloud SQL for SQL Server で現在サポートされているストライプの最大数は 64 です。
ストライプ エクスポートの使用方法
gcloud
- Cloud Storage バケットを作成します。
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。- データベースをエクスポートするには、
--striped
パラメータを指定するか、--stripe_count
の値を指定します。--stripe_count
の値を設定することは、--striped
パラメータが意図したものであることを意味します。--no-striped
を指定して--stripe_count
の値を指定すると、エラーが発生します。gcloud beta sql export bak INSTANCE_NAME \ gs://BUCKET_NAME/STRIPED_EXPORT_FOLDER \ --database=DATABASE_NAME --striped --stripe_count=NUMBER
gcloud beta sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットのエクスポート先フォルダ(Cloud Storage バケット内)のパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
- true | false: ストライプ エクスポートを使用するには、
true
に設定します。ストライプ数を指定せずにtrue
を指定すると、最適なストライプ数が自動的に設定されます - number_of_stripes: 使用するストライプの数。指定すると、
striped
はtrue
として暗黙的に指定されます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "databases": ["database_name"], "bakExportOptions": { "striped": true | false, "stripe_count": ["number_of_stripes"] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
REST v1beta4
- エクスポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットのエクスポート先フォルダ(Cloud Storage バケット内)のパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
- true | false: ストライプ エクスポートを使用するには、
true
に設定します。ストライプ数を指定せずにtrue
を指定すると、最適なストライプ数が自動的に設定されます - number_of_stripes: 使用するストライプの数。指定すると、
striped
はtrue
として暗黙的に指定されます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "databases": ["database_name"], "bakExportOptions": { "striped": true | false, "stripe_count": ["number_of_stripes"] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
Cloud SQL for SQL Server にインポートする
Cloud SQL for SQL Server へのインポートに必要なロールと権限
Cloud Storage から Cloud SQL にデータをインポートするには、インポートを開始するユーザーに次のいずれかのロールが必要です。
- Cloud SQL 管理者ロール
- 次の権限を含むカスタムロール:
cloudsql.instances.get
cloudsql.instances.import
また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。
storage.objectAdmin
IAM ロール- 次の権限を含むカスタムロール:
storage.objects.get
storage.objects.list
(ストライプ インポートの場合のみ)
IAM ロールについては、Identity and Access Management をご覧ください。
BAK ファイルから Cloud SQL for SQL Server にデータをインポートする
ストライプ インポートを使用するには、ストライプ インポートを使用するをご覧ください。
さまざまなインポート フレームワークを利用できます。たとえば、Cloud SQL for SQL Server は、次のデータベース バージョンの変更データ キャプチャ(CDC)をサポートしています。
- SQL Server 2017 Standard
- SQL Server 2017 Enterprise
- SQL Server 2019 Standard
- SQL Server 2019 Enterprise
CDC 対応データベースをインポートする場合、KEEP_CDC フラグが保持されます。
インスタンスのバージョンが Microsoft SQL Server Enterprise Edition の場合、暗号化された BAK ファイルをインポートできます。
Microsoft SQL Server Standard Edition インスタンスも、暗号化された BAK ファイルをインポートしますが、これは gcloud CLI でのみ使用できます。
サポートされている BAK 拡張機能は .bak
と .bak.gz
だけです。現在、GPG 暗号化バックアップはサポートされていません。
以下の手順では、新しいデータベースを指定する準備を行います。BAK ファイルのインポートを開始する前にデータベースを作成しないでください。
BAK ファイルを使用して Cloud SQL インスタンスにデータをインポートするには:
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [インポート] をクリックします。
- データのインポート元となるファイルを選択するフィールドで、インポートに使用するバケットと BAK ファイルのパスを入力します。
圧縮ファイル(
.gz
)または非圧縮ファイルをインポートできます。 - [ファイル形式] セクションで [BAK] を選択します。
- BAK ファイルをインポートする Cloud SQL インスタンスで [データベース] を指定します。
- [インポート] をクリックしてインポートを開始します。
gcloud
インポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- 必要なロールと権限を構成済みであることを確認してください。
- BAK ファイルからのデータをバケットにアップロードします。
- インポート先のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gcloud storage buckets add-iam-policy-binding
を使用して、バケットのサービス アカウントにstorage.objectViewer
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。- ファイルからデータをインポートします。
暗号化されたインポートの場合は、次のコマンドを使用します。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME
gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME --database=DATABASE_NAME --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME --pvk-path=gs://BUCKET_NAME/KEY_NAME --prompt-for-pvk-password
- 以前に設定した IAM 権限を保持する必要がない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
REST v1
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_bak_file: BAK ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
リクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
REST v1beta4
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_bak_file: BAK ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
このリクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
ERROR_RDBMS
などのエラーが表示した場合は、BAK ファイルがバケットに存在し、バケットに対して正しい権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。
差分データベース バックアップをインポートする
差分データベース バックアップをインポートするには、フル バックアップをインポートする必要があります。フル バックアップをインポートした後、データベースが RESTORING
状態になっている必要があります。
Cloud SQL では、ポイントインタイム リカバリが有効になっているインスタンスにデータベースの差分バックアップをインポートすることはできません。これは、--no-recovery
を使用したデータベース バックアップのインポートが、差分データベース バックアップのインポートの前提条件であるためです。また、データベースが RESTORING
状態の場合、インスタンスでポイントインタイム リカバリを有効にすることはできません。インポートに失敗した場合は、次のいずれかの方法でポイントインタイム リカバリを有効にします。
--recovery-only
フラグを使用して、RESTORING
状態のデータベースをオンラインにします。データベースを削除します。
差分データベース バックアップを使用して Cloud SQL インスタンスにデータをインポートするには、次の手順を行います。
gcloud
インポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- 必要なロールと権限を構成済みであることを確認してください。
- BAK ファイルからのデータをバケットにアップロードします。
- インポート先のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gcloud storage buckets add-iam-policy-binding
を使用して、バケットのサービス アカウントにstorage.objectViewer
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。--no-recovery
を使用してフル バックアップをインポートします。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \ --database=DATABASE_NAME --bak-type=FULL --no-recovery
-
差分データベース バックアップをインポートします。
gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=DIFF --no-recovery
-
インポートされたデータベースをオンラインにするには、
--recovery-only
フラグを使用します。このステップは省略可能です。データベースがRESTORING
状態の場合にのみ実行する必要があります。gcloud sql import bak INSTANCE_NAME \ --database=DATABASE_NAME --recovery-only
- 以前に設定した IAM 権限を保持する必要がない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
REST v1
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 -
noRecovery
を使用してフル バックアップをインポートします。データをリクエストする前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- PATH_TO_BAK_FILE: BAK ファイルへのパス。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 差分データベース バックアップをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_bak_file: BAK ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" "bakImportOptions": { "bakType": "DIFF", "noRecovery": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
recoveryOnly
を使用して、インポートしたデータベースをオンラインにします。このステップは省略可能です。データベースがRESTORING
状態の場合にのみ実行する必要があります。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_BAK_FILE: BAK ファイルへのパス
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
REST v1beta4
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 -
noRecovery
を使用してフル バックアップをインポートします。データをリクエストする前に、次のように置き換えます。
- PROJECT-ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- PATH_TO_BAK_FILE: BAK ファイルへのパス。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 差分データベース バックアップをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_bak_file: BAK ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" "bakImportOptions": { "bakType": "DIFF", "noRecovery": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
recoveryOnly
を使用して、インポートしたデータベースをオンラインにします。このステップは省略可能です。データベースがRESTORING
状態の場合にのみ実行する必要があります。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_BAK_FILE: BAK ファイルへのパス
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
ERROR_RDBMS
などのエラーが表示した場合は、BAK ファイルがバケットに存在し、バケットに対して正しい権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。
トランザクション ログのバックアップをインポートする
トランザクション ログには、データベースのトランザクションと各トランザクションで行われた変更が記録されます。これにより、システム障害が発生した場合にデータベースの整合性を再確立できます。
トランザクション ログのバックアップを使用して Cloud SQL インスタンスにデータをインポートするには、次の手順を行います。
gcloud
インポート用のオプション: Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
- バックアップ ファイルをバケットにアップロードします。
- インポート先のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gcloud storage buckets add-iam-policy-binding
を使用して、バケットのサービス アカウントにstorage.objectViewer
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。--no-recovery
パラメータを使用してフル バックアップをインポートします。フル バックアップのインポート後、データベースがRESTORING
状態であることを確認します。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=FULL --no-recovery
- オプション: 差分バックアップをインポートします。
-
トランザクション ログのバックアップをインポートします。
次のように置き換えます。gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \ --database=DATABASE_NAME --bak-type=TLOG --stop-at=STOP_AT_TIMESTAMP --stop-at-mark=STOP_AT_MARK_NAME --no-recovery
- INSTANCE_NAME: インスタンス名。
- BUCKET_NAME: Cloud Storage バケット名。
- BACKUP_FILENAME: バックアップ ファイルの名前。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
- STOP_AT_TIMESTAMP: トランザクション ログのインポートを停止するタイムスタンプ。これはオプションのフィールドです。値には RFC 3339 形式を使用する必要があります。
- STOP_AT_MARK_NAME: トランザクション ログのインポートを停止するマーク付きトランザクション。これはオプションのフィールドで、値として任意の文字列を指定できます。値が
lsn:log-sequence-number
の形式の場合、トランザクション ログのインポートは、指定されたログシーケンス番号で停止します。
-
オプション: インポートされたデータベースをオンラインにするには、
--recovery-only
フラグを使用します。このステップは、データベースがRESTORING
状態の場合にのみ行ってください。gcloud sql import bak INSTANCE_NAME \ --database=DATABASE_NAME --recovery-only
- 以前に設定した IAM 権限を保持する必要がない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
REST v1
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
リクエストのパラメータの一覧については、instances:import ページをご覧ください。 -
noRecovery
を使用してフル バックアップをインポートします。フル バックアップのインポート後、データベースがRESTORING
状態であることを確認します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- PATH_TO_BAK_FILE: BAK ファイルへのパス。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- オプション: 差分バックアップをインポートします。
- トランザクション ログのバックアップをインポートします。
データをリクエストする前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- PATH_TO_TLOG_FILE: トランザクション ログ ファイルへのパス。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
- STOP_AT_TIMESTAMP: トランザクション ログのインポートを停止するタイムスタンプ。これはオプションのフィールドです。値には RFC 3339 形式を使用する必要があります。
- STOP_AT_MARK_NAME: トランザクション ログのインポートを停止するマーク付きトランザクション。これはオプションのフィールドで、値として任意の文字列を指定できます。値が
lsn:log-sequence-number
の形式の場合、トランザクション ログのインポートは、指定されたログシーケンス番号で停止します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_TLOG_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "bakType": "TLOG", "stopAt": STOP_AT_TIMESTAMP, "stopAtMark": STOP_AT_MARK_NAME, "noRecovery": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
すべてのトランザクション ログのバックアップをインポートするまで、このステップを繰り返します。 オプション:
recoveryOnly
を使用して、インポートしたデータベースをオンラインにします。このステップは、データベースがRESTORING
状態の場合にのみ行ってください。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_BAK_FILE: BAK ファイルへのパス
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
REST v1beta4
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 -
noRecovery
を使用してフル バックアップをインポートします。フル バックアップのインポート後、データベースがRESTORING
状態であることを確認します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT-ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- PATH_TO_BAK_FILE: BAK ファイルへのパス。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "noRecovery": true, "bakType": "FULL", } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- オプション: 差分バックアップをインポートします。
- トランザクション ログのバックアップをインポートします。ここで、
stopAt
とstopAtMark
はオプション フィールドです。データをリクエストする前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- INSTANCE_ID: インスタンス ID。
- BUCKET_NAME: Cloud Storage バケット名。
- PATH_TO_BAK_FILE: BAK ファイルへのパス。
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前。
- STOP_AT_TIMESTAMP: トランザクション ログのインポートを停止するタイムスタンプ。これはオプションのフィールドです。値には RFC 3339 形式を使用する必要があります。
- STOP_AT_MARK_NAME: トランザクション ログのインポートを停止するマーク付きトランザクション。これはオプションのフィールドで、値として任意の文字列を指定できます。値が
lsn:log-sequence-number
の形式の場合、トランザクション ログのインポートは、指定されたログシーケンス番号で停止します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "bakType": "TLOG", "stopAt": STOP_AT_TIMESTAMP, "stopAtMark":STOP_AT_MARK_NAME, "noRecovery": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
すべてのトランザクション ログのバックアップをインポートするまで、このステップを繰り返します。 オプション:
recoveryOnly
を使用して、インポートしたデータベースをオンラインにします。このステップは、データベースがRESTORING
状態の場合にのみ行ってください。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- INSTANCE_ID: インスタンス ID
- BUCKET_NAME: Cloud Storage バケット名
- PATH_TO_BAK_FILE: BAK ファイルへのパス
- DATABASE_NAME: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://BUCKET_NAME/PATH_TO_BAK_FILE", "database": "DATABASE_NAME" "bakImportOptions": { "recoveryOnly": true, } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
- 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
ストライプ インポートを使用する
ストライプ インポートの利点は次のとおりです。
- オペレーション完了までに必要な時間の短縮
- 5 TB を超えるデータベースをインポート可能
ストライプ インポートを使用する場合のデメリットとしては、ストライプ セット内のすべてのファイルを(1 つのファイルではなく)Cloud Storage バケット内の同じフォルダにアップロードしてからインポートを行うことが挙げられます。
運用の計画
ほとんどのユースケースでは、ストライプ インポートによりパフォーマンスが向上し、デメリットはありません。ただし、特定のインスタンスからストライプ セットにバックアップできない場合や、データベースが 5 TB 未満の場合で、高速なパフォーマンスが重要でない場合は、ストライプ化されていないインポートを使用することをおすすめします。
ストライプ インポートの使用方法
gcloud
インポート用の Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- 必要な IAM ロールと権限を構成済みであることを確認してください。
- バケット内に新しいフォルダを作成します。
- データベースをインポートするには、(データベースの)ストライプ セットのファイルを新しいフォルダにアップロードします。すべてのファイルがフォルダにアップロードされており、フォルダに余分なファイルが含まれていないことを確認します。
- エクスポート元のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gcloud storage buckets add-iam-policy-binding
を使用して、バケットのサービス アカウントにstorage.objectViewer
IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。- フォルダからデータをインポートします。ストライプ化されていないインポートとの違いは次のとおりです。URI は単一ファイルではなく、ストライプ セットがアップロードされたフォルダの名前にリンクし、ユーザーは
--striped
パラメータを指定します。gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \ --database=DATABASE_NAME --striped
- 以前に設定した IAM 権限を保持する必要がない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
REST v1
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットが配置されているフォルダ(Cloud Storage バケット内)のパス
- database_name: Cloud SQL インスタンス内に作成するデータベースの名前
- true | false: ストライプ インポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "database": "database_name", "bakImportOptions": { "striped": true | false } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
リクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
REST v1beta4
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットが配置されているフォルダ(Cloud Storage バケット内)のパス
- database_name: Cloud SQL インスタンス内に作成するデータベースの名前
- true | false: ストライプ インポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "database": "database_name", "bakImportOptions": { "striped": true | false } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
このリクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
ERROR_RDBMS
などのエラーが発生した場合は、テーブルが存在することを確認してください。存在している場合は、バケットに対して正しい権限があることを確認します。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。