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

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

始める前に

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

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

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

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

以降のセクションでは、データを Cloud SQL for MySQL から複数のファイルに並行してエクスポートする方法について説明します。

データを Cloud SQL for MySQL から複数のファイルに並行してエクスポートするために必要なロールと権限

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 へ並行してエクスポートできます。これを行うには、dumpInstance ユーティリティを使用します。

Cloud Storage に保存されたファイルを別の Cloud SQL データベースにインポートできます。ローカルでファイル内のデータにアクセスする場合は、そのデータを Cloud Storage からローカル環境にダウンロードします。

ファイルに DEFINER 句(ビュー、トリガー、stored_procedures など)が含まれている場合、これらのステートメントが実行される順序によっては、これらのファイルを使用したインポートが失敗する可能性があります。Cloud SQL での DEFINER の使用方法と回避策をご覧ください。

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 インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをエクスポートします。
    • TABLE_EXPRESSION: 指定したデータベースからエクスポートするテーブル。

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

    エクスポートが完了すると、Cloud Storage バケット内のフォルダには MySQL Shell ダンプ形式のファイルが作成されているはずです。

  6. Cloud SQL for MySQL からのエクスポートに必要なロールと権限で設定した 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 インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをエクスポートします。
    • 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. エクスポートが完了すると、Cloud Storage バケット内のフォルダには MySQL Shell ダンプ形式のファイルが作成されているはずです。

  5. Cloud SQL for MySQL からのエクスポートに必要なロールと権限で設定した 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 インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをエクスポートします。
    • 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. エクスポートが完了すると、Cloud Storage バケット内のフォルダには MySQL Shell ダンプ形式のファイルが作成されているはずです。

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

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

以降のセクションでは、データを複数のファイルから Cloud SQL for MySQL に並行してインポートする方法について説明します。

データを複数のファイルから Cloud SQL for MySQL に並行してインポートするために必要なロールと権限

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

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

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

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

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

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

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 インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをインポートします。

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

  7. Cloud SQL for MySQL へのインポートに必要なロールと権限で設定した 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 インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをインポートします。
    • 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 レスポンスが返されます。

    リクエストのパラメータの一覧については、Cloud SQL Admin API ページをご覧ください。
  5. Cloud SQL for MySQL へのインポートに必要なロールと権限で設定した 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 インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをインポートします。
    • 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 レスポンスが返されます。

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

制限事項

  • データを複数のファイルから並行してインポートまたはエクスポートする場合、指定したスレッドが多すぎると、Cloud SQL インスタンスが備えているメモリよりも多くのメモリを使用する可能性があります。この場合、内部エラー メッセージが表示されます。インスタンスのメモリ使用量を確認し、必要に応じてインスタンスのサイズを増やしてください。詳細については、インスタンスの設定についてをご覧ください。
  • エクスポートを実行する場合、databases フィールドや tables フィールドで、データベース名やテーブル名にカンマを使用することはサポートされていません。
  • 最初のダンプファイルのダウンロード用に十分なディスク容量があることを確認してください。容量が十分にない場合は、no space left on disk エラーが表示されます。
  • インスタンスに仮想 CPU(vCPU)が 1 つしかない場合、複数のファイルを並行してインポートやエクスポートすることはできません。インスタンスの vCPU の数は、インポートやエクスポートのオペレーションに使用するスレッド数より小さくすることはできません。また、スレッド数は 2 以上にする必要があります。
  • エクスポート オペレーションの際、データ定義言語(DDL)ステートメント(CREATEDROPALTER など)を記述すると、オペレーションが失敗する可能性や、エクスポートされたデータがポイントインタイム リカバリ スナップショットと一致しなくなる可能性があります。
  • インポート オペレーションが失敗した場合、部分的にインポートされたデータが残っている可能性があります。DDL ステートメントの場合、MySQL は自動的に commit します。このような場合は、データを再度インポートする前に、部分的にインポートされたデータをクリーンアップしてください。

次のステップ