データのエクスポート

このページでは、Cloud SQL インスタンスから、または Cloud SQL で管理されていないデータベース サーバーからデータをエクスポートする方法について説明します。

データのエクスポートのベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。

SQL ダンプファイルへのデータのエクスポート

GCP Console、gcloud コマンドライン ツール、または API から Cloud SQL を使用してエクスポートを実行する場合、pg_dump ユーティリティを使用します。このとき、生成されるエクスポート ファイルを Cloud SQL に確実に再インポートできようにするオプションを指定します。

Cloud SQL で管理されていないデータベースをエクスポートする場合、手動で pg_dump を実行することもできます。ただし、Cloud SQL にデータをインポートする場合、外部データベース サーバーからのデータのエクスポートに記載されている手順に従わなければなりません。

Cloud SQL を使用したデータのエクスポート

Console

  1. Google Cloud Platform Console で [Cloud SQL インスタンス] ページに移動します。

    [Cloud SQL インスタンス] ページに移動

  2. データのエクスポート元となるインスタンスをクリックし、インスタンスの詳細ページを開きます。
  3. ボタンバーで [エクスポート] をクリックします。
  4. [Cloud Storage ファイル] で、エクスポートする Cloud Storage バケットまたはフォルダを選択します。
  5. [名前] フィールドにエクスポート ファイルの名前を入力し、[選択] をクリックします。
  6. エクスポートするデータベースの名前を入力します。
  7. [エクスポート] をクリックしてエクスポートを開始します。

gcloud

ダンプファイルをインスタンスから Cloud Storage バケットへエクスポートするには、次を実行します。

  1. エクスポート先のバケットを作成します。
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。

  2. エクスポート元のインスタンスを記述します。
    gcloud sql instances describe [INSTANCE_NAME]
    
  3. serviceAccountEmailAddress フィールドをコピーします。
  4. サービス アカウントをバケットの ACL に書き込み権限で追加します。
    gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:W gs://[BUCKET_NAME]
    
  5. データベースをエクスポートします。
    gcloud sql export sql [INSTANCE_NAME] gs://[BUCKET_NAME]/sqldumpfile.gz \
                                --database=[DATABASE_NAME]
    

    エクスポート コマンドの使用方法について詳しくは、sql export sql コマンドのリファレンス ページをご覧ください。

  6. 以前に設定した ACL によって提供されるアクセス権を保持する必要がない場合は、ACL を削除します。
    gsutil acl ch -d [SERVICE_ACCOUNT_ADDRESS] gs://[BUCKET_NAME]
    

cURL

  1. エクスポート先のバケットを作成します。
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

    このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。

  2. バケットへの書き込み権限をインスタンスに与えます。

    ACL の設定については、ACL の設定をご覧ください。

  3. データベースをエクスポートします。
    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"exportContext":
                    {"fileType": "SQL",
                     "uri": "gs://<BUCKET_NAME>/<PATH_TO_DUMP_FILE>",
                     "databases": ["<DATABASE_NAME1>", "<DATABASE_NAME2>"] }}' \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/export
    
  4. 以前に設定した ACL によって提供されるアクセス権を保持する必要がない場合は、ACL を削除します。
このリクエストのパラメータの一覧については、instances:export のページをご覧ください。

外部管理データベース サーバーからのデータのエクスポート

Cloud SQL で管理されていないデータベースをエクスポートするには、次のフラグを指定して pg_dump ユーティリティを使用します。

  • --no-owner

    SQL ダンプファイルに所有権の変更コマンドを含めることはできません。

  • --format=plain

    Cloud SQL でサポートされているのはプレーン SQL 形式のみです。

  • --no-acl

    このフラグは、SUPERUSER ロールのメンバーシップを付与または取り消すステートメントがダンプに含まれている場合に必要です。

さらに、Cloud SQL でサポートされていない拡張機能のすべての拡張関連ステートメントも削除する必要があります。サポートされる拡張機能のリストについては、PostgreSQL の拡張機能をご覧ください。

コマンドラインから、pg_dump を実行します。

pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \
    | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql

sed 後処理により、SQL ダンプファイル内のすべての拡張ステートメントがコメントアウトされます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...