ファイルのエクスポートとインポートを並行して行う

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

始める前に

エクスポートまたはインポート オペレーションを開始する前に、次のことを行います。

  • データベースに十分な空き容量があることを確認します。
  • エクスポート オペレーションとインポート オペレーションでは、データベース リソースが使用されますが、インスタンスのプロビジョニングが不足していない限り、通常のデータベース オペレーションが妨げられることはありません。

  • データのエクスポートとインポートのベスト プラクティスに従います。
  • インポート オペレーションが完了したら、結果を確認します。

Cloud SQL for PostgreSQL から複数のファイルに並行してデータをエクスポートする

以降のセクションでは、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 に存在する複数のファイルから Cloud Storage に、データを並行してエクスポートできます。これを行うには、--jobs オプションを指定して pg_dump ユーティリティを使用します。

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

gcloud

データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の操作を行います。

  1. Cloud Storage バケットを作成します
  2. ファイルのエクスポート元となる Cloud SQL インスタンスのサービス アカウントを確認するために、gcloud sql instances describe コマンドを使用します。
    gcloud sql instances describe INSTANCE_NAME
    
  3. INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。

    出力で、serviceAccountEmailAddress フィールドに関連付けられた値を探します。

  4. サービス アカウントに storage.objectAdmin IAM ロールを付与するために、gsutil iam ユーティリティを使用します。IAM 権限の設定については、IAM 権限の使用をご覧ください。
  5. データを Cloud SQL から複数のファイルに並行してエクスポートするには、gcloud sql export sql コマンドを使用します。
    gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \
    --offload \
    --parallel \
    --threads=THREAD_NUMBER \
    --database=DATABASE_NAME \
    --table=TABLE_EXPRESSION
    

    次のように置き換えます。

    • INSTANCE_NAME: ファイルの並列エクスポート元となる Cloud SQL インスタンスの名前。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • BUCKET_PATH: エクスポート ファイルが保存されているバケットへのパス。
    • FOLDER_NAME: エクスポート ファイルが保存されているフォルダ。
    • THREAD_NUMBER: Cloud SQL がファイルを並列でエクスポートするために使用するスレッドの数。たとえば、3 つのファイルを同時に並行してエクスポートする場合は、このパラメータの値として 3 を指定します。
    • DATABASE_NAME: エクスポート元の Cloud SQL インスタンス内のデータベースの名前。データベースは 1 つだけ指定する必要があります。
    • TABLE_EXPRESSION: 指定したデータベースからエクスポートするテーブル。

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

    エクスポートが完了すると、pg_dump ディレクトリ形式で Cloud Storage バケット内のフォルダにファイルが存在するはずです。

  6. Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、取り消します。

REST v1

データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の操作を行います。

  1. Cloud Storage バケットを作成します。
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    次のように置き換えます。
    • PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • LOCATION_NAME: エクスポートするファイルを保存するバケットのロケーション。例: us-east1
    • BUCKET_NAME: 命名要件に基づくバケットの名前。例: my-bucket
  2. バケットに対する legacyBucketWriter IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。
  3. データを Cloud SQL から複数のファイルに並行してエクスポートします。

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

    • PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • INSTANCE_NAME: ファイルの並列エクスポート元となる Cloud SQL インスタンスの名前。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • BUCKET_PATH: エクスポート ファイルが保存されているバケットへのパス。
    • FOLDER_NAME: エクスポート ファイルが保存されているフォルダ。
    • DATABASE_NAME: エクスポート元の Cloud SQL インスタンス内のデータベースの名前。データベースは 1 つだけ指定する必要があります。
    • THREAD_NUMBER: Cloud SQL がファイルの並行エクスポートに使用するスレッド数。たとえば、3 つのファイルを同時に並行してエクスポートする場合は、このパラメータの値として 3 を指定します。

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

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

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlExportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

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

  4. エクスポートが完了すると、pg_dump ディレクトリ形式で Cloud Storage バケット内のフォルダにファイルが存在するはずです。

  5. Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、取り消します。
