このページでは、Cloud SQL インスタンスへのファイルのエクスポートとインポートを、並行して行う方法について説明します。
始める前に
エクスポートまたはインポート オペレーションを開始する前に、次のことを行います。
- データベースに十分な空き容量があることを確認します。
- データのエクスポートとインポートのベスト プラクティスに従います。
- インポート オペレーションが完了したら、結果を確認します。
エクスポート オペレーションとインポート オペレーションでは、データベース リソースが使用されますが、インスタンスのプロビジョニングが不足していない限り、通常のデータベース オペレーションが妨げられることはありません。
データを Cloud SQL for MySQL から複数のファイルに並行してエクスポートする
以降のセクションでは、データを 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 にある複数のファイルから Cloud Storage へ並行してエクスポートできます。これを行うには、dumpInstance
ユーティリティを使用します。
Cloud Storage に保存されたファイルを別の Cloud SQL データベースにインポートできます。ローカルでファイル内のデータにアクセスする場合は、そのデータを Cloud Storage からローカル環境にダウンロードします。
ファイルに DEFINER 句(ビュー、トリガー、stored_procedures など)が含まれている場合、これらのステートメントが実行される順序によっては、これらのファイルを使用したインポートが失敗する可能性があります。Cloud SQL での DEFINER の使用方法と回避策をご覧ください。
gcloud
データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の操作を行います。
- Cloud Storage バケットを作成します。
- ファイルのエクスポート元となる Cloud SQL インスタンスのサービス アカウントを確認するために、
gcloud sql instances describe
コマンドを使用します。gcloud sql instances describe INSTANCE_NAME
- サービス アカウントに
storage.objectAdmin
IAM ロールを付与するために、gcloud storage buckets add-iam-policy-binding
コマンドを使用します。IAM 権限の設定については、IAM 権限を使用するをご覧ください。 - データを Cloud SQL から複数のファイルに並行してエクスポートするには、
gcloud sql export sql
コマンドを使用します。gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \ --offload \ --parallel \ --threads=THREAD_NUMBER \ --database=DATABASE_NAME \ --table=TABLE_EXPRESSION
次の項目を置き換えます。
- INSTANCE_NAME: ファイルの並列エクスポート元となる Cloud SQL インスタンスの名前。
- BUCKET_NAME: Cloud Storage バケットの名前。
- BUCKET_PATH: エクスポート ファイルが保存されているバケットへのパス。
- FOLDER_NAME: エクスポート ファイルが保存されているフォルダ。
- THREAD_NUMBER: Cloud SQL がファイルを並列でエクスポートするために使用するスレッドの数。たとえば、3 つのファイルを並列にエクスポートする場合は、このパラメータの値として
3
を指定します。 - DATABASE_NAME(省略可): エクスポート元となる Cloud SQL インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをエクスポートします。
- TABLE_EXPRESSION: 指定したデータベースからエクスポートするテーブル。
export sql
コマンドには、トリガーやストアド プロシージャは含まれませんが、ビューは含まれます。トリガーやストアド プロシージャをエクスポートするには、そのエクスポートにスレッドを 1 つ使用します。このスレッドでmysqldump
ツールを使用します。エクスポートが完了すると、Cloud Storage バケット内のフォルダには MySQL Shell ダンプ形式のファイルが作成されているはずです。
- Cloud SQL for MySQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、それを取り消します。
INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。
出力で、serviceAccountEmailAddress
フィールドに関連付けられた値を探します。
REST v1
データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: エクスポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 -
データを Cloud SQL から複数のファイルに並行してエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- INSTANCE_NAME: ファイルの並列エクスポート元となる Cloud SQL インスタンスの名前。
- BUCKET_NAME: Cloud Storage バケットの名前。
- BUCKET_PATH: エクスポート ファイルが保存されているバケットへのパス。
- FOLDER_NAME: エクスポート ファイルが保存されているフォルダ。
- DATABASE_NAME(省略可): エクスポート元となる Cloud SQL インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをエクスポートします。
- THREAD_NUMBER: Cloud SQL がファイルを並列でエクスポートするために使用するスレッドの数。たとえば、3 つのファイルを同時に並行してエクスポートする場合は、このパラメータの値として
3
を指定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlExportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
- Cloud SQL for MySQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、それを取り消します。
エクスポートが完了すると、Cloud Storage バケット内のフォルダには MySQL Shell ダンプ形式のファイルが作成されているはずです。
REST v1beta4
データを Cloud SQL から複数のファイルに並行してエクスポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: エクスポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
- バケットに対する
storage.objectAdmin
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 -
データを Cloud SQL から複数のファイルに並行してエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- INSTANCE_NAME: ファイルの並列エクスポート元となる Cloud SQL インスタンスの名前。
- BUCKET_NAME: Cloud Storage バケットの名前。
- BUCKET_PATH: エクスポート ファイルが保存されているバケットへのパス。
- FOLDER_NAME: エクスポート ファイルが保存されているフォルダ。
- DATABASE_NAME(省略可): エクスポート元となる Cloud SQL インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをエクスポートします。
- THREAD_NUMBER: Cloud SQL がファイルを並列でエクスポートするために使用するスレッドの数。たとえば、3 つのファイルを同時に並行してエクスポートする場合は、このパラメータの値として
3
を指定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export
リクエストの本文(JSON):
{ "exportContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlExportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
- Cloud SQL for MySQL からのエクスポートに必要なロールと権限で設定した IAM ロールが不要な場合は、それを取り消します。
エクスポートが完了すると、Cloud Storage バケット内のフォルダには MySQL Shell ダンプ形式のファイルが作成されているはずです。
データを複数のファイルから 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 にデータをインポートする
データは、Cloud Storage にある複数のファイルからデータベースに並行してインポートできます。これを行うには、loadDump
ユーティリティを使用します。
gcloud
データを複数のファイルから Cloud SQL に並行してインポートするには、次の操作を行います。
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、ファイルからオブジェクトをアップロードするをご覧ください。
- ファイルのインポート先の Cloud SQL インスタンスのサービス アカウントを確認するために、
gcloud sql instances describe
コマンドを使用します。gcloud sql instances describe INSTANCE_NAME
- サービス アカウントに
storage.objectAdmin
IAM ロールを付与するために、gcloud storage buckets add-iam-policy-binding
ユーティリティを使用します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データを複数のファイルから Cloud SQL に並行してインポートするには、
gcloud sql import sql
コマンドを使用します。gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \ --offload \ --parallel \ --threads=THREAD_NUMBER \ --database=DATABASE_NAME
次の項目を置き換えます。
- INSTANCE_NAME: ファイルの並列インポート先となる Cloud SQL インスタンスの名前。
- BUCKET_NAME: Cloud Storage バケットの名前。
- BUCKET_PATH: インポート ファイルが保存されているバケットへのパス。
- FOLDER_NAME: インポート ファイルが保存されているフォルダ。
- THREAD_NUMBER: Cloud SQL がファイルの並列インポートに使用するスレッドの数。たとえば、3 つのファイルを並行してインポートする場合は、このパラメータの値として
3
を指定します。 - DATABASE_NAME(省略可): インポート元となる Cloud SQL インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをインポートします。
コマンドから
ERROR_RDBMS
のようなエラーが返された場合は、権限を確認してください。このエラーの原因は多くの場合、権限の問題にあります。 - Cloud SQL for MySQL へのインポートに必要なロールと権限で設定した IAM 権限が不要な場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。
出力で、serviceAccountEmailAddress
フィールドに関連付けられた値を探します。
REST v1
データを複数のファイルから Cloud SQL に並行してインポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: インポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、ファイルからオブジェクトをアップロードするをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 データを複数のファイルから Cloud SQL に並行してインポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- INSTANCE_NAME: ファイルの並列インポート先となる Cloud SQL インスタンスの名前。
- BUCKET_NAME: Cloud Storage バケットの名前。
- BUCKET_PATH: インポート ファイルが保存されているバケットへのパス。
- FOLDER_NAME: インポート ファイルが保存されているフォルダ。
- DATABASE_NAME(省略可): インポート元となる Cloud SQL インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをインポートします。
- THREAD_NUMBER: Cloud SQL がファイルの並列インポートに使用するスレッドの数。たとえば、3 つのファイルを同時に並行してインポートする場合は、このパラメータの値として
3
を指定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlImportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
リクエストのパラメータの一覧については、Cloud SQL Admin API ページをご覧ください。- Cloud SQL for MySQL へのインポートに必要なロールと権限で設定した IAM 権限が不要な場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
REST v1beta4
データを複数のファイルから Cloud SQL に並行してインポートするには、次の手順を行います。
- Cloud Storage バケットを作成します。
次のように置き換えます。gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
my-bucket
- PROJECT_NAME: 作成する Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- LOCATION_NAME: インポートするファイルを保存するバケットのロケーション。例:
us-east1
- BUCKET_NAME: 命名要件に基づくバケットの名前。例:
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、ファイルからオブジェクトをアップロードするをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 データを複数のファイルから Cloud SQL に並行してインポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_NAME: 作成した Cloud Storage バケットを含む Google Cloud プロジェクトの名前。
- INSTANCE_NAME: ファイルの並列インポート元となる Cloud SQL インスタンスの名前。
- BUCKET_NAME: Cloud Storage バケットの名前。
- BUCKET_PATH: インポート ファイルが保存されているバケットへのパス。
- FOLDER_NAME: インポート ファイルが保存されているフォルダ。
- DATABASE_NAME(省略可): インポート元となる Cloud SQL インスタンス内のデータベース名。データベースを指定しない場合、Cloud SQL はインスタンスのすべてのデータベースをインポートします。
- THREAD_NUMBER: Cloud SQL がファイルの並列インポートに使用するスレッドの数。たとえば、3 つのファイルを同時に並行してインポートする場合は、このパラメータの値として
3
を指定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import
リクエストの本文(JSON):
{ "importContext": { "fileType": "SQL", "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME", "databases": ["DATABASE_NAME"], "offload": [TRUE|FALSE], "sqlImportOptions": { "parallel": [TRUE|FALSE], "threads": [THREAD_NUMBER] } } }
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
リクエストのパラメータの一覧については、Cloud SQL Admin API ページをご覧ください。- Cloud SQL for MySQL へのインポートに必要なロールと権限で設定した IAM 権限が不要な場合は、
gcloud storage buckets remove-iam-policy-binding
を使用して削除します。
制限事項
- データを複数のファイルから並行してインポートまたはエクスポートする場合、指定したスレッドが多すぎると、Cloud SQL インスタンスが備えているメモリよりも多くのメモリを使用する可能性があります。この場合、内部エラー メッセージが表示されます。インスタンスのメモリ使用量を確認し、必要に応じてインスタンスのサイズを増やしてください。詳細については、インスタンスの設定についてをご覧ください。
- エクスポートを実行する場合、
databases
フィールドやtables
フィールドで、データベース名やテーブル名にカンマを使用することはサポートされていません。 - 最初のダンプファイルのダウンロード用に十分なディスク容量があることを確認してください。容量が十分にない場合は、
no space left on disk
エラーが表示されます。 - インスタンスに仮想 CPU(vCPU)が 1 つしかない場合、複数のファイルを並行してインポートやエクスポートすることはできません。インスタンスの vCPU の数は、インポートやエクスポートのオペレーションに使用するスレッド数より小さくすることはできません。また、スレッド数は 2 以上にする必要があります。
- エクスポート オペレーションの際、データ定義言語(DDL)ステートメント(
CREATE
、DROP
、ALTER
など)を記述すると、オペレーションが失敗する可能性や、エクスポートされたデータがポイントインタイム リカバリ スナップショットと一致しなくなる可能性があります。 - インポート オペレーションが失敗した場合、部分的にインポートされたデータが残っている可能性があります。DDL ステートメントの場合、MySQL は自動的に commit します。このような場合は、データを再度インポートする前に、部分的にインポートされたデータをクリーンアップしてください。
次のステップ
- インポートとエクスポートの各オペレーションのステータスのチェック方法を確認する。
- データのインポートとエクスポートをキャンセルする方法を確認する。
- データのインポートとエクスポートのベスト プラクティスについて確認する。
- インポートとエクスポートに関する既知の問題について確認する。