このページでは、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 ダンプファイルにデータをエクスポートするには:
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [エクスポート] をクリックします。
- [ファイル形式] セクションで [SQL] をクリックして、SQL ダンプファイルを作成します。
- [エクスポートするデータ] セクションでプルダウン メニューを使用して、エクスポートするデータベースを選択します。
- [送信先] セクションで [BROWSE] を選択して、エクスポート先の Cloud Storage バケットまたはフォルダを検索します。
- [エクスポート] をクリックしてエクスポートを開始します。
- 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 \ --offloadexport sql
コマンドでは、トリガーとストアド プロシージャは含まれませんが、ビューは含まれます。トリガーまたはストアド プロシージャをエクスポートするには、pg_dump ツールを使用します。export sql
コマンドの使用方法については、sql export sql
コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
- エクスポート先のバケットを作成します。
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 ] } } }リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /export"PowerShell(Windows)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
レスポンス
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/
PROJECT_ID /instances/TARGET_INSTANCE_ID ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "OPERATION_ID ", "targetId": "INSTANCE_ID ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID ", "targetProject": "PROJECT_ID " } - 以前に設定した IAM のロールを保持する必要がない場合は、今すぐ削除してください。
- エクスポート先のバケットを作成します。
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 ] } } }リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /export"PowerShell(Windows)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /export" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
レスポンス
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/
PROJECT_ID /instances/TARGET_INSTANCE_ID ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "OPERATION_ID ", "targetId": "INSTANCE_ID ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID ", "targetProject": "PROJECT_ID " } - 以前に設定した 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 コマンドのシーケンスを記述したプレーン テキスト ファイルです。
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [インポート] をクリックします。
- [データのインポート元となるファイルを選択してください] セクションで、インポートに使用するバケットと SQL ダンプファイルのパスを入力するか、既存のファイルを参照します。
圧縮ファイル(
.gz
)または非圧縮ファイル(.sql
)ファイルをインポートできます。 - [形式] で [SQL] を選択します。
データをインポートするデータベースを選択します。
これにより Cloud SQL では、インポートに先立って
USE DATABASE
ステートメントが実行されます。インポートを実行するユーザーを指定する場合は、ユーザーを選択します。
インポート ファイルに、特定のユーザーで実行しなければならないステートメントが含まれている場合は、このフィールドを使用してユーザーを指定します。
- [インポート] をクリックしてインポートを開始します。
- 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
を使用して削除してください。
-
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 " } }リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /import"PowerShell(Windows)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
レスポンス
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/
project-id /instances/target-instance-id ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "operation-id ", "targetId": "instance-id ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ", "targetProject": "project-id " }別のユーザーがインポートするには、
リクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM の権限を保持する必要がない場合は、今すぐ削除してください。
-
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 " } }リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /import"PowerShell(Windows)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /import" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
レスポンス
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/
project-id /instances/target-instance-id ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "operation-id ", "targetId": "instance-id ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ", "targetProject": "project-id " }別のユーザーがインポートするには、
リクエストのパラメータの一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM の権限を保持する必要がない場合は、今すぐ削除してください。
次のステップ
- インポートとエクスポートの各オペレーションのステータスのチェック方法について学習する
- データのインポートとエクスポートのベスト プラクティスについて確認する
- Cloud Storage に関する詳細
- インポートとエクスポートの既知の問題