BAK ファイルとトランザクション ログファイルを使用したエクスポートとインポート

このページでは、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 インスタンスのサービス アカウントには、次のいずれかのロールが必要です。

  • 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 ファイルにデータをエクスポートする

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [エクスポート] をクリックします。
  4. [ファイル形式] セクションで [BAK] をクリックします。
  5. [エクスポートするデータ] セクションでプルダウン メニューを使用して、エクスポートするデータベースを選択します。
  6. [送信先] セクションで [BROWSE] を選択して、エクスポート先の Cloud Storage バケットまたはフォルダを検索します。
  7. [エクスポート] をクリックしてエクスポートを開始します。

gcloud

  1. Cloud Storage バケットを作成します
  2. エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、gcloud sql instances describe コマンドを実行します。出力で serviceAccountEmailAddress フィールドを探します。
    gcloud sql instances describe INSTANCE_NAME
      
  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. データベースをエクスポートします。
    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/FILENAME \
    --database=DATABASE_NAME
      

    gcloud sql export bak コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。

  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。

REST v1

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する legacyBucketWriter IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  3. データベースをエクスポートします。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  4. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
リクエストのパラメータの一覧については、instances:export ページをご覧ください。

REST v1beta4

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する storage.objectAdmin IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  3. データベースをエクスポートします。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  4. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
リクエストのパラメータの一覧については、instances:export ページをご覧ください。

差分データベース バックアップをエクスポートする

差分データベース バックアップをエクスポートする前に、差分ベースをエクスポートする必要があります。

ポイントインタイム リカバリやリードレプリカなどの他のサービスや機能では、フル バックアップ エクスポートと差分バックアップ エクスポートの間でフル バックアップをトリガーする場合は、フル バックアップ エクスポートを再度トリガーする必要があります。

次の例を考えてみましょう。

  1. 午前 7 時にフル バックアップ リクエストを発行します。
  2. ポイントインタイム リカバリを午前 9 時に有効にします。これにより、インスタンスのフル バックアップがトリガーされます。
  3. 午後 5 時に差分バックアップを作成しようとします。最後のフル バックアップがポイントインタイム リカバリによってトリガーされたため、このエクスポート リクエストは失敗し、エラー メッセージが表示されます。

Cloud SQL は、レプリカ インスタンスの --differential-base または --bak-type=DIFF を使用したデータベース エクスポート リクエストをサポートしていません。

gcloud

  1. Cloud Storage バケットを作成します。
  2. エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。 これを行うには、gcloud sql instances describe コマンドを実行します。出力で serviceAccountEmailAddress フィールドを探します。
    gcloud sql instances describe INSTANCE_NAME
      
  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. データベースを差分ベースとしてエクスポートします。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \
    --database=DATABASE_NAME --differential-base

    gcloud sql export bak コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。

  5. 差分バックアップをエクスポートします。

    gcloud sql export bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=DIFF
      

    gcloud sql export bak コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。

  6. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。

REST v1

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する legacyBucketWriter IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  3. データベースのフル バックアップを差分ベースとしてエクスポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  4. 差分バックアップをエクスポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
リクエストのパラメータの一覧については、instances:export ページをご覧ください。

REST v1beta4

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する storage.objectAdmin IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  3. データベースのフル バックアップを差分ベースとしてエクスポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  4. 差分バックアップをエクスポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
リクエストのパラメータの一覧については、instances:export ページをご覧ください。

トランザクション ログをエクスポートする

ポイントインタイム リカバリ(PITR)が有効になっており、ログが Cloud Storage に保存されている Cloud SQL Enterprise Plus エディション インスタンスのトランザクション ログをエクスポートできます。

gcloud

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。 これを行うには、gcloud sql instances describe コマンドを実行します。出力で serviceAccountEmailAddress フィールドを探します。
    gcloud sql instances describe INSTANCE_NAME
      
  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.Admin IAM ロールを付与します。IAM 権限の設定の詳細については、バケットでの IAM ポリシーの設定と管理をご覧ください。
  4. トランザクション ログをエクスポートします。

    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 コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。

  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。

REST

  1. Cloud Storage バケットを作成します。

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する storage.Admin IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、バケットでの IAM ポリシーの設定と管理をご覧ください。
  3. トランザクション ログをエクスポートします。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  4. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
