このページでは、Cloud SQL インスタンスで SQL ダンプファイルを使用してデータのエクスポートとインポートを行う方法について説明します。
始める前に
エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。
ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。
インポート オペレーションが完了したら、結果を確認します。
Cloud SQL for MySQL からデータをエクスポートする
Cloud SQL for MySQL からのエクスポートに必要なロールと権限
Cloud SQL から Cloud Storage にデータをエクスポートするには、エクスポートを開始するユーザーに次のいずれかのロールが必要です。
- Cloud SQL 編集者ロール
- 次の権限を含むカスタムロール:
cloudsql.instances.getcloudsql.instances.export
また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。
storage.objectAdminIdentity and Access Management(IAM)ロール- 次の権限を含むカスタムロール:
storage.objects.createstorage.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 ダンプファイルにデータをエクスポートするには:
コンソール
-
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.objectAdminIAM ロールを付与します。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
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
legacyBucketWriterIAM ロールをインスタンスに付与します。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.objectAdminIAM ロールをインスタンスに付与します。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=OFFSQL ダンプファイルには、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.getcloudsql.instances.import
また、Cloud SQL インスタンスのサービス アカウントには、次のいずれかのロールが必要です。
storage.objectAdminIAM ロール- 次の権限を含むカスタムロール:
storage.objects.getstorage.objects.list(ファイルの並行インポートの場合のみ)
IAM ロールについては、Identity and Access Management をご覧ください。
Cloud SQL for MySQL に SQL ダンプファイルをインポートする
SQL ファイルは、SQL コマンドのシーケンスを記述したプレーン テキスト ファイルです。
コンソール
-
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.objectAdminIAM ロールを付与します。 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.objectAdminIAM のロールを付与します。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 に関する詳細
- インポートとエクスポートの既知の問題