SQL ダンプファイルを使用したエクスポートとインポート

このページでは、Cloud SQL インスタンスで SQL ダンプファイルを使用してデータのエクスポートとインポートを行う方法について説明します。

始める前に

エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。

ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。

インポート オペレーションが完了したら、結果を確認します。

Cloud SQL for PostgreSQL からデータをエクスポートする

Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限

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

また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。

  • storage.objectAdmin Identity and Access Management(IAM)ロール
  • 次の権限を含むカスタムロール:
    • storage.objects.create
    • storage.objects.list(ファイルの並行エクスポートのみ)
    • storage.objects.delete(複数ファイルの並行エクスポートの場合のみ)

IAM ロールについては、Identity and Access Management をご覧ください。

Cloud SQL for PostgreSQL から SQL ダンプファイルにエクスポートする

Google Cloud コンソール、gcloud CLI、または API から Cloud SQL を使用してエクスポートを実行する場合、pg_dump ユーティリティを使用します。このとき、生成されるエクスポート ファイルを Cloud SQL に確実に再インポートできるようにするオプションを指定します。

ただし、Cloud SQL にデータをインポートする場合は、SQL ダンプファイルが Cloud SQL 用に正しくフォーマットされるように、外部データベース サーバーからのデータのエクスポートの手順に沿って処理してください。

Cloud SQL インスタンス上のデータベースから Cloud Storage バケットの SQL ダンプファイルにデータをエクスポートするには:

Console

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [エクスポート] をクリックします。
  4. [ファイル形式] セクションで [SQL] をクリックして、SQL ダンプファイルを作成します。
  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. データベースを Cloud Storage バケットにエクスポートします。
    gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \
    --database=DATABASE_NAME \
    --offload
      

    export sql コマンドでは、トリガーとストアド プロシージャは含まれませんが、ビューは含まれます。トリガーまたはストアド プロシージャをエクスポートするには、pg_dump ツールを使用します。

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

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

REST v1

  1. エクスポート先のバケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_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):

    {
      "exportContext":
        {
           "fileType": "SQL",
           "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
           "databases": ["DATABASE_NAME"],
           "offload": TRUE | FALSE,
           "sqlExportOptions": {
            "clean": [TRUE|FALSE],
            "ifExists": [TRUE|FALSE]
           }
        }
     }
    

    リクエストを送信するには、次のいずれかのオプションを開きます。

    次のような JSON レスポンスが返されます。

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

REST v1beta4

  1. エクスポート先のバケットを作成します。
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_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):

    {
       "exportContext":
         {
            "fileType": "SQL",
            "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
            "databases": ["DATABASE_NAME"],
            "offload": TRUE | FALSE,
            "sqlExportOptions": {
             "clean": [TRUE|FALSE],
             "ifExists": [TRUE|FALSE]
            }
         }
      }
    

    リクエストを送信するには、次のいずれかのオプションを開きます。

    次のような JSON レスポンスが返されます。

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

Cloud SQL for PostgreSQL にデータをインポートする

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

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

また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。

  • storage.objectAdmin IAM ロール
  • 次の権限を含むカスタムロール:
    • storage.objects.get
    • storage.objects.list(ファイルの並行インポートの場合のみ)

IAM ロールについては、Identity and Access Management をご覧ください。

Cloud SQL for PostgreSQL に SQL ダンプファイルをインポートする

SQL ファイルは、SQL コマンドのシーケンスを記述したプレーン テキスト ファイルです。

Console

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [インポート] をクリックします。
  4. [データのインポート元となるファイルを選択してください] セクションで、インポートに使用するバケットと SQL ダンプファイルのパスを入力するか、既存のファイルを参照します。

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

  5. [形式] で [SQL] を選択します。
  6. データをインポートするデータベースを選択します。

    これにより Cloud SQL では、インポートに先立って USE DATABASE ステートメントが実行されます。

  7. インポートを実行するユーザーを指定する場合は、ユーザーを選択します。

    インポート ファイルに、特定のユーザーで実行しなければならないステートメントが含まれている場合は、このフィールドを使用してユーザーを指定します。

  8. [インポート] をクリックしてインポートを開始します。

gcloud

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

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

  3. インポート先のインスタンスを記述します。
    gcloud sql instances describe INSTANCE_NAME
  4. serviceAccountEmailAddress フィールドをコピーします。
  5. gcloud storage buckets add-iam-policy-binding を使用して、バケットのサービス アカウントに storage.objectAdmin IAM ロールを付与します。
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:SERVICE-ACCOUNT \
      --role=roles/storage.objectAdmin
      
    IAM 権限の設定については、IAM 権限の使用をご覧ください。
  6. データベースをインポートします。
    gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \
    --database=DATABASE_NAME

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

    コマンドから「ERROR_RDBMS」のようなエラーが返された場合は、権限を確認してください。このエラーの原因は多くの場合、権限の問題にあります。

  7. 以前に設定した IAM の権限を保持する必要がない場合は、gcloud storage buckets remove-iam-policy-binding を使用して削除してください。

REST v1

  1. SQL ダンプファイルを作成します。リンク先の手順では、ダンプファイルに Cloud SQL との互換性を持たせるためのフラグを設定します。

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

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

  4. バケットに対する legacyBucketWriterobjectViewerIAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。
  5. ダンプファイルをインポートします。

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • bucket_name: Cloud Storage バケット名
    • path_to_sql_file: SQL ファイルへのパス
    • database_name: Cloud SQL インスタンス内のデータベースの名前

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    リクエストの本文(JSON):

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

    リクエストを送信するには、次のいずれかのオプションを開きます。

    次のような JSON レスポンスが返されます。

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

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

REST v1beta4

  1. SQL ダンプファイルを作成します。リンク先の手順では、ダンプファイルに Cloud SQL との互換性を持たせるためのフラグを設定します。

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

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

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

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • bucket_name: Cloud Storage バケット名
    • path_to_sql_file: SQL ファイルへのパス
    • database_name: Cloud SQL インスタンス内のデータベースの名前

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    リクエストの本文(JSON):

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

    リクエストを送信するには、次のいずれかのオプションを開きます。

    次のような JSON レスポンスが返されます。

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

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

次のステップ