このページでは、Cloud SQL インスタンスへのファイルのエクスポートとインポートを並行して行う方法について説明します。
始める前に
エクスポートまたはインポート オペレーションを開始する前に、次のことを行います。
- データベースに十分な空き容量があることを確認します。
- データのエクスポートとインポートのベスト プラクティスに従います。
- インポート オペレーションが完了したら、結果を確認します。
エクスポート オペレーションとインポート オペレーションでは、データベース リソースが使用されますが、インスタンスのプロビジョニングが不足していない限り、通常のデータベース オペレーションが妨げられることはありません。
Cloud SQL for PostgreSQL から複数のファイルに並行してデータをエクスポートする
以降のセクションでは、Cloud SQL for PostgreSQL から複数のファイルに並行してデータをエクスポートすることについての情報が含まれます。
Cloud SQL for PostgreSQL から複数のファイルに並行してデータをエクスポートするために必要なロールと権限
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
(複数ファイルの並行エクスポートの場合のみ)
IAM ロールについては、Identity and Access Management をご覧ください。
データを複数のファイルに並行してエクスポートする
Cloud SQL に存在する複数のファイルから Cloud Storage に、データを並行してエクスポートできます。これを行うには、--jobs
オプションを指定して pg_dump
ユーティリティを使用します。
Cloud SQL にデータをインポートする場合は、ファイルが Cloud SQL 用に正しくフォーマットされるように、外部データベース サーバーからのデータのエクスポートの手順に沿って処理してください。
gcloud
データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の操作を行います。
- Cloud Storage バケットを作成します。
- ファイルのエクスポート元となる Cloud SQL インスタンスのサービス アカウントを確認するために、
gcloud sql instances describe
コマンドを使用します。gcloud sql instances describe INSTANCE_NAME
- サービス アカウントに
storage.objectAdmin
IAM ロールを付与するために、gcloud storage buckets add-iam-policy-binding
コマンドを使用します。IAM 権限の設定については、IAM 権限を使用するをご覧ください。 - データを 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 バケット内のフォルダにファイルが存在するはずです。 - Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、取り消します。
INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。
出力で、serviceAccountEmailAddress
フィールドに関連付けられた値を探します。
REST v1
データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: エクスポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 -
データを 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 レスポンスが返されます。
- Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、取り消します。
エクスポートが完了すると、pg_dump
ディレクトリ形式で Cloud Storage バケット内のフォルダにファイルが存在するはずです。
REST v1beta4
データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: エクスポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
- バケットに対する
storage.objectAdmin
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 -
データを 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 レスポンスが返されます。
- Cloud SQL for PostgreSQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、取り消します。
エクスポートが完了すると、pg_dump
ディレクトリ形式で Cloud Storage バケット内のフォルダにファイルが存在するはずです。
複数のファイルから Cloud SQL for PostgreSQL に並行してデータをインポートする
以降のセクションでは、複数のファイルから Cloud SQL for PostgreSQL に並行してデータをインポートすることについての情報が含まれます。
複数のファイルから Cloud SQL for PostgreSQL に並行してデータをインポートするために必要なロールと権限
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 をご覧ください。
Cloud SQL for PostgreSQL にデータをインポートする
Cloud Storage にある複数のファイルからデータベースにデータを並行してインポートできます。これを行うには、--jobs
オプションを指定して pg_restore
ユーティリティを使用します。
gcloud
データを複数のファイルから Cloud SQL に並行してインポートするには、次の操作を行います。
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、ファイルからオブジェクトをアップロードするをご覧ください。
- ファイルのインポート先の Cloud SQL インスタンスのサービス アカウントを確認するために、
gcloud sql instances describe
コマンドを使用します。gcloud sql instances describe INSTANCE_NAME
- サービス アカウントに
storage.objectAdmin
IAM ロールを付与するために、gcloud storage buckets add-iam-policy-binding
ユーティリティを使用します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データを複数のファイルから 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
のようなエラーが返された場合は、権限を確認してください。このエラーの原因は多くの場合、権限の問題にあります。 - Cloud SQL for PostgreSQL へのインポートに必要なロールと権限で設定した IAM 権限が必要ない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。
出力で、serviceAccountEmailAddress
フィールドに関連付けられた値を探します。
REST v1
データを複数のファイルから Cloud SQL に並行してインポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: インポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、ファイルからオブジェクトをアップロードするをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 データを複数のファイルから 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], "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
リクエストのパラメータの完全な一覧については、Cloud SQL Admin API ページをご覧ください。importContext.importUser
プロパティを指定します。- Cloud SQL for PostgreSQL へのインポートに必要なロールと権限で設定した IAM 権限が必要ない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
REST v1beta4
データを複数のファイルから Cloud SQL に並行してインポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: インポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、ファイルからオブジェクトをアップロードするをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 データを複数のファイルから 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], "clean": [TRUE|FALSE], "ifExists": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
リクエストのパラメータの完全な一覧については、Cloud SQL Admin API ページをご覧ください。importContext.importUser
プロパティを指定します。- Cloud SQL for PostgreSQL へのインポートに必要なロールと権限で設定した IAM 権限が必要ない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
制限事項
- データを複数のファイルから並行してインポートまたはエクスポートする場合、指定したスレッドが多すぎると、Cloud SQL インスタンスが備えているメモリよりも多くのメモリを使用する可能性があります。この場合、内部エラー メッセージが表示されます。インスタンスのメモリ使用量を確認し、必要に応じてインスタンスのサイズを増やしてください。詳細については、インスタンスの設定についてをご覧ください。
- エクスポートを実行する場合、
databases
フィールドやtables
フィールドで、データベース名やテーブル名にカンマを使用することはサポートされていません。 - 最初のダンプファイルのダウンロード用に十分なディスク容量があることを確認してください。容量が十分にない場合は、
no space left on disk
エラーが表示されます。 - インスタンスに仮想 CPU(vCPU)が 1 つしかない場合、複数のファイルを並行してインポートやエクスポートすることはできません。インスタンスの vCPU の数は、インポートまたはエクスポートのオペレーションに使用するスレッド数より小さくすることはできません。また、スレッド数は 2 以上にする必要があります。
pg_dump
ユーティリティは、エクスポートするテーブルをまとまりにできません。そのため、非常に大きなテーブルが 1 つある場合、エクスポート オペレーションの速度のボトルネックになる可能性があります。
次のステップ
- インポートとエクスポートの各オペレーションのステータスのチェック方法を確認する。
- データのインポートとエクスポートをキャンセルする方法を確認する。
- データのインポートとエクスポートのベスト プラクティスについて確認する。
- インポートとエクスポートに関する既知の問題について確認する。