リクエストのパラメータの完全な一覧については、Cloud SQL Admin API ページをご覧ください。

REST v1beta4

データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の操作を行います。

  1. Cloud Storage バケットを作成します。
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    次のように置き換えます。
    • PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • LOCATION_NAME: エクスポートするファイルを保存するバケットのロケーション。例: us-east1
    • BUCKET_NAME: 命名要件に基づくバケットの名前。例: my-bucket
  2. バケットに対する storage.objectAdmin IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。
  3. データを Cloud SQL から複数のファイルに並行してエクスポートします。

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

    • PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • INSTANCE_NAME: ファイルの並列エクスポート元となる Cloud SQL インスタンスの名前。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • BUCKET_PATH: エクスポート ファイルが保存されているバケットへのパス。
    • FOLDER_NAME: エクスポート ファイルが保存されているフォルダ。
    • DATABASE_NAME: エクスポート元の Cloud SQL インスタンス内のデータベースの名前。データベースは 1 つだけ指定する必要があります。
    • THREAD_NUMBER: Cloud SQL がファイルの並行エクスポートに使用するスレッド数。たとえば、3 つのファイルを同時に並行してエクスポートする場合は、このパラメータの値として 3 を指定します。

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

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

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlExportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

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

  4. エクスポートが完了すると、pg_dump ディレクトリ形式で Cloud Storage バケット内のフォルダにファイルが存在するはずです。

  5. Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、取り消します。
リクエストのパラメータの完全な一覧については、Cloud SQL Admin API ページをご覧ください。

複数のファイルから Cloud SQL for PostgreSQL に並行してデータをインポートする

以降のセクションでは、複数のファイルから 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 にデータをインポートする

Cloud Storage にある複数のファイルからデータベースにデータを並行してインポートできます。これを行うには、--jobs オプションを指定して pg_restore ユーティリティを使用します。

gcloud

データを複数のファイルから Cloud SQL に並行してインポートするには、次の操作を行います。

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

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

  3. ファイルのインポート先の Cloud SQL インスタンスのサービス アカウントを確認するために、gcloud sql instances describe コマンドを使用します。
    gcloud sql instances describe INSTANCE_NAME
    
  4. INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。

    出力で、serviceAccountEmailAddress フィールドに関連付けられた値を探します。

  5. サービス アカウントに storage.objectAdmin IAM ロールを付与するために、gsutil iam ユーティリティを使用します。IAM 権限の設定については、IAM 権限の使用をご覧ください。
  6. データを複数のファイルから Cloud SQL に並行してインポートするには、gcloud sql import sql コマンドを使用します。
    gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \
    --offload \
    --parallel \
    --threads=THREAD_NUMBER \
    --database=DATABASE_NAME
    

    次のように置き換えます。

    • INSTANCE_NAME: ファイルの並列インポート先となる Cloud SQL インスタンスの名前。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • BUCKET_PATH: インポート ファイルが保存されているバケットへのパス。
    • FOLDER_NAME: インポート ファイルが保存されているフォルダ。
    • THREAD_NUMBER: Cloud SQL がファイルの並列インポートに使用するスレッドの数。たとえば、3 つのファイルを同時に並行してインポートする場合は、このパラメータの値として 3 を指定します。
    • DATABASE_NAME: インポート元の Cloud SQL インスタンス内のデータベースの名前。データベースは 1 つだけ指定する必要があります。

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

  7. Cloud SQL for PostgreSQL へのインポートに必要なロールと権限で設定した IAM 権限が必要ない場合は、gsutil iam を使用して削除します。

REST v1

