このページでは、Cloud SQL インスタンスで SQL ダンプファイルを使用してデータのエクスポートとインポートを行う方法について説明します。
始める前に
エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。
ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。
インポート オペレーションが完了したら、結果を確認します。
Cloud SQL for MySQL からデータをエクスポートする
Cloud SQL for MySQL からのエクスポートに必要なロールと権限
Cloud SQL から Cloud Storage にデータをエクスポートするには、エクスポートを開始するユーザーに次のいずれかのロールが必要です。
- Cloud SQL 編集者ロール
- 次の権限を含むカスタムロール:
cloudsql.instances.get
cloudsql.instances.export
また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。
storage.objectAdmin
Identity and Access Management(IAM)ロール- 次の権限を含むカスタムロール:
storage.objects.create
storage.objects.list
(ファイルの並行エクスポートのみ)storage.objects.delete
(複数ファイルの並行エクスポートの場合のみ)
IAM ロールについては、Identity and Access Management をご覧ください。
Cloud SQL for MySQL から SQL ダンプファイルにエクスポートする
SQL ダンプファイルを作成するには、Cloud SQL から Cloud Storage にデータをエクスポートします。Cloud Storage に保存されたファイルを別の Cloud SQL データベースにインポートできます。エクスポートした後、Cloud Storage からローカル環境にデータをダウンロードすれば、そのデータにローカルでアクセスできるようになります。Cloud SQL からエクスポートする場合は、mysqldump ユーティリティを --single-transaction
オプションと --hex-blob
オプションとともに使用します。--single-transaction
オプションを指定すると、mysqldump
は実行前にトランザクションを開始します。データベース全体をロックする代わりに、mysqldump
は現在の状態でデータベースを読み取り、一貫したデータダンプを作成します。
SQL ダンプファイルに DEFINER 句(ビュー、トリガー、stored_procures など)が含まれている場合、これらのステートメントが実行される順序によっては、このファイルを使用したインポートが失敗することがあります。Cloud SQL での DEFINER の使用方法と回避策をご覧ください。
Cloud SQL インスタンス上のデータベースから Cloud Storage バケットの SQL ダンプファイルにデータをエクスポートするには:
Console
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [エクスポート] をクリックします。
- [ファイル形式] セクションで [SQL] をクリックして、SQL ダンプファイルを作成します。
- [エクスポートするデータ] セクションで、[このインスタンス内の 1 つ以上のデータベース] をクリックして、特定のデータベースをエクスポートします。
- プルダウン メニューを使用して、エクスポート元のデータベースを選択します。
- [送信先] セクションで [BROWSE] を選択して、エクスポート先の Cloud Storage バケットまたはフォルダを検索します。
- [エクスポート] をクリックしてエクスポートを開始します。
gcloud
- Cloud Storage バケットを作成します。
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。- データベースを Cloud Storage バケットにエクスポートします。
gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \ --database=DATABASE_NAME \ --offload
export sql
コマンドでは、トリガーとストアド プロシージャは含まれませんが、ビューは含まれます。トリガーやストアド プロシージャをエクスポートするには、mysqldump ツールを使用します。export sql
コマンドの使用方法については、sql export sql
コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート先のバケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- 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 インスタンス内のデータベースの名前
- 以前に設定した IAM のロールを保持する必要がない場合は、今すぐ削除してください。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE", "databases": ["DATABASE_NAME"], "offload": TRUE | FALSE } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
REST v1beta4
- エクスポート先のバケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
storage.objectAdmin
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- 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 インスタンス内のデータベースの名前
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
HTTP メソッドと URL:
POST https://sqladmin.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"], "offload": TRUE | FALSE } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
mysqldump を使用してローカル MySQL サーバーからエクスポートする
オンプレミスの MySQL データベースからデータをエクスポートし、Cloud SQL データベースにインポートする場合は、次のフラグを指定して mysqldump
ユーティリティを使用する必要があります。
--databases
エクスポートするデータベースの明示的なリストを指定するには、--databases
オプションを使用する必要があります。このリストにmysql
システム データベースは含めないでください。--hex-blob
データベースにバイナリ フィールドが含まれている場合、バイナリ フィールドを正しくインポートするには、このフラグを使用する必要があります。--set-gtid-purged=OFF
SQL ダンプファイルには、GTID 情報が含まれないようにする必要があります。また、SQL ダンプファイルによりバイナリ ロギングが無効にならないようにする必要もあります(MySQL 5.5 や外部レプリケーションの場合には必要ありません)。--single-transaction
実行前にトランザクションを開始します。データベース全体をロックする代わりに、mysqldump は現在の状態でデータベースを読み取り、一貫したデータダンプを作成します。
コマンドラインから、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 のリファレンスをご覧ください。
Cloud SQL for MySQL への外部レプリケーション
外部サーバー構成で使用するダンプファイルを作成するには、外部サーバーからのレプリケーションをご覧ください。
Cloud SQL for MySQL にデータをインポートする
Cloud SQL for MySQL へのインポートに必要なロールと権限
Cloud Storage から Cloud SQL にデータをインポートするには、インポートを開始するユーザーに次のいずれかのロールが必要です。
- Cloud SQL 管理者ロール
- 次の権限を含むカスタムロール:
cloudsql.instances.get
cloudsql.instances.import
また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。
storage.objectAdmin
IAM ロール- 次の権限を含むカスタムロール:
storage.objects.get
storage.objects.list
(ファイルの並行インポートの場合のみ)
IAM ロールについては、Identity and Access Management をご覧ください。
Cloud SQL for MySQL に SQL ダンプファイルをインポートする
SQL ファイルは、SQL コマンドのシーケンスを記述したプレーン テキスト ファイルです。
Console
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [インポート] をクリックします。
- [データのインポート元となるファイルを選択してください] セクションで、インポートに使用するバケットと SQL ダンプファイルのパスを入力するか、既存のファイルを参照します。
圧縮ファイル(
.gz
)または非圧縮ファイル(.sql
)ファイルをインポートできます。 - [形式] で [SQL] を選択します。
データをインポートするデータベースを選択します。
これにより Cloud SQL では、インポートに先立って
USE DATABASE
ステートメントが実行されます。インポートを実行するユーザーを指定する場合は、ユーザーを選択します。
インポート ファイルに、特定のユーザーで実行しなければならないステートメントが含まれている場合は、このフィールドを使用してユーザーを指定します。
- [インポート] をクリックしてインポートを開始します。
gcloud
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インポート先のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gcloud storage buckets add-iam-policy-binding
を使用して、バケットのサービス アカウントにstorage.objectAdmin
IAM ロールを付与します。 IAM 権限の設定については、IAM 権限の使用をご覧ください。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE-ACCOUNT \ --role=roles/storage.objectAdmin
- データベースをインポートします。
gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \ --database=DATABASE_NAME
import sql
コマンドの使用方法については、sql import sql
コマンドのリファレンス ページをご覧ください。コマンドから「
ERROR_RDBMS
」のようなエラーが返された場合は、権限を確認してください。このエラーの原因は多くの場合、権限の問題にあります。 - 以前に設定した IAM の権限を保持する必要がない場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除してください。
REST v1
-
SQL ダンプファイルを作成します。リンク先の手順では、ダンプファイルに Cloud SQL との互換性を持たせるためのフラグを設定します。
- オンプレミスの MySQL サーバーからデータをインポートする場合:
- SQL ダンプファイルを作成します。
- Cloud Storage にバケットを作成します。
- Cloud Storage バケットに SQL ダンプファイルをアップロードします。
- 別の Cloud SQL インスタンスからデータをインポートする場合は、Cloud SQL から SQL ダンプファイルへのデータのエクスポートの手順をご覧ください。
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- バケットに対する
legacyBucketWriter
とobjectViewer
の IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ダンプファイルをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_sql_file: SQL ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
リクエストのパラメータの一覧については、instances:import ページをご覧ください。 - 以前に設定した IAM の権限を保持する必要がない場合は、今すぐ削除してください。
REST v1beta4
-
SQL ダンプファイルを作成します。リンク先の手順では、ダンプファイルに Cloud SQL との互換性を持たせるためのフラグを設定します。
- オンプレミスの MySQL サーバーからデータをインポートする場合:
- SQL ダンプファイルを作成します。
- Cloud Storage にバケットを作成します。
- Cloud Storage バケットに SQL ダンプファイルをアップロードします。
- 別の Cloud SQL インスタンスからデータをインポートする場合は、Cloud SQL から SQL ダンプファイルへのデータのエクスポートの手順をご覧ください。
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ダンプファイルをインポートします。
データをリクエストする前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_sql_file: SQL ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
リクエストのパラメータの一覧については、instances:import ページをご覧ください。 - 以前に設定した IAM の権限を保持する必要がない場合は、今すぐ削除してください。
次のステップ
- インポートとエクスポートの各オペレーションのステータスのチェック方法について学習する
- データのインポートとエクスポートのベスト プラクティスについて確認する
- Cloud Storage に関する詳細
- インポートとエクスポートの既知の問題