このページでは、Cloud SQL インスタンスで BAK ファイルを使用してデータのエクスポートとインポートを行う方法について説明します。
始める前に
エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。
ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。
インポート オペレーションが完了したら、結果を確認します。
Cloud SQL for SQL Server からデータをエクスポートする
Cloud SQL は、ネイティブの BAK ファイルのエクスポートをサポートしています。
エクスポートされたファイルから新しいインスタンスを作成するためにエクスポートする場合は、バックアップから別のインスタンスに復元またはインスタンスのクローン作成を検討してください。
エクスポート オペレーション中に、選択したデータベースの完全バックアップが Cloud SQL によって実行されます。
Cloud SQL for SQL Server からのエクスポートに必要なロールと権限
Cloud Storage にデータをエクスポートするには、Cloud SQL インスタンスのサービス アカウントまたはユーザーに次のいずれかのロールが必要です。
- Cloud SQL 編集者のロールと
storage.objectAdmin
IAM ロール。 - 次の権限を含むカスタムロール:
cloudsql.instances.get
cloudsql.instances.export
storage.buckets.create
storage.objects.create
storage.objects.list
(ストライプ エクスポートの場合のみ)storage.objects.delete
(ストライプ エクスポートの場合のみ)
IAM ロールについては、Cloud Storage の Cloud Identity and Access Management をご覧ください。
Cloud SQL for SQL Server から BAK ファイルにデータをエクスポートする
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [エクスポート] をクリックします。
- [ファイル形式] セクションで [BAK] をクリックします。
- [エクスポートするデータ] セクションでプルダウン メニューを使用して、エクスポートするデータベースを選択します。
- [送信先] セクションで [BROWSE] を選択して、エクスポート先の Cloud Storage バケットまたはフォルダを検索します。
- [エクスポート] をクリックしてエクスポートを開始します。
gcloud
- Cloud Storage バケットを作成する
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gsutil iam
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。- データベースをエクスポートします。
gcloud beta sql export bak INSTANCE_NAME gs://BUCKET_NAME/my-export.bak \ --database=DATABASE_NAME
gcloud beta sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート先のバケットを作成します。
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_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 インスタンス内のデータベースの名前
- offload: サーバーレス エクスポートを有効にします。サーバーレス エクスポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
JSON 本文のリクエスト:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM のロールを保持する必要がない場合は、今すぐ削除してください。
REST v1beta4
- エクスポート先のバケットを作成します。
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_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 インスタンス内のデータベースの名前
- offload: サーバーレス エクスポートを有効にします。サーバーレス エクスポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
JSON 本文のリクエスト:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_dump_file", "databases": ["database_name"] "offload": true | false } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
ストライプ エクスポートの使用
ストライプ エクスポートの利点は次のとおりです。
- オペレーション完了までに必要な時間の短縮
- 5 TB を超えるデータベースをエクスポート可能
ストライプ エクスポートを使用すると、1 つのファイルで構成されたバックアップではなく、複数のファイルに分割されるというデメリットがあります。このセットは「ストライプ セット」と呼ばれます。ストライプ化されたメディアセット(ストライプ セット)でデバイスをバックアップするをご覧ください。Cloud SQL では、単一のファイルを生成するのではなく、Cloud Storage 内の空のフォルダにエクスポートします。詳細については、ストライプ エクスポートの使用方法をご覧ください。
運用の計画
ストライプ エクスポートを使用すると、エクスポートのパフォーマンスが向上します。ただし、ユースケースで単一の出力ファイルが必要な場合、またはデータベースのサイズが 5 TB 未満の場合で、高速なパフォーマンスが重要でない場合は、ストライプ化されていないエクスポートを使用することをおすすめします。
ストライプ エクスポートを使用する場合は、ストライプの数を考慮してください。この値は、gcloud
コマンドまたは REST API 呼び出しで指定できます。ただし、パフォーマンスに最適なストライプ数が必要な場合や、数値がわからない場合は、数値を省略します。最適なストライプ数が自動的に設定されます。
Cloud SQL for SQL Server が現在サポートしているストライプの最大数は 64 です。
ストライプ エクスポートの使用方法
gcloud
- Cloud Storage バケットを作成する
- エクスポート元の Cloud SQL インスタンスのサービス アカウントを見つけます。これを行うには、
gcloud sql instances describe
コマンドを実行します。出力でserviceAccountEmailAddress
フィールドを探します。gcloud sql instances describe INSTANCE_NAME
gsutil iam
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。- データベースをエクスポートするには、
--striped
パラメータを指定するか、--stripe_count
の値を指定します。--stripe_count
の値を設定することは、--striped
パラメータが意図したものであることを意味します。--no-striped
を指定して--stripe_count
の値を指定すると、エラーが発生します。gcloud beta sql export bak INSTANCE_NAME \ gs://BUCKET_NAME/STRIPED_EXPORT_FOLDER \ --database=DATABASE_NAME --striped --stripe_count=NUMBER
gcloud beta sql export bak
コマンドの使用方法については、コマンドのリファレンス ページをご覧ください。 - 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消してください。
REST v1
- エクスポート先のバケットを作成します。
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットのエクスポート先フォルダ(Cloud Storage バケット内)のパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
- true | false: ストライプ エクスポートを使用するには、
true
に設定します。ストライプ数を指定せずにtrue
を指定すると、最適なストライプ数が自動的に設定されます。 - number_of_stripes: 使用するストライプの数。指定すると、
striped
はtrue
とみなされます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
JSON 本文のリクエスト:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "databases": ["database_name"], "bakExportOptions": { "striped": true | false, "stripe_count": ["number_of_stripes"] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM のロールを保持する必要がない場合は、今すぐ削除してください。
REST v1beta4
- エクスポート先のバケットを作成します。
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強く推奨します。
- バケットに対する
legacyBucketWriter
IAM ロールをインスタンスに付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - データベースをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットのエクスポート先フォルダ(Cloud Storage バケット内)のパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
- true | false: ストライプ エクスポートを使用するには、
true
に設定します。ストライプ数を指定せずにtrue
を指定すると、最適なストライプ数が自動的に設定されます。 - number_of_stripes: 使用するストライプの数。指定すると、
striped
はtrue
とみなされます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
JSON 本文のリクエスト:
{ "exportContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "databases": ["database_name"], "bakExportOptions": { "striped": true | false, "stripe_count": ["number_of_stripes"] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
- 以前に設定した IAM のロールを保持する必要がない場合は、今すぐ削除してください。
Cloud SQL for SQL Server にインポートする
Cloud SQL for SQL Server へのインポートに必要なロールと権限
この手順では、Cloud Storage からファイルをインポートする必要があります。Cloud Storage からデータをインポートするには、Cloud SQL インスタンスのサービス アカウントまたはユーザーに次のいずれかのロールが必要です。
- Cloud SQL 管理者のロールと
roles/storage.legacyObjectReader
IAM ロール - 次の権限を含むカスタムロール:
cloudsql.instances.get
cloudsql.instances.import
storage.buckets.get
storage.objects.get
storage.objects.list
(ストライプ エクスポートの場合のみ)
サービス アカウントまたはユーザーがエクスポート オペレーションも実行する場合は、インポートとエクスポートの両方で必要な権限をすべて付与するため、Storage Object Admin
IAM ロールを付与するほうが便利です。IAM ロールについては、Cloud Storage の Cloud Identity and Access Management をご覧ください。
BAK ファイルから Cloud SQL for SQL Server にデータをインポートする
ストライプ インポートを使用するには、ストライプ インポートを使用するをご覧ください。
さまざまなインポート フレームワークを利用できます。たとえば、Cloud SQL for SQL Server は、次のデータベース バージョンで 変更データ キャプチャ(CDC)をサポートしています。
- SQL Server 2017 Standard
- SQL Server 2017 Enterprise
- SQL Server 2019 Standard
- SQL Server 2019 Enterprise
CDC 対応データベースをインポートする場合、KEEP_CDC フラグが保持されます。
インスタンスのバージョンが Microsoft SQL Server Enterprise Edition の場合、暗号化された BAK ファイルをインポートできます。サポートされている BAK 拡張機能は .bak
と .bak.gz
だけです。現在、GPG 暗号化バックアップはサポートされていません。
以下の手順では、新しいデータベースを指定する準備を行います。BAK ファイルのインポートを開始する前にデータベースを作成しないでください。
BAK ファイルを使用して Cloud SQL インスタンスにデータをインポートするには:
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [インポート] をクリックします。
- データのインポート元となるファイルを選択するフィールドで、インポートに使用するバケットと BAK ファイルのパスを入力します。
圧縮ファイル(
.gz
)または非圧縮ファイルをインポートできます。 - [ファイル形式] セクションで [BAK] を選択します。
- BAK ファイルをインポートする Cloud SQL インスタンスで [データベース] を指定します。
- [インポート] をクリックしてインポートを開始します。
gcloud
インポート用のバケットを作成します。
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- 必要なロールと権限を構成済みであることを確認してください。
- BAK ファイルからのデータをバケットにアップロードします。
- エクスポート元のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gsutil iam
を使用して、バケットのサービス アカウントにstorage.objectViewer
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。- ファイルからデータをインポートします。
gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME
- 以前に設定した IAM の権限を保持する必要がない場合は、
gsutil iam
を使用して削除してください。
REST v1
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_bak_file: BAK ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
JSON 本文のリクエスト:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
このリクエストのパラメータの完全な一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
REST v1beta4
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_bak_file: BAK ファイルへのパス
- database_name: Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
JSON 本文のリクエスト:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_bak_file", "database": "database_name" } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
このリクエストのパラメータの完全な一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
ERROR_RDBMS
などのエラーが表示した場合は、BAK ファイルがバケットに存在し、バケットに対して正しい権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。
ストライプ インポートの使用
ストライプ インポートの利点は次のとおりです。
- オペレーション完了までに必要な時間の短縮
- 5 TB を超えるデータベースをインポート可能
ストライプ インポートを使用する場合のデメリットとしては、ストライプ セット内のすべてのファイルを(1 つのファイルではなく)Cloud Storage バケット内の同じフォルダにアップロードしてからインポートを行うことが挙げられます。
運用の計画
ほとんどのユースケースでは、ストライプ インポートによりパフォーマンスが向上し、デメリットはありません。ただし、特定のインスタンスからストライプ セットにバックアップできない場合や、データベースが 5 TB 未満の場合で、高速なパフォーマンスが重要でない場合は、ストライプ化されていないインポートを使用することをおすすめします。
ストライプ インポートの使用方法
gcloud
インポート用のバケットを作成します。
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
このステップは必須ではありませんが、他のデータへ一切アクセスできないようにするために、実行することを強くおすすめします。
- 必要なロールと権限を構成済みであることを確認してください。
- バケット内に新しいフォルダを作成します。
- データベースをインポートするには、(データベースの)ストライプ セットのファイルを新しいフォルダにアップロードします。すべてのファイルがフォルダにアップロードされ、フォルダに余分なファイルが含まれていないことを確認します。
- エクスポート元のインスタンスを記述します。
gcloud sql instances describe INSTANCE_NAME
serviceAccountEmailAddress
フィールドをコピーします。gsutil iam
を使用して、バケットのサービス アカウントにstorage.objectViewer
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。- フォルダからデータをインポートします。ストライプ化されていないインポートとの違いは次のとおりです。URI は単一ファイルではなく、ストライプ セットがアップロードされたフォルダの名前にリンクし、ユーザーは
--striped
パラメータを指定します:gcloud beta sql import bak INSTANCE_NAME gs://BUCKET_NAME/FOLDER_NAME \ --database=DATABASE_NAME --striped
- 以前に設定した IAM の権限を保持する必要がない場合は、
gsutil iam
を使用して削除してください。
REST v1
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットが配置されているフォルダのパス(Cloud Storage バケット内)
- database_name: Cloud SQL インスタンス内に作成するデータベースの名前
- true | false: ストライプ インポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
JSON 本文のリクエスト:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "database": "database_name", "bakImportOptions": { "striped": true | false } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
このリクエストのパラメータの完全な一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
REST v1beta4
- Cloud Storage バケットを作成します。
ファイルをバケットにアップロードします。
ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
- インスタンスにバケットに対する
storage.objectAdmin
IAM のロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。 - ファイルからデータをインポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- bucket_name: Cloud Storage バケット名
- path_to_folder: ストライプ セットが配置されているフォルダのパス(Cloud Storage バケット内)
- database_name: Cloud SQL インスタンス内に作成するデータベースの名前
- true | false: ストライプ インポートを使用するには
true
に設定します。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
JSON 本文のリクエスト:
{ "importContext": { "fileType": "BAK", "uri": "gs://bucket_name/path_to_folder", "database": "database_name", "bakImportOptions": { "striped": true | false } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
別のユーザーがインポートするには、
このリクエストのパラメータの完全な一覧については、instances:import ページをご覧ください。importContext.importUser
プロパティを指定します。 - 以前に設定した IAM 権限を保持する必要がない場合は、権限を削除します。
ERROR_RDBMS
のようなエラーが発生した場合、テーブルが存在することを確認してください。存在している場合は、バケットに対して正しい権限があることを確認します。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。