このページでは、Cloud SQL インスタンスで SQL ダンプファイルを使用してデータのエクスポートとインポートを行う方法について説明します。
始める前に
エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。
ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。
インポート オペレーションが完了したら、結果を確認します。
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 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
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [エクスポート] をクリックします。
- [ファイル形式] セクションで [SQL] をクリックして、SQL ダンプファイルを作成します。
- [エクスポートするデータ] セクションでプルダウン メニューを使用して、エクスポートするデータベースを選択します。
- [送信先] セクションで [BROWSE] を選択して、エクスポート先の Cloud Storage バケットまたはフォルダを検索します。
- [エクスポート] をクリックしてエクスポートを開始します。
gcloud
- Cloud Storage バケットを作成します。
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。- データベースを 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
コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート先のバケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- 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 レスポンスが返されます。
- 以前に設定した IAM のロールを保持する必要がない場合は、今すぐ削除してください。
REST v1beta4
- エクスポート先のバケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
storage.objectAdmin
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- 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 レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
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 に SQL ダンプファイルをインポートする
SQL ファイルは、SQL コマンドのシーケンスを記述したプレーン テキスト ファイルです。
Console
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [インポート] をクリックします。
- [データのインポート元となるファイルを選択してください] セクションで、インポートに使用するバケットと SQL ダンプファイルのパスを入力するか、既存のファイルを参照します。
圧縮ファイル(
.gz
)または非圧縮ファイル(.sql
)ファイルをインポートできます。 - [形式] で [SQL] を選択します。
データをインポートするデータベースを選択します。
これにより Cloud SQL では、インポートに先立って
USE DATABASE
ステートメントが実行されます。インポートを実行するユーザーを指定する場合は、ユーザーを選択します。
インポート ファイルに、特定のユーザーで実行しなければならないステートメントが含まれている場合は、このフィールドを使用してユーザーを指定します。
- [インポート] をクリックしてインポートを開始します。
gcloud
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インポート先のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gcloud storage buckets add-iam-policy-binding
を使用して、バケットのサービス アカウントにstorage.objectAdmin
IAM ロールを付与します。 IAM 権限の設定については、IAM 権限の使用をご覧ください。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE-ACCOUNT \ --role=roles/storage.objectAdmin
- データベースをインポートします。
gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \ --database=DATABASE_NAME
import sql
コマンドの使用方法については、sql import sql
コマンドのリファレンス ページをご覧ください。コマンドから「
ERROR_RDBMS
」のようなエラーが返された場合は、権限を確認してください。このエラーの原因は多くの場合、権限の問題にあります。 - 以前に設定した IAM の権限を保持する必要がない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除してください。
REST v1
-
SQL ダンプファイルを作成します。リンク先の手順では、ダンプファイルに Cloud SQL との互換性を持たせるためのフラグを設定します。
- オンプレミスの PostgreSQL サーバーからデータをインポートする場合:
- pg_dump を使用してデータをエクスポートするの手順で SQL ダンプファイルを作成します。
- バケットの作成の手順で、Cloud Storage にバケットを作成します。
- オブジェクトのアップロードの手順で、SQL ダンプファイルを Cloud Storage バケットにアップロードします。
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- バケットに対する
legacyBucketWriter
とobjectViewer
の IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ダンプファイルをインポートします。
データをリクエストする前に、次のように置き換えます。
- 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 レスポンスが返されます。
別のユーザーがインポートするには、
リクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM の権限を保持する必要がない場合は、今すぐ削除してください。
REST v1beta4
-
SQL ダンプファイルを作成します。リンク先の手順では、ダンプファイルに Cloud SQL との互換性を持たせるためのフラグを設定します。
- オンプレミスの PostgreSQL サーバーからデータをインポートする場合:
- pg_dump を使用してデータをエクスポートするの手順で SQL ダンプファイルを作成します。
- バケットの作成の手順で、Cloud Storage にバケットを作成します。
- オブジェクトのアップロードの手順で、SQL ダンプファイルを Cloud Storage バケットにアップロードします。
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ダンプファイルをインポートします。
データをリクエストする前に、次のように置き換えます。
- 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 レスポンスが返されます。
別のユーザーがインポートするには、
リクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM の権限を保持する必要がない場合は、今すぐ削除してください。
次のステップ
- インポートとエクスポートの各オペレーションのステータスのチェック方法について学習する
- データのインポートとエクスポートのベスト プラクティスについて確認する
- Cloud Storage に関する詳細
- インポートとエクスポートの既知の問題