Cloud SQL にデータをインポートする

このページでは、データを Cloud SQL にインポートする方法を説明しています。データのインポートにおすすめの方法については、データのインポートとエクスポートにおすすめの方法をご覧ください。

SQL ダンプファイルを Cloud SQL にインポートする

始める前に

  • 正しいパラメータで、SQL ダンプファイルが作成されている必要があります。

    Cloud SQL にインポートできる SQL ダンプファイルの作成方法については、データのエクスポートをご覧ください。

  • インポートするデータベースは、Cloud SQL インスタンスにあらかじめ存在している必要があります。

    データベースの作成方法については、データベースを作成するをご覧ください。

SQL ダンプファイルをインポートする

SQL ダンプファイルを Cloud SQL インスタンスにインポートする手順は次のとおりです。

Console

  1. SQL ダンプファイルをまだ作成していない場合は、作成します。このとき、データのエクスポートの手順を使用して、ダンプファイルが確実に Cloud SQL で使用できるようにしておきます。

  2. Cloud Storage バケットをまだ作成していない場合は、作成します。

    バケットの作成方法については、ストレージ バケットの作成をご覧ください。

  3. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

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

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

  5. インスタンスを選択して [インスタンスの詳細] ページを開きます。
  6. ボタンバーで [インポート] をクリックします。
  7. アップロードしたバケットと SQL ダンプファイルのパスを入力します。または、[参照] をクリックしてこのパスを参照し、バケットの名前をダブルクリックして、ファイルを選択し、[選択] をクリックします。

    圧縮ファイル(.gz)と非圧縮ファイル(.sql)のどちらを使用してもかまいません。

  8. [形式] で [SQL] を選択します。
  9. データをインポートするデータベースを選択します。

    これにより Cloud SQL では、インポートに先立って USE DATABASE ステートメントが実行されます。

  10. インポートを実行する PostgreSQL ユーザーを指定する場合は、ユーザーを選択します。

    インポート ファイルに、特定の PostgreSQL ユーザーで実行しなければならないステートメントが含まれている場合は、このフィールドを使用してそのユーザーを指定します。

  11. [インポート] をクリックしてインポートを開始します。

gcloud

  1. SQL ダンプファイルをまだ作成していない場合は、作成します。このとき、データのエクスポートの手順を使用して、ダンプファイルが確実に Cloud SQL で使用できるようにしておきます。

  2. Cloud Storage バケットをまだ作成していない場合は、作成します。

    バケットの作成方法については、ストレージ バケットの作成をご覧ください。

  3. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  4. インポート先のインスタンスを記述します。
    gcloud sql instances describe [INSTANCE_NAME]
    
  5. serviceAccountEmailAddress フィールドをコピーします。
  6. サービス アカウントをバケットの ACL に書き込み権限で追加します。
    gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:W gs://[BUCKET_NAME]
    
  7. サービス アカウントをインポート ファイルに読み取り権限で追加します。
    gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:R gs://[BUCKET_NAME]/[IMPORT_FILE_NAME]
    
  8. データベースをインポートします。
    gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME] \
                                --database=[DATABASE_NAME]
    

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

    コマンドから「ERROR_RDBMS」のようなエラーが返された場合は、権限を確認してください。このエラーの原因は多くの場合、権限の問題にあります。

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

cURL

  1. SQL ダンプファイルをまだ作成していない場合は、作成します。このとき、データのエクスポートの手順を使用して、ダンプファイルが確実に Cloud SQL で使用できるようにしておきます。

  2. Cloud Storage バケットをまだ作成していない場合は、作成します。

    バケットの作成方法については、ストレージ バケットの作成をご覧ください。

  3. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  4. インスタンスに、バケットへの書き込み権限とファイルへの読み取りアクセス権を与えます。

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

  5. ダンプファイルをインポートします。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"importContext":
                    {"fileType": "SQL",
                     "uri": "gs://[BUCKET_NAME]/[PATH_TO_DUMP_FILE]",
                     "database": "[DATABASE_NAME]" }}' \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/import
    

    別のユーザーがインポートするには、importContext.importUser プロパティを指定します。

    このリクエストのパラメータの完全な一覧については、インスタンス: インポートのページをご覧ください。
  6. 以前に設定した ACL によって提供されるアクセス権を保持する必要がない場合は、この時点で削除します。

CSV ファイルを Cloud SQL にインポートする

始める前に

  • インポート先のデータベースとテーブルが、Cloud SQL インスタンス上に存在している必要があります。データベースの作成方法については、データベースを作成するをご覧ください。テーブルを作成するには、psql クライアントの CREATE TABLE SQL ステートメントを使用します。

  • CSV ファイルは、以下の CSV ファイル形式の要件に従う必要があります。

CSV ファイル形式の要件

CSV ファイルは、データの行ごとに 1 行を使用し、カンマ区切りのフィールドを持つ必要があります。

Cloud SQL 用にフォーマットされた CSV ファイルにエクスポートする手順については、CSV ファイルにデータをエクスポートするをご覧ください。

CSV ファイルをインポートする

CSV ファイルを使用して Cloud SQL インスタンスにデータをインポートする手順は次のとおりです。

Console

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

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

  2. インスタンスを選択して [インスタンスの詳細] ページを開きます。
  3. ボタンバーで [インポート] をクリックします。
  4. Cloud SQL インスタンスにインポートするためにアップロードした CSV ファイルを選択します。
  5. [形式] で [CSV] を選択します。
  6. CSV ファイルをインポートする Cloud SQL インスタンスで [データベース] と [テーブル] を指定します。
  7. オプションで、インポートを行うユーザーを指定できます。
  8. [インポート] をクリックしてインポートを開始します。

gcloud

  1. インポート用のバケットを作成します。

    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

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

  2. CSV ファイルをバケットにアップロードします。
  3. エクスポート元のインスタンスを記述します。
    gcloud sql instances describe [INSTANCE_NAME]
    
  4. serviceAccountEmailAddress フィールドをコピーします。
  5. サービス アカウントをバケットの ACL に書き込み権限で追加します。
    gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:W gs://[BUCKET_NAME]
    
  6. サービス アカウントをインポート ファイルに読み取り権限で追加します。
    gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:R gs://[BUCKET_NAME]/[IMPORT_FILE_NAME]
    
  7. ファイルをインポートします。
    gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                --database=[DATABASE_NAME] --table=[TABLE_NAME]
    

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

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

cURL

  1. Cloud Storage バケットをまだ作成していない場合は、作成します。

    バケットの作成方法については、ストレージ バケットの作成をご覧ください。

  2. ファイルをバケットにアップロードします。

    ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. バケットへの読み取り権限をインスタンスに与えます。

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

  4. ファイルをインポートします。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"importContext":
                      {"fileType": "CSV",
                       "uri": "gs://<BUCKET_NAME>/<PATH_TO_DUMP_FILE>",
                       "database": "<DATABASE_NAME>",
                       "csvImportOptions":
                            {"table": "<TABLE_NAME>"}}}' \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/import
    

    別のユーザーがインポートするには、importContext.importUser プロパティを指定します。

    このリクエストのパラメータの完全な一覧については、インスタンス: インポートのページをご覧ください。
  5. 以前に設定した ACL によって提供されるアクセス権を保持する必要がない場合は、ACL を削除します。

ERROR_RDBMS のようなエラーが発生した場合、テーブルが存在することを確認してください。存在している場合は、バケットに対して正しい権限があることを確認します。Cloud Storage でのアクセス制御の構成の詳細については、アクセス制御リストの作成と管理をご覧ください。

次のステップ