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

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

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

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

始める前に

  • システム ユーザー(root@localhost など)をトリガー、ビュー、ストアド プロシージャの DEFINER として使用しないでください。Cloud SQL ではこのユーザーにアクセスできません。

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

  • インポート先のデータベースが、Cloud SQL インスタンス上に存在し、空である必要があります。既存のデータを上書きすることはできません。

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

SQL モード設定は、Cloud SQL で SQL クエリをどのように解釈するかに影響します。たとえば、[Strict SQL] を有効にせずにデータベースからエクスポートし、Cloud SQL にインポートしようとすると、インポートが失敗することがあります。おすすめの方法は、エクスポートで使用したのと同じ SQL モードをインポートで使用することです。

互換性のために、ソース データベースとターゲット データベースの両方で SQL モードを確認します。Strict SQL モードを有効にするフラグに特に注意してください。Strict SQL がデータベースで設定されていない場合は、Cloud SQL で削除することをおすすめします。Strict SQL を削除する場合は、別のフラグを設定する必要があります。

Cloud SQL インスタンスで目的のモードが設定されていることを確認するには、SELECT @@GLOBAL.sql_mode; を実行します。

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

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

Console

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

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

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

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

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

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

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

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

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

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

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

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

gcloud(第 2 世代)

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

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

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

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

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

  3. インポート先のインスタンスを記述します。
        gcloud sql instances describe [INSTANCE_NAME]
        
  4. serviceAccountEmailAddress フィールドをコピーします。
  5. gsutil iam を使用して、バケットのサービス アカウントに legacyBucketWriterobjectViewer Cloud IAM ロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  6. データベースをインポートします。
        gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME] \
                                    --database=[DATABASE_NAME]
        

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

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

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

gcloud(第 1 世代)

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

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

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

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

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

  3. データベースをインポートします。

        gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME]
        

    「ERROR_RDBMS」のようなエラーが発生した場合、そのバケットからインポートするための適切な権限がない可能性があります。バケットに対して少なくとも「書き込み」権限があり、エクスポート ファイルに対して「読み取り」権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。

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

REST

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

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

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

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

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

  3. インスタンスにバケットに対する legacyBucketWriterobjectViewer Cloud IAM ロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  4. ダンプファイルをインポートします。

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • bucket_name: Cloud Storage バケット名
    • path_to_dump_file: SQL ダンプファイルへのパス
    • database_name: Cloud SQL インスタンス内のデータベースの名前

    HTTP メソッドと URL:

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

    JSON 本文のリクエスト

        {
         "importContext":
           {
              "fileType": "SQL",
              "uri": "gs://bucket_name/path_to_dump_file",
              "database": "database_name"
            }
        }
    
        

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

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

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

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

始める前に

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

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

    ファイルがこれらの要件を満たしていない場合は、mysql クライアントで LOAD DATA LOCAL INFILE ステートメントを使用して、ローカル ファイルをデータベースに読み込みます。そのためには、mysql クライアントに対して --local-infile オプションを使用する必要があります。

CSV ファイル形式の要件

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

Cloud SQL で受け入れられる CSV ファイルの形式は、次の MySQL ステートメントを使用する場合と同じです。

  LOAD DATA INFILE ... CHARACTER SET 'utf8mb4'
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'.
    

この形式で CSV を作成するには、既存のデータベースからデータをエクスポートするときに、Cloud SQL がインポートで使用したオプションまたは区切り記号を使用する必要があります。例については、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(第 2 世代)

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

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

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

  2. CSV ファイルをバケットにアップロードします。
  3. エクスポート元のインスタンスを記述します。
        gcloud sql instances describe [INSTANCE_NAME]
        
  4. serviceAccountEmailAddress フィールドをコピーします。
  5. gsutil iam を使用して、バケットのサービス アカウントに legacyBucketWriterobjectViewer Cloud IAM ロールを付与します。Cloud IAM 権限の設定については、Cloud IAM 権限の使用をご覧ください。
  6. ファイルをインポートします。
        gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                    --database=[DATABASE_NAME] --table=[TABLE_NAME]
        

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

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

gcloud(第 1 世代)

    gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/csvfile.gz \
                                --database=[DATABASE_NAME] --table=[TABLE_NAME]
    

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

REST

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

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

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

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

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

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

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

    HTTP メソッドと URL:

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

    JSON 本文のリクエスト

        {
         "importContext":
           {
              "fileType": "CSV",
              "uri": "gs://bucket_name/path_to_csv_file",
              "database": "database_name"
              "csvImportOptions":
               {
                 "table": "table_name"
               }
           }
        }
    
        

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

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

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

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

このタスクのために基盤となる REST API リクエストがどのように作成されるかについては、instances:import ページの API Explorer をご覧ください。

次のステップ