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

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

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

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

Cloud SQL での CSV または mysqldump へのエクスポートは、他の MySQL データベースからのエクスポートと同じように行われます。エクスポートの際に --master-data オプションを使用しない限り、エクスポート オペレーションでデータベースはロックされません。

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

インポートとエクスポートに同じ 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 から SQL ダンプファイルにデータをエクスポートする

SQL ダンプファイルを作成するには、Cloud SQL から Cloud Storage にデータをエクスポートします。Cloud Storage に保存されたファイルを別の Cloud SQL データベースにインポートできます。エクスポートした後、Cloud Storage からローカル環境にデータをダウンロードすれば、そのデータにローカルでアクセスできるようになります。

始める前に

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

インスタンスのサービス アカウント名は、Google Cloud Console のインスタンスの [概要] ページで確認できます。Cloud Storage バケットのロールは、バケットを検査する gsutil ツールを使用して確認できます。

gsutil iam get gs://[BUCKET_NAME]

バケットでの IAM 使用について詳しくは、こちらをご覧ください。

Cloud Storage の SQL ダンプファイルにデータをエクスポートする

Cloud SQL インスタンス上のデータベースから Cloud Storage バケットの SQL ダンプファイルにデータをエクスポートするには:

Console

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

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

  2. データのエクスポート元となるインスタンスをクリックして、[概要] ページを開きます。
  3. ボタンバーで [エクスポート] をクリックします。
  4. [Cloud Storage のエクスポート先] で、エクスポートするバケット、フォルダ、ファイルを追加するか、[参照] をクリックしてバケット、フォルダ、ファイルを検索または作成します。

    [参照] をクリックした場合:

    1. [ロケーション] で、エクスポート先の Cloud Storage バケットまたはフォルダを選択します。
    2. [名前] テキスト ボックスに、ファイルの名前を追加します。以前にファイルを作成したことがある場合は、[ロケーション] のリストから選択します。

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

    3. [選択] をクリックします。
  5. [形式] で [SQL] をクリックして、SQL ダンプファイルを作成します。
  6. [詳細設定を表示] をクリックします。
  7. [エクスポートするデータベース] で、プルダウン メニューから 1 つのデータベースを選択します。
  8. [エクスポート] をクリックしてエクスポートを開始します。
  9. [データベースをエクスポートしますか?] というダイアログ ボックスが開き、大規模なデータベースの場合、エクスポート プロセスに 1 時間以上かかることがあるという内容のメッセージが表示されます。エクスポート時、インスタンスで実行できる操作は情報の閲覧のみです。一度開始したエクスポートは停止できません。エクスポートを開始してもよい場合は、[エクスポート] をクリックします。開始しない場合は、[キャンセル] をクリックします。

gcloud

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

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

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

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

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

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

  7. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。

REST

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

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

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

    後述のリクエスト データは、次のように置き換えてから使用します。

    • 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/export

    JSON 本文のリクエスト:

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_dump_file",
          "databases": ["database_name"]
        }
    }
    

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

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

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

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

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

始める前に

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

インスタンスのサービス アカウント名は、Google Cloud Console のインスタンスの [概要] ページで確認できます。Cloud Storage バケットのロールは、バケットを検査する gsutil ツールを使用して確認できます。

gsutil iam get gs://[BUCKET_NAME]

バケットでの IAM 使用について詳しくは、こちらをご覧ください。

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

Cloud SQL インスタンス上のデータベースから Cloud Storage バケットの SQL ダンプファイルにデータをエクスポートするには:

Console

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

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

  2. インスタンスをクリックして、インスタンスの概要ページを開きます。
  3. ボタンバーで [エクスポート] をクリックします。
  4. [Cloud Storage のエクスポート先] で、エクスポートするバケット、フォルダ、ファイルを追加するか、[参照] をクリックしてバケット、フォルダ、ファイルを検索または作成します。

    [参照] をクリックした場合:

    1. [ロケーション] で、エクスポート先の Cloud Storage バケットまたはフォルダを選択します。
    2. [名前] テキスト ボックスに、CSV ファイルの名前を追加します。以前にファイルを作成したことがある場合は、[ロケーション] のリストから選択します。

      .gz のファイル拡張子(完全な拡張子は .csv.gz)を使用して、エクスポート ファイルを圧縮できます。

    3. [選択] をクリックします。
  5. [形式] で [CSV] をクリックします。
  6. [詳細設定を表示] をクリックします。
  7. [データベース] で、プルダウン メニューからデータベースの名前を選択します。
  8. [SQL クエリ] に、SQL クエリを入力して、データのエクスポート元のテーブルを指定します。

    たとえば、guestbook データベースの entries テーブルの内容全体をエクスポートするには、次のように入力します。

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

  9. [エクスポート] をクリックしてエクスポートを開始します。
  10. [データベースをエクスポートしますか?] というダイアログ ボックスが開き、大規模なデータベースの場合、エクスポート プロセスに 1 時間以上かかることがあるという内容のメッセージが表示されます。エクスポート時、インスタンスで実行できる操作は情報の閲覧のみです。一度開始したエクスポートは停止できません。エクスポートを開始してもよい場合は、[エクスポート] をクリックします。それ以外の場合は、[キャンセル] をクリックします。

gcloud

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

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

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

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

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

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

  6. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。

REST

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

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

  2. バケットに対する storage.objectAdmin IAM ロールをインスタンスに付与します。IAM 権限の設定については、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. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
このリクエストのパラメータの一覧については、instances:export ページをご覧ください。

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

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

このリクエストのパラメータの一覧については、instances:export ページをご覧ください。

ローカル MySQL サーバーから CSV ファイルにデータをエクスポートする

Cloud SQL で管理されていない MySQL データベースを CSV ファイルにエクスポートし、Cloud SQL にインポートする場合は、次のコマンドを使用します。

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 を使用したデータのエクスポート

オンプレミスの MySQL データベースまたは 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 のリファレンスをご覧ください。

外部レプリケーション

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

次のステップ