データのエクスポート

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

Cloud SQL から Cloud Storage にデータをエクスポートできます。エクスポートした後、Cloud Storage からローカル環境にデータをダウンロードすれば、そのデータにローカルでアクセスできるようになります。

Cloud Storage にデータをエクスポートするには、インスタンスのサービス アカウントに、プロジェクトで設定された legacyBucketWriter Cloud IAM ロールが必要です。詳細については、Cloud Storage 用 Cloud Identity and Access Management を参照してください。

CSV ファイルをエクスポートできます。また、SQL ダンプファイルをエクスポートして、別の SQL データベースにエクスポートすることもできます。

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

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

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

Cloud SQL で管理されていないデータベースをエクスポートする場合は、pg_dump を手動で実行できます。ただし、Cloud SQL にデータをインポートする場合は、外部データベース サーバーからのデータのエクスポートの手順に従ってください。

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

Console

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

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

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

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. gsutil iam を使用して、バケットのサービス アカウントに legacyBucketWriter Cloud IAM のロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  5. データベースをエクスポートします。
          gcloud sql export sql [INSTANCE_NAME] gs://[BUCKET_NAME]/sqldumpfile.gz \
                                      --database=[DATABASE_NAME]
          

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

  6. 以前に設定した Cloud IAM のロールを保持する必要がない場合は、今すぐ削除してください。

REST

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

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

  2. インスタンスにバケットに対する legacyBucketWriter Cloud IAM のロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  3. データベースをエクスポートします。

    以下のリクエストのデータを使用する前に、次のように置き換えます。

    • 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://www.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_1", "database_name_2"]
            }
        }
        

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  4. 以前に設定した Cloud IAM のロールを保持する必要がない場合は、今すぐ削除してください。
このリクエストのパラメータの一覧については、instances:export ページをご覧ください。

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

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

  • --no-owner

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

  • --format=plain

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

  • --no-acl

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

また、次のものをすべて削除する必要があります。

  • 拡張関連のステートメント(Cloud SQL がその拡張機能をサポートしていない場合)。サポートされている拡張機能のリストについては、PostgreSQL の拡張機能をご覧ください。
  • plpgsql を参照する CREATE EXTENSION または DROP EXTENSION ステートメント。この拡張機能は、Cloud SQL Postgres インスタンスにプリインストールされています。
  • COMMENT ON EXTENSION ステートメント。

コマンドラインから 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 ダンプファイル内のすべての拡張ステートメントがコメントアウトされます。

データベースの設定で指定されているデフォルトのエンコードがデータに適していることを確認します。必要に応じて、--encoding フラグを使用してデフォルトをオーバーライドできます。

CSV ファイルにデータをエクスポートする

他のツールや環境で使用可能な CSV 形式でデータをエクスポートできます。エクスポートはデータベース レベルで行われます。CSV をエクスポートするときに、エクスポートするスキーマを指定できます。データベース レベルのスキーマはすべてエクスポート可能です。

MySQL インスタンスから作成された CSV ファイルを PostgreSQL インスタンスまたは SQL Server インスタンスにインポートすることはできません。

Console

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

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

  2. インスタンスをクリックして、インスタンスの概要ページを開きます。
  3. [エクスポート] をクリックします。
  4. [Cloud Storage のエクスポート先] で、エクスポート先の Cloud Storage バケットかフォルダを選択します。
  5. [名前] フィールドにエクスポート ファイルの名前を入力し、[選択] をクリックします。

    ファイル拡張子 .gz を使用して、エクスポート ファイルを圧縮します。

  6. [形式] を [CSV] に設定します。
  7. エクスポート元のデータベースを選択します。
  8. SQL クエリを入力して、エクスポートするデータを指定します。

    たとえば、guestbook データベースの entries テーブルの内容全体をエクスポートするには、「SELECT * FROM guestbook.entries;」と入力します。指定したデータベース内のテーブルをクエリで指定する必要があります。データベース全体を CSV 形式でエクスポートすることはできません。

  9. [エクスポート] をクリックしてエクスポートを開始します。

gcloud

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

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

  2. エクスポート元のインスタンスを記述します。
        gcloud sql instances describe [INSTANCE_NAME]
        
  3. gsutil iam を使用して、バケットのサービス アカウントに legacyBucketWriter Cloud IAM のロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  4. データベースをエクスポートします。
        gcloud sql export csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                    --database=[DATABASE_NAME] --query=[SELECT_QUERY]
        

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

  5. 以前に設定した Cloud IAM の権限を保持する必要がない場合は、今すぐ削除してください。

REST

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

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

  2. インスタンスにバケットに対する legacyBucketWriter Cloud IAM のロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  3. データベースをエクスポートします。

    以下のリクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • bucket_name: Cloud Storage バケット名
    • path_to_csv_file: CSV ファイルへのパス
    • database_name: Cloud SQL インスタンス内のデータベースの名前
    • select_query: エクスポートする SQL クエリ

    HTTP メソッドと URL:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    JSON 本文のリクエスト

        {
         "exportContext":
           {
              "fileType": "CSV",
              "uri": "gs://bucket_name/path_to_csv_file",
              "databases": ["database_name"],
              "csvExportOptions":
               {
                   "selectQuery":"select_query"
               }
           }
        }
        

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

    databases プロパティでデータベースを 1 つだけ指定する必要があります。select クエリでデータベースを指定する場合は、同じデータベースを使用する必要があります。

  4. 以前に設定した Cloud IAM の権限を保持する必要がない場合は、今すぐ削除してください。
このリクエストのパラメータの一覧については、instances:export ページをご覧ください。

CSV エクスポートでは、標準の CSV 出力が作成されます。標準以外の CSV 形式が必要な場合は、psql クライアントで次のステートメントを使用します。

  \copy [table_name] TO '[csv_file_name].csv' WITH
          (FORMAT csv, ESCAPE '[escape_character]', QUOTE '[quote_character]',
          DELIMITER '[delimiter_character]', ENCODING 'UTF8', NULL '[null_marker_string]');
    
基盤となる REST API リクエストがこのタスクでどのように作成されるかについては、instances:export ページの API Explorer をご覧ください。

次のステップ