リクエストのパラメータの全一覧については、instances.export ページをご覧ください。

ストライプ エクスポートを使用する

ストライプ エクスポートの利点は次のとおりです。

  • オペレーション完了までに必要な時間の短縮
  • 5 TB を超えるデータベースをエクスポート可能

ストライプ エクスポートを使用すると、1 つのファイルで構成されたバックアップではなく、複数のファイルに分割されるというデメリットがあります。このセットは「ストライプ セット」と呼ばれます。ストライプ化されたメディアセット(ストライプ セット)でデバイスをバックアップするをご覧ください。Cloud SQL では、単一のファイルを生成する代わりに、Cloud Storage の空のフォルダにエクスポートします。詳細については、ストライプ エクスポートの使用方法をご覧ください。

運用の計画

ストライプ エクスポートを使用すると、エクスポートのパフォーマンスが向上します。ただし、ユースケースで単一の出力ファイルが必要な場合、またはデータベースのサイズが 5 TB 未満の場合で、高速なパフォーマンスが重要でない場合は、ストライプ化されていないエクスポートを使用することをおすすめします。

ストライプ エクスポートを使用する場合は、ストライプの数を考慮してください。この値は、gcloud CLI コマンドまたは REST API 呼び出しで指定できます。ただし、パフォーマンスに最適なストライプ数が必要な場合や、数値がわからない場合は、数値を省略します。最適なストライプ数が自動的に設定されます。

Cloud SQL for SQL Server で現在サポートされているストライプの最大数は 64 です。

ストライプ エクスポートの使用方法

gcloud

  1. Cloud Storage バケットを作成します。
  2. エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、gcloud sql instances describe コマンドを実行します。出力で serviceAccountEmailAddress フィールドを探します。
    gcloud sql instances describe INSTANCE_NAME
      
  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. データベースをエクスポートするには、--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 コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。

  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。

REST v1

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する legacyBucketWriter IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  3. データベースをエクスポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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: 使用するストライプの数。指定すると、stripedtrue として暗黙的に指定されます。

    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 レスポンスが返されます。

  4. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
リクエストのパラメータの一覧については、instances:export ページをご覧ください。

REST v1beta4

  1. エクスポート用の Cloud Storage バケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. バケットに対する legacyBucketWriter IAM ロールをインスタンスに付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  3. データベースをエクスポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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: 使用するストライプの数。指定すると、stripedtrue として暗黙的に指定されます。

    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 レスポンスが返されます。

  4. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
リクエストのパラメータの一覧については、instances:export ページをご覧ください。

Cloud SQL for SQL Server にインポートする

Cloud SQL for SQL Server へのインポートに必要なロールと権限

Cloud Storage から Cloud SQL にデータをインポートするには、インポートを開始するユーザーに次のいずれかのロールが必要です。

また、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 インスタンスにデータをインポートするには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [インポート] をクリックします。
  4. [インポート元のファイルを選択する] フィールドに、インポートに使用するバケットと BAK ファイルのパスを入力します。

    圧縮ファイル(.gz)または非圧縮ファイルをインポートできます。

  5. [ファイル形式] セクションで [BAK] を選択します。

  6. [宛先] セクションで、BAK ファイルをインポートする Cloud SQL インスタンスのデータベースを指定します。
  7. インポートを開始するには、[インポート] をクリックします。

gcloud

  1. インポート用の Cloud Storage バケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。

  2. 必要なロールと権限を構成済みであることを確認してください。
  3. BAK ファイルからのデータをバケットにアップロードします。
  4. インポート先のインスタンスを記述します。
    gcloud sql instances describe INSTANCE_NAME
  5. serviceAccountEmailAddress フィールドをコピーします。
  6. gcloud storage buckets add-iam-policy-binding を使用して、バケットのサービス アカウントに storage.objectViewer IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  7. ファイルからデータをインポートします。
    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
  8. 以前に設定した IAM 権限を保持する必要がない場合は、gcloud storage buckets remove-iam-policy-binding を使用して削除します。

REST v1

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. ファイルからデータをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

    別のユーザーがインポートするには、importContext.importUser プロパティを指定します。

    リクエストのパラメータの一覧については、instances:import ページをご覧ください。
  5. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