データを複数のファイルから Cloud SQL に並行してインポートするには、次の操作を行います。

  1. Cloud Storage バケットを作成します。
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    次のように置き換えます。
    • PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • LOCATION_NAME: インポートするファイルを保存するバケットのロケーション。例: us-east1
    • BUCKET_NAME: 命名要件に基づくバケットの名前。例: my-bucket
  2. ファイルをバケットにアップロードします。

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

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

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

    • PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • INSTANCE_NAME: ファイルの並列インポート先となる Cloud SQL インスタンスの名前。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • BUCKET_PATH: インポート ファイルが保存されているバケットへのパス。
    • FOLDER_NAME: インポート ファイルが保存されているフォルダ。
    • DATABASE_NAME: インポート元の Cloud SQL インスタンス内のデータベースの名前。データベースは 1 つだけ指定する必要があります。
    • THREAD_NUMBER: Cloud SQL がファイルの並行インポートに使用するスレッド数。たとえば、3 つのファイルを同時に並行してインポートする場合は、このパラメータの値として 3 を指定します。

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

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

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlImportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

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

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

    リクエストのパラメータの完全な一覧については、Cloud SQL Admin API ページをご覧ください。
  5. Cloud SQL for PostgreSQL へのインポートに必要なロールと権限で設定した IAM 権限が必要ない場合は、gsutil iam を使用して削除します。

REST v1beta4

データを複数のファイルから Cloud SQL に並行してインポートするには、次の操作を行います。

  1. Cloud Storage バケットを作成します。
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    次のように置き換えます。
    • PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • LOCATION_NAME: インポートするファイルを保存するバケットのロケーション。例: us-east1
    • BUCKET_NAME: 命名要件に基づくバケットの名前。例: my-bucket
  2. ファイルをバケットにアップロードします。

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

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

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

    • PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
    • INSTANCE_NAME: ファイルの並列インポート元となる Cloud SQL インスタンスの名前。
    • BUCKET_NAME: Cloud Storage バケットの名前。
    • BUCKET_PATH: インポート ファイルが保存されているバケットへのパス。
    • FOLDER_NAME: インポート ファイルが保存されているフォルダ。
    • DATABASE_NAME: インポート元の Cloud SQL インスタンス内のデータベースの名前。データベースは 1 つだけ指定する必要があります。
    • THREAD_NUMBER: Cloud SQL がファイルの並行インポートに使用するスレッド数。たとえば、3 つのファイルを同時に並行してインポートする場合は、このパラメータの値として 3 を指定します。

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

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

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlImportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

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

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

    リクエストのパラメータの完全な一覧については、Cloud SQL Admin API ページをご覧ください。
  5. Cloud SQL for PostgreSQL へのインポートに必要なロールと権限で設定した IAM 権限が必要ない場合は、gsutil iam を使用して削除します。

制限事項

  • データを複数のファイルから並行してインポートまたはエクスポートする場合、指定したスレッドが多すぎると、Cloud SQL インスタンスが備えているメモリよりも多くのメモリを使用する可能性があります。この場合、内部エラー メッセージが表示されます。インスタンスのメモリ使用量を確認し、必要に応じてインスタンスのサイズを増やしてください。詳細については、インスタンスの設定についてをご覧ください。
  • エクスポートを実行する場合、databases フィールドや tables フィールドで、データベース名やテーブル名にカンマを使用することはサポートされていません。
  • 最初のダンプファイルのダウンロード用に十分なディスク容量があることを確認してください。容量が十分にない場合は、no space left on disk エラーが表示されます。
  • インスタンスに仮想 CPU(vCPU)が 1 つしかない場合、複数のファイルを並行してインポートやエクスポートすることはできません。インスタンスの vCPU の数は、インポートまたはエクスポートのオペレーションに使用するスレッド数より小さくすることはできません。また、スレッド数は 2 以上にする必要があります。
  • pg_dump ユーティリティは、エクスポートするテーブルをまとまりにできません。そのため、非常に大きなテーブルが 1 つある場合、エクスポート オペレーションの速度のボトルネックになる可能性があります。

次のステップ