データのインポートとエクスポートのベスト プラクティス

このページでは、Cloud SQL を使用してデータをインポートおよびエクスポートするためのおすすめの方法について説明します。Cloud SQL にデータをインポートする手順については、データのインポートをご覧ください。データが Cloud SQL にある場合も、お客様が管理しているインスタンスにある場合も、データをエクスポートするための手順については、データのエクスポートをご覧ください。

インポートとエクスポートのベスト プラクティス

データをインポートおよびエクスポートする際に考慮すべきベスト プラクティスは次のとおりです。

Cloud Storage リクエスト元による支払いバケットを使用しない

Cloud SQL からのインポートとエクスポートに、リクエスト元による支払いが有効になっている Cloud Storage バケットは使用できません。

SQL ダンプファイルの作成時に正しいフラグを使用する

データを SQL ダンプファイルにエクスポートするときに正しい手順を実行しなかった場合、インポートが失敗する可能性があります。Cloud SQL にインポートするための SQL ダンプファイルの作成方法については、データのエクスポートをご覧ください。

コスト削減のため、データを圧縮する

Cloud SQL では、圧縮ファイルと非圧縮ファイルの両方のインポートとエクスポートがサポートされています。特に大きいインスタンスをエクスポートするときは、圧縮すると Cloud Storage のストレージ スペースを大幅に節約でき、ストレージ コストの削減にもなります。

SQL ダンプファイルや CSV ファイルをエクスポートするときは、ファイル拡張子 .gz を使用してデータを圧縮します。ファイル拡張子 .gz のファイルは、インポートすると自動的に解凍されます。

長時間にわたるインポートおよびエクスポート プロセスを削減する

インポート機能(Cloud Storage バケット経由)を使用した Cloud SQL へのインポートとエクスポートは、データベースのサイズによっては、完了するまでに時間がかかる場合があります。その結果、次の影響があります。

  • 長時間実行オペレーションを停止することはできません。
  • 各インスタンスに対して実行できるインポートまたはエクスポート オペレーションは、一度に 1 つのみです。

Cloud SQL のインポートまたはエクスポート機能をバッチサイズのより小さいデータで使用して、各オペレーションの完了に要する時間を短縮できます。

エクスポートの場合、サーバーレス エクスポートを使用すると、データベースのパフォーマンスへの影響を最小限に抑え、エクスポートの実行中にインスタンスで他のオペレーションを実行できます。

その他のヒントについては、Cloud SQL インスタンスでの問題を診断するをご覧ください。

トラブルシューティング

表内のリンクをクリックすると、詳細が表示されます。

この問題については... 次のような問題が考えられます... 次のことを試します...
オペレーションのステータスを確認できない。 ユーザー インターフェースには成功または失敗のみが表示されます。 詳細については、これらのデータベース コマンドをご覧ください。
エクスポート中の 408 Error (Timeout) データベースのサイズとエクスポート コンテンツによっては、SQL のエクスポートに時間がかかることがあります。 複数の CSV エクスポートを使用して各オペレーションのサイズを減らします
CSV のエクスポートは機能したが、SQL エクスポートに失敗した。 SQL のエクスポートでは、Cloud SQL との互換性の問題が発生する可能性が高くなります。 CSV のエクスポートを使用して必要なものだけをエクスポートします
エクスポートに時間がかかりすぎる。 Cloud SQL では同時実行オペレーションの同期がサポートされません。 エクスポートのオフロードを使用します。詳細については、こちらをご覧ください。
インポートに時間がかかりすぎる。 アクティブな接続が多すぎると、インポート オペレーションが妨げられる可能性があります。 未使用の接続を閉じるか、インポート オペレーションを開始する前に Cloud SQL インスタンスを再起動してください。
拡張機能の作成のエラー。 ダンプファイルには、サポートされていない拡張機能への参照が含まれています。 ダンプファイルを編集して参照を削除します
pg_dumpall の使用中にエラーが発生した。 このツールにはスーパーユーザーのロールが必要です。 スーパーユーザーのロールはサポートされていません
エクスポート オペレーションが、エクスポート完了前にタイムアウトする。 クエリで最初の 7 分以内にデータを生成する必要があります。 pg_dump ツールを使用して手動でエクスポートしてみてください
インポートに失敗した。 エクスポートされたファイルに、まだ存在しないデータベース ユーザーが含まれている可能性があります。 インポートを行う前に、データベース ユーザーを作成します。
エクスポート オペレーション中に接続が切断した。 クエリで最初の 7 分以内にデータを生成する必要があります。 クエリを手動でテストします。詳細については、こちらをご覧ください。
エクスポート中に不明なエラーが発生した。 帯域幅の問題である可能性があります。 インスタンスと Cloud Storage バケットの両方が同じリージョンに存在することを確認します
エクスポートを自動化する場合。 Cloud SQL には、エクスポートを自動化する方法がありません。 この機能を実行する独自のパイプラインを構築します。 詳細については、こちらをご覧ください。
ERROR_RDBMS: system error occurred Cloud Storage の権限またはテーブルが存在しません。 権限を確認するか、テーブルが存在することを確認します

オペレーションのステータスを確認できない

進行中のオペレーションのステータスが表示されません。

次のような問題が考えられます

Google Cloud Console では、完了時に成功または失敗のみが表示され、警告は返されません。

次の方法をお試しください

データベースに接続し、SHOW WARNINGS を実行します。


エクスポート中の 408 エラー(タイムアウト)

Cloud SQL でエクスポート ジョブを実行しているときに、エラー メッセージ 408 Error (Timeout) が表示されます。

次のような問題が考えられます

CSV 形式と SQL 形式ではエクスポート方法が異なります。SQL 形式ではデータベース全体がエクスポートされるため、完了までに時間がかかります。CSV 形式ではエクスポートに含めるデータベースの要素を定義できます。