REST v1beta4

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. ファイルからデータをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

    別のユーザーがインポートするには、importContext.importUser プロパティを指定します。

    このリクエストのパラメータの一覧については、instances:import ページをご覧ください。
  5. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

ERROR_RDBMS などのエラーが表示した場合は、BAK ファイルがバケットに存在し、バケットに対して正しい権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。

差分データベース バックアップをインポートする

差分データベース バックアップをインポートするには、フル バックアップをインポートする必要があります。フル バックアップをインポートした後、データベースが RESTORING 状態になっている必要があります。

Cloud SQL では、ポイントインタイム リカバリが有効になっているインスタンスにデータベースの差分バックアップをインポートすることはできません。これは、--no-recovery を使用したデータベース バックアップのインポートが、差分データベース バックアップのインポートの前提条件であるためです。また、データベースが RESTORING 状態の場合、インスタンスでポイントインタイム リカバリを有効にすることはできません。インポートに失敗した場合は、次のいずれかの方法でポイントインタイム リカバリを有効にします。

  • --recovery-only フラグを使用して、RESTORING 状態のデータベースをオンラインにします。

  • データベースを削除します。

差分データベース バックアップを使用して Cloud SQL インスタンスにデータをインポートするには、次の手順を行います。

gcloud

  1. インポート用の Cloud Storage バケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。

  2. 必要なロールと権限を構成済みであることを確認してください。
  3. BAK ファイルからのデータをバケットにアップロードします。
  4. インポート先のインスタンスを記述します。
    gcloud sql instances describe INSTANCE_NAME
  5. serviceAccountEmailAddress フィールドをコピーします。
  6. gcloud storage buckets add-iam-policy-binding を使用して、バケットのサービス アカウントに storage.objectViewer IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  7. --no-recovery を使用してフル バックアップをインポートします。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BASE_FILENAME \
    --database=DATABASE_NAME --bak-type=FULL --no-recovery
  8. 差分データベース バックアップをインポートします。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/DIFFERENTIAL_BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=DIFF --no-recovery
  9. インポートされたデータベースをオンラインにするには、--recovery-only フラグを使用します。このステップは省略可能です。データベースが RESTORING 状態の場合にのみ実行する必要があります。

    gcloud sql import bak INSTANCE_NAME \
    --database=DATABASE_NAME --recovery-only
  10. 以前に設定した IAM 権限を保持する必要がない場合は、gcloud storage buckets remove-iam-policy-binding を使用して削除します。

REST v1

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. 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 レスポンスが返されます。

  5. 差分データベース バックアップをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  6. 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 レスポンスが返されます。

  7. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

REST v1beta4

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. 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 レスポンスが返されます。

  5. 差分データベース バックアップをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  6. 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 レスポンスが返されます。

  7. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

ERROR_RDBMS などのエラーが表示した場合は、BAK ファイルがバケットに存在し、バケットに対して正しい権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。

トランザクション ログのバックアップをインポートする

トランザクション ログには、データベースのトランザクションと各トランザクションで行われた変更が記録されます。これにより、システム障害が発生した場合にデータベースの整合性を再確立できます。

トランザクション ログのバックアップを使用して Cloud SQL インスタンスにデータをインポートするには、次の手順を行います。

gcloud

  1. インポート用のオプション: Cloud Storage バケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
  2. バックアップ ファイルをバケットにアップロードします。
  3. インポート先のインスタンスを記述します。
    gcloud sql instances describe INSTANCE_NAME
  4. serviceAccountEmailAddress フィールドをコピーします。
  5. gcloud storage buckets add-iam-policy-binding を使用して、バケットのサービス アカウントに storage.objectViewer IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  6. --no-recovery パラメータを使用してフル バックアップをインポートします。フル バックアップのインポート後、データベースが RESTORING 状態であることを確認します。

    gcloud sql import bak INSTANCE_NAME gs://BUCKET_NAME/BACKUP_FILENAME \
    --database=DATABASE_NAME --bak-type=FULL --no-recovery
  7. オプション: 差分バックアップをインポートします。
  8. トランザクション ログのバックアップをインポートします。

    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 の形式の場合、トランザクション ログのインポートは、指定されたログシーケンス番号で停止します。
    すべてのトランザクション ログのバックアップをインポートするまで、このステップを繰り返します。
  9. オプション: インポートされたデータベースをオンラインにするには、--recovery-only フラグを使用します。このステップは、データベースが RESTORING 状態の場合にのみ行ってください。

    gcloud sql import bak INSTANCE_NAME \
    --database=DATABASE_NAME --recovery-only
  10. 以前に設定した IAM 権限を保持する必要がない場合は、gcloud storage buckets remove-iam-policy-binding を使用して削除します。

