Cloud SQL からのデータのエクスポート

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

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

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

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

データのエクスポートにおすすめの方法については、データのインポートとエクスポートにおすすめの方法をご覧ください。

インポートとエクスポートに同じ SQL モードを使用する

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

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

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

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 を使用して、バケットのサービス アカウントに storage.objectAdmin 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. インスタンスにバケットに対する storage.objectAdmin 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 ページをご覧ください。

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. SQL クエリを入力して、エクスポートするデータを指定します。

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

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

gcloud

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

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

  2. エクスポート元のインスタンスを記述します。
    gcloud sql instances describe [INSTANCE_NAME]
    
  3. gsutil iam を使用して、バケットのサービス アカウントに storage.objectAdmin 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. インスタンスにバケットに対する storage.objectAdmin 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 レスポンスが返されます。

    SELECT クエリでデータベースが指定されている場合は、databases プロパティがオーバーライドされます。

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

CSV 形式でのエクスポートは、次の SQL ステートメントの実行と同等です。

  SELECT <query> INTO OUTFILE ... CHARACTER SET 'utf8mb4'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
        ESCAPED BY '\\' LINES TERMINATED BY '\n'

ローカル MySQL サーバーからの CSV ファイルの作成

mysql --host=[INSTANCE_IP] --user=[USER_NAME] --password [DATABASE] \
-e " SELECT * FROM [TABLE] INTO OUTFILE '[FILE_NAME]' CHARACTER SET 'utf8mb4'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' "

mysqldump を使用したエクスポート

必要なオプションを使用して、Cloud SQL データベースに対して mysqldump ユーティリティを直接実行できます。ただし、別の Cloud SQL データベースにインポートするために Cloud SQL からエクスポートする場合は、次のフラグを指定して mysqldump ユーティリティを使用する必要があります。

  • --databases エクスポートするデータベースの明示的なリストを指定するには、--databases オプションを使用する必要があります。このリストに mysql システム データベースは含めないでください。
  • --hex-blob データベースにバイナリ フィールドが含まれている場合、バイナリ フィールドを正しくインポートするには、このフラグを使用する必要があります。
  • --set-gtid-purged=OFF SQL ダンプファイルには、GTID 情報が含まれないようにする必要があります。また、SQL ダンプファイルによりバイナリ ロギングが無効にならないようにする必要もあります(MySQL 5.5 や外部レプリケーションの場合には必要ありません)。
  • --single-transaction外部サーバーからのレプリケーション

標準構成

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

mysqldump --databases [DATABASE_NAME] -h [INSTANCE_IP] -u [USERNAME] -p \
--hex-blob --single-transaction --set-gtid-purged=OFF \
--default-character-set=utf8mb4 > [SQL_FILE].sql

mysqldump の詳細については、mysqldump のリファレンスをご覧ください。

外部レプリケーション

外部マスター構成で使用するダンプファイルを作成するには、外部サーバーからのレプリケーションをご覧ください。

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

次のステップ