次の方法をお試しください

CSV 形式を使用して複数の小規模なエクスポート ジョブを実行し、各オペレーションのサイズと長さを減らします。


CSV のエクスポートは機能したが、SQL エクスポートに失敗した

CSV のエクスポートは機能したが、SQL エクスポートに失敗した。

次のような問題が考えられます

CSV 形式と SQL 形式ではエクスポート方法が異なります。SQL 形式ではデータベース全体がエクスポートされるため、完了までに時間がかかります。CSV 形式ではエクスポートに含めるデータベースの要素を定義できます。

次の方法をお試しください

CSV エクスポートを使用して必要なものだけをエクスポートします。


エクスポートに時間がかかりすぎる

エクスポートに時間がかかりすぎるため、他のオペレーションをブロックします。

次のような問題が考えられます

Cloud SQL では同時実行オペレーションの同期がサポートされません。

次の方法をお試しください

サイズの小さい多数のデータセットを一度にエクスポートしてみてください。


インポートに時間がかかりすぎる

インポートに時間がかかりすぎるため、他のオペレーションをブロックしています。

次のような問題が考えられます

アクティブな接続が多すぎると、インポート オペレーションが妨げられる可能性があります。CPU とメモリが接続のために消費されると、使用可能なリソースが制限されます。

次の方法をお試しください

未使用のオペレーションを終了します。使用可能なリソースが十分にあるかどうか、CPU とメモリ使用量を確認します。インポート オペレーションに使用するリソースを最大限確保するために、オペレーションを開始する前にインスタンスを再起動することをおすすめします。再起動:

  • すべての接続を終了します。
  • リソースを消費している可能性のあるタスクを終了します。


拡張機能の作成のエラー

エラー メッセージ SET SET SET SET SET SET CREATE EXTENSION ERROR: must be owner of extension plpgsql が表示されます。

次のような問題が考えられます

PostgreSQL のダンプをインポートすると、同様のエラー メッセージが表示される場合、ダンプファイルには plpgsql への参照が含まれています。

次の方法をお試しください

ダンプファイルを編集し、plpgsql に関連するすべての行をコメントアウトします。


pg_dumpall の使用中のエラー

外部の pg_dumpall コマンドライン ツールを使用しようとすると、エラーが発生します。

次のような問題が考えられます

このツールにはスーパーユーザーのロールが必要です。

次の方法をお試しください

Cloud SQL はマネージド サービスであり、ユーザーにスーパーユーザーのロールや権限を付与することはありません。


ピアによって接続がリセットされた

エクスポート オペレーションが、エクスポート完了前にタイムアウトします。エラー メッセージ Could not receive data from client: Connection reset by peer. が表示されます。

次のような問題が考えられます

Cloud Storage が特定の期間内にデータを受信しない場合、接続がリセットされる。

次の方法をお試しください

pg_dump ツールを使用して手動でエクスポートします。


インポートに失敗した

エクスポートされた SQL ダンプファイルで参照されているユーザーが存在しない場合、インポートは失敗します。

次のような問題が考えられます

SQL ダンプをインポートする前に、オブジェクトを所有しているか、またはダンプされたデータベース内のオブジェクトに対する権限が付与されているデータベース ユーザーが存在する必要があります。 そうでない場合、復元で、元の所有権や権限でのオブジェクトの再作成に失敗します。

次の方法をお試しください

SQL ダンプをインポートする前に、データベース ユーザーを作成します。


エクスポート オペレーション中に接続が切断された

エクスポート オペレーション中に接続が切断しました。

次のような問題が考えられます

エクスポートが開始されてから最初の 7 分以内に、エクスポートで実行されているクエリでデータが生成されないため、Cloud Storage への接続がタイムアウトする可能性があります。

次の方法をお試しください

次のコマンドを使用して任意のクライアントから接続し、クエリの出力を標準出力に送信して、クエリを手動でテストします。

COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )

これは、エクスポートが開始されるとすぐにクライアントからデータの送信が開始されるためです。データが送信されていない接続を維持すると、最終的に接続が切断されてエクスポートが失敗し、操作が不確定な状態になります。また、gcloud からのエラー メッセージは次のように表示されます。

operation is taking longer than expected


エクスポート中に不明なエラーが発生した

データベースを Cloud Storage バケットにエクスポートしようとすると、エラー メッセージ Unknown error が表示されます。

次のような問題が考えられます

帯域幅の問題が原因で転送が失敗する可能性があります。

次の方法をお試しください

Cloud SQL インスタンスが Cloud Storage バケットとは異なるリージョンに存在している可能性があります。ある大陸から別の大陸へのデータの読み取りと書き込みではネットワークの使用量が多く、このような断続的な問題を引き起こす可能性があります。インスタンスとバケットのリージョンを確認します。


エクスポートを自動化する

エクスポートを自動化する場合。

次のような問題が考えられます

Cloud SQL には、エクスポートを自動化する方法がありません。

次の方法をお試しください

Google Cloud プロダクト(Cloud Scheduler、Pub/Sub、Cloud Functions)を使用して、独自の自動エクスポート システムを構築できます。


ERROR_RDBMS システムエラーが発生した

エラー メッセージ [ERROR_RDBMS] system error occurred が表示されます。

次のような問題が考えられます

  • ユーザーが必要なすべての Cloud Storage 権限を持っていない可能性があります。
  • データベース テーブルが存在しない可能性があります。

次の方法をお試しください

  1. バケットに対して少なくとも WRITER 権限があり、エクスポート ファイルに対して READER 権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。
  2. テーブルが存在していることを確認します。存在している場合は、バケットに対して正しい権限があることを確認します。

次のステップ