REST v1

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. リクエストのパラメータの一覧については、instances:import ページをご覧ください。
  5. 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 レスポンスが返されます。

  6. オプション: 差分バックアップをインポートします。
  7. トランザクション ログのバックアップをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

    すべてのトランザクション ログのバックアップをインポートするまで、このステップを繰り返します。
  8. オプション: 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 レスポンスが返されます。

  9. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

REST v1beta4

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. 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 レスポンスが返されます。

  5. オプション: 差分バックアップをインポートします。
  6. トランザクション ログのバックアップをインポートします。ここで、stopAtstopAtMark はオプション フィールドです。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

    すべてのトランザクション ログのバックアップをインポートするまで、このステップを繰り返します。
  7. オプション: 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 レスポンスが返されます。

  8. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

ストライプ インポートを使用する

ストライプ インポートの利点は次のとおりです。

  • オペレーション完了までに必要な時間の短縮
  • 5 TB を超えるデータベースをインポート可能

ストライプ インポートを使用する場合のデメリットとしては、ストライプ セット内のすべてのファイルを(1 つのファイルではなく)Cloud Storage バケット内の同じフォルダにアップロードしてからインポートを行うことが挙げられます。

運用の計画

ほとんどのユースケースでは、ストライプ インポートによりパフォーマンスが向上し、デメリットはありません。ただし、特定のインスタンスからストライプ セットにバックアップできない場合や、データベースが 5 TB 未満の場合で、高速なパフォーマンスが重要でない場合は、ストライプ化されていないインポートを使用することをおすすめします。

ストライプ インポートの使用方法

gcloud

  1. インポート用の Cloud Storage バケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。

  2. 必要な IAM ロールと権限を構成済みであることを確認してください。
  3. バケット内に新しいフォルダを作成します。
  4. データベースをインポートするには、(データベースの)ストライプ セットのファイルを新しいフォルダにアップロードします。すべてのファイルがフォルダにアップロードされており、フォルダに余分なファイルが含まれていないことを確認します。
  5. エクスポート元のインスタンスを記述します。
    gcloud sql instances describe INSTANCE_NAME
  6. serviceAccountEmailAddress フィールドをコピーします。
  7. gcloud storage buckets add-iam-policy-binding を使用して、バケットのサービス アカウントに storage.objectViewer IAM ロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  8. フォルダからデータをインポートします。ストライプ化されていないインポートとの違いは次のとおりです。URI は単一ファイルではなく、ストライプ セットがアップロードされたフォルダの名前にリンクし、ユーザーは --striped パラメータを指定します。
    gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \
    --database=DATABASE_NAME --striped
  9. 以前に設定した IAM 権限を保持する必要がない場合は、gcloud storage buckets remove-iam-policy-binding を使用して削除します。

REST v1

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. ファイルからデータをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

    別のユーザーがインポートするには、importContext.importUser プロパティを指定します。

    リクエストのパラメータの一覧については、instances:import ページをご覧ください。
  5. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

REST v1beta4

  1. Cloud Storage バケットを作成します
  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. インスタンスにバケットに対する storage.objectAdmin IAM のロールを付与します。IAM 権限の設定の詳細については、IAM 権限の使用をご覧ください。
  4. ファイルからデータをインポートします。

    データをリクエストする前に、次のように置き換えます。

    • 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 レスポンスが返されます。

    別のユーザーがインポートするには、importContext.importUser プロパティを指定します。

    このリクエストのパラメータの一覧については、instances:import ページをご覧ください。
  5. 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。

ERROR_RDBMS などのエラーが発生した場合は、テーブルが存在することを確認してください。存在している場合は、バケットに対して正しい権限があることを確認します。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。

次のステップ