Cloud SQL のエラー メッセージ

このページでは、Cloud SQL で表示されるエラー メッセージについて説明します。

概要

Cloud SQL のエラー メッセージはさまざまな原因で発生し、さまざまな場所に表示されます。エラー メッセージには、データベース エンジン自体、Cloud SQL サービス、クライアント アプリケーション、Cloud SQL Admin API の呼び出しから返されるものがあります。

このページでは、Cloud SQL でよく発生するエラーの一部をご紹介します。探しているエラーコードやメッセージが見つからない場合は、ここでソースの参照資料を探してください。

表示されているエラー メッセージの参照資料が見つからない場合は、関連する経験のある他のユーザーの投稿を以下の場所で検索することもできます。

オペレーション エラー

A | B | C | D | E | F | G | I | L | M | N | O | P | Q | R | S | T | U | W

エラー メッセージ トラブルシューティング
データベース DB_NAME への接続 xxx が中断した。 アプリケーションの接続が正しく終了していません。

以下の条件を確認してください。

  • アプリケーションが終了前に mysql_close() を呼び出さなかった。
  • 通信エラー
  • アプリケーションがサーバーにリクエストを発行せずに、「wait_timeout」または「interactive_timeout」で指定された秒数を超えてスリープ状態になっていた可能性がある。セクション 5.1.7、サーバー システム変数をご覧ください。
  • データ転送の途中でアプリケーションが突然終了した。
  • max_allowed_packet 変数の値が小さすぎるか、クエリで mysqld に割り当てられた量より多くのメモリが必要。この問題は、max_allowed_packet フラグの値を大きくすることで解決できます。
アクセスが拒否された(この操作を行うには、SUPER の権限の少なくとも 1 つが必要) ソース データベースのビュー、関数、またはプロシージャが、Cloud SQL でサポートされていない方法で DEFINER を参照している可能性があります。

外部データベースで DEFINER 句を更新します。たとえば、root@localhostroot@% または non-superuser に更新します。詳細については、保存オブジェクトのアクセス制御をご覧ください。

ユーザー 'XXX'@'XXX'(使用パスワード: XXX)のアクセスが拒否された。 次のようないくつかの原因が考えられます。
  • ユーザー名(またはパスワード)が正しくない。
  • ユーザーが @XXX 以外の URL から接続している。
  • ユーザーが、接続しようとしているデータベースに対する適切な権限を持っていない。

次のことをお試しください。

  • ユーザー名と対応するパスワードを確認します。
  • 接続元をチェックして、ユーザーがアクセス権を持っている URL と一致しているかどうかを確認します。
  • データベース内のユーザーの権限をチェックします。
割り振られた IP 範囲がネットワークで見つからない。 割り振り範囲を変更または削除した後に VPC ピアリングが更新されませんでした。

プライベート接続を変更する必要があります。次のコマンドを使用します。--force 引数を必ず使用してください。

gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
ユーザー 'root'@'%' に対するコマンドがテーブルで拒否された。 ユーザーは、この操作に必要なすべての権限を持っていません。

以下のように入力します。

  1. データベースに接続(Cloud Shell などを使用)して root としてログインします。
  2. USE mysql; を実行します
  3. この構文を使用して、次の権限を付与します。
    GRANT PERMISSION_1,PERMISSION_2 ON *.* TO 'root' WITH GRANT OPTION;
       
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
    • CREATE
    • DROP
    • RELOAD
    • SHUTDOWN
    • PROCESS
    • REFERENCES
    • INDEX
    • ALTER
    • SHOW DATABASES
    • CREATE TEMPORARY TABLES
    • LOCK TABLES
    • EXECUTE
    • REPLICATION SLAVE
    • REPLICATION CLIENT
    • CREATE VIEW
    • SHOW VIEW
    • CREATE ROUTINE
    • ALTER ROUTINE
    • CREATE USER
    • EVENT
    • TRIGGER
    • CREATE TABLESPACE
  4. USE 'Database_Name'; を実行します。ここで、Database_Name はビューを作成するデータベースです。
  5. セッション内のすべての作成ビューを実行して commit します。
エラー メッセージ トラブルシューティング
不正なリクエスト。 このメッセージにはさまざまな原因があります。最も一般的なのは Illegal Argument です。この場合、リクエストで間違った引数を使用しているか、引数の値が無効です。他の多くの原因については、エラー メッセージに有用なヒントが含まれている場合があります。

Illegal Argument の場合、各引数が許可され、引数の各値が有効であることを確認します。他のすべての原因については、ログファイルをチェックして、詳細情報を確認してください。

エラー メッセージ トラブルシューティング
CreateConnection で割り振り範囲を変更することはできません。UpdateConnection を使用してください。 割り振り範囲を変更または削除した後に VPC ピアリングが更新されませんでした。

プライベート接続を変更する必要があります。次のコマンドを使用します。--force 引数を必ず使用してください。

gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
ピアによって接続がリセットされた。

エクスポートを実行しようとして、Cloud Storage が特定の時間枠内にデータを受信しない場合、接続がリセットされます。

pg_dump を使用して手動でエクスポートしてみてください。

Constraints/sql.restrictAuthorizedNetworks。 クローン作成のオペレーションが、Authorized Networks 構成によってブロックされている。Authorized Networks は、Google Cloud コンソールの [接続] セクションでパブリック IP アドレス用に構成されており、セキュリティに関する考慮事項により、クローン作成が許可されていません。

可能であれば、Cloud SQL インスタンスからすべての Authorized Networks エントリを削除します。それができない場合は、Authorized Networks エントリなしでレプリカを作成します。

ファイルグループ PRIMARY のディスク容量が不足しているため、データベース database_name に新しいページを割り当てることができない。 PRIMARY ファイル グループ(データベースのメインファイル グループとデフォルト ファイルグループ)の容量が不足しています。

sp_helpdb コマンドを使用して、データベースに関する情報を取得します。

次の解決策を検討してください。

  • ディスク容量を手動で増やすか、データベースのデータを減らします。
  • データベース インスタンスで Automatic storage increase が有効になっていることを確認します。
  • ファイルグループを追加して、そこにデータを移動します。
  • 拡張が制限されていないことを確認します。ALTER DATABASE コマンドを使用して自動拡張を有効にし(有効になっていない場合)、最大ファイルサイズを増やします。
  • tempdb ファイルを管理します。DBCC OPENTRAN コマンドと DBCC SQLPERF コマンドを使用して、tempdb ファイルまたはトランザクション ログのサイズを増加させている実行中のトランザクションがあるかどうか確認します。
エラー メッセージ トラブルシューティング
データベース user が存在しない。 gcloud sql connect --user はデフォルトの postgres ユーザーでのみ機能します。

デフォルト ユーザーで接続してから、ユーザーを変更します。

ディスクに空きがない。 レプリカの作成中にプライマリ インスタンスのディスクの空きがなくなる可能性があります。

プライマリ インスタンスを編集して、より大きなディスクサイズにアップグレードします。

エラー メッセージ トラブルシューティング
サブネットワークを作成できない。 IP 範囲にはこれ以上使用可能なアドレスはありません。

割り振られた IP 範囲に空きブロックが見つかりませんでした。このサービス プロバイダに新しい範囲を割り振ってください。

割り振り済みの IP 範囲にこれ以上使用可能なアドレスがない。

次のようなシナリオが考えられます。

  • プライベート サービス接続に割り振られた IP 範囲のサイズが /24 より小さい。
  • プライベート サービス接続に割り振られた IP 範囲のサイズが、Cloud SQL インスタンスの数に対して小さすぎる。
  • インスタンスを複数のリージョンで作成すると、割り振られた IP 範囲のサイズに関する要件が大きくなります。割り振られた範囲のサイズをご覧ください。

上のシナリオに該当する場合は、プライベート サービス接続に対して既存の IP 範囲を拡張するか、追加の IP 範囲を割り振ります

新しい範囲を割り振る場合は、既存の割り振りと重複する割り振りを作成しないように注意してください。

新しい IP 範囲を作成した後、次のコマンドを使用して VPC ピアリングを更新します。

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK
--project=PROJECT_ID \
--force

既存の割り振りを拡張する場合は、割り振り範囲を増やすのみとし、減らさないように注意してください。たとえば、元の割り振りが 10.0.10.0/24 だった場合、新しい割り振りを少なくとも 10.0.10.0/23 に設定します。

一般的に、/24 の割り振りから開始する場合は、各条件(追加のインスタンス タイプのグループ、追加のリージョン)で /mask を 1 つずつ減らすのが基本的なルールです。たとえば、同じ割り振りで両方のインスタンス タイプのグループを作成しようとしている場合も、/24 から /23 にするだけで十分です。

既存の IP 範囲を拡張した後、次のコマンドを使用して VPC ピアリングを更新します。

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
エラー メッセージ トラブルシューティング
(gcloud.sql.connect)クライアントには ipv6 接続がなく、データベース インスタンスには ipv4 アドレスがない。 Cloud Shell を使用してプライベート IP インスタンスに接続しようとしています。

現時点では、プライベート IP アドレスのみを持つインスタンスに Cloud Shell から接続することはできません。

テーブルをダンプする際に max_allowed_packet バイトを超えるパケットを取得した。 パケットが、設定された許容量を超えました。

max_allowed_packet オプションを指定して mysqldump を使用します。

マネージド インポート移行の mysqldump フラグの使用方法については、使用可能な初期同期フラグとデフォルトの初期同期フラグをご覧ください。

エラー メッセージ トラブルシューティング
InnoDB: ./ibtmp1 ファイルへの書き込みがオフセット XXXX で失敗した。YYYY バイトが書き込まれている必要があるが、0 しか書き込まれていない。 インスタンスで自動バックアップを実行するときにハードリミットに達しました。

OS とファイル システムでこのサイズのファイルがサポートされていることを確認します。ディスクに空きがあること、またはディスク割り当てが不足していないことを確認します。Google Cloud コンソールから割り当ての増加をリクエストするか、インスタンスを編集して、より大きなディスクサイズにアップグレードできます。

内部エラー。 プロジェクトに、この機能に必要なサービス ネットワーキングのサービス アカウントがない可能性があります。

サービスの権限を修復するには、Service Networking API を無効にして、5 分待ってから再度有効にします。

無効なリクエスト: インスタンスのサービス ネットワーキング構成が不正。 プロジェクトで Service Networking API が有効になっていません。

プロジェクトで Service Networking API を有効にします。Cloud SQL インスタンスにプライベート IP アドレスの割り当てを試行中で、共有 VPC を使用しているときにこのエラーが表示される場合は、ホスト プロジェクトに対して Service Networking API も有効にする必要があります。

エラー メッセージ トラブルシューティング
メタデータ テーブルがロックされている。 別のクエリ、プロセス、またはトランザクションがクエリをブロックし、テーブルをロックしています。

テーブルをロックしたプロセスを見つけて、そのプロセスを停止します。

  1. sql> による診断を行い、プロセスリストを表示します。

    リストの最初の項目が、後続の項目が待機しているロックを保持している場合があります。

  2. SHOW INNODB STATUS コマンドも有用です。
  3. KILL <var>PID</var> コマンドを実行します。
エラー メッセージ トラブルシューティング
ネットワークの関連付けに失敗した。 プロジェクトで Service Networking API が有効になっていません。

プロジェクトで Service Networking API を有効にします。Cloud SQL インスタンスにプライベート IP アドレスの割り当てを試行中で、共有 VPC を使用しているときにこのエラーが表示される場合は、ホスト プロジェクトに対して Service Networking API も有効にする必要があります。

エラー メッセージ トラブルシューティング
別のオペレーションがすでに進行中だったので、このオペレーションは失敗しました。 Cloud SQL のほとんどのオペレーションが同時に実行されています。一度に実行できる実行は 1 つだけです。

前のオペレーションが終了するのを待ってから、別のオペレーションを開始します。

このインスタンスに対するオペレーションが無効。 このエラーは、instances.restoreBackup に対する API 呼び出しから返されます。これは、バックアップ サイズ(YY GB)よりストレージ サイズ(XX GB)が小さいインスタンスには、バックアップから復元できないことを意味します。

ターゲット インスタンスを編集して、ストレージ サイズを増やします。

エラー メッセージ トラブルシューティング
ユーザー「postgres」のパスワード認証に失敗しました。 新しい Cloud SQL for PostgreSQL インスタンスを作成すると、デフォルトの管理ユーザー postgres が作成されますが、パスワードは作成されません。このユーザーでログインできるようにするには、このユーザーのパスワードを設定する必要があります。

エラー メッセージ トラブルシューティング
割り当てを超えています。 1 分あたりまたは 1 日あたりの割り当ての上限に達しました。Cloud SQL の割り当てと上限を確認します。

Google Cloud Console から割り当ての増加をリクエストします。

エラー メッセージ トラブルシューティング
残りの接続スロットが予約済み。 最大接続数に達しました。

max_connections フラグの値を増やしてください。データベース フラグを構成するをご覧ください。

リクエストに有効な API キーがない。 有効なサービス アカウント キーの JSON ファイルがないか、想定されている場所に保存されていない可能性があります。

GOOGLE_APPLICATION_CREDENTIALS 環境変数に設定されている場所に有効なサービス アカウント キーの JSON ファイルがあること、変数が正しい場所を指していることを確認します。

エラー メッセージ トラブルシューティング
指定された鍵が長すぎる(キーの最大長は 767 バイト)。 外部プライマリ インスタンスに innodb_large_prefix 変数が設定されている可能性があります。

レプリカを作成するときに、innodb_large_prefix フラグを ON に設定します。あるいは、フラグを使用して、既存のレプリカを更新します。

SSL エラー: 無効なパディング。 サーバー証明書エラー。

新しいサーバー証明書を作成して、ローテーションします。

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

次のことをお試しください。

  • バケットに対して少なくとも WRITER 権限があり、エクスポート ファイルに対して READER 権限があることを確認してください。Cloud Storage のアクセス制御の構成について詳しくは、アクセス制御リストの作成と管理をご覧ください。
  • テーブルが存在していることを確認します。テーブルが存在している場合は、ストレージ バケットに対して適切な権限があることを確認します。
エラー メッセージ トラブルシューティング
テーブルの定義が変更された。 エクスポート処理中にテーブルに対して変更が発生しました。

エクスポート オペレーション中に次のステートメントを使用すると、ダンプ トランザクションが失敗する可能性があります。

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE

これらのステートメントのいずれかをダンプ オペレーションから削除します。

一時ファイルサイズが temp_file_limit を超えた。 データベースの使用量に対して temp_file_limit フラグの値が小さすぎます。

temp_file_limit サイズを増やします。データベース フラグを構成するをご覧ください。

テーブル db.table が存在しない MySQL の再起動後に 1 つ以上の InnoDB テーブルが表示されなくなり、MySQL エラーログに次の警告が同時に表示された場合は、外部キーの列と参照されるキーの列が同期されていません。
[Warning] InnoDB: Load table db.table failed, the table has missing
foreign key indexes. Turn off 'foreign_key_checks' and try again.
[Warning] InnoDB: Cannot open table db/table from the internal data
dictionary of InnoDB though the .frm file for the table exists.
See InnoDB troubleshooting
for more information.
      

データベースを再起動した後、MySQL が最初にアクセスするときに、InnoDB 辞書キャッシュにテーブルを読み込む必要があります。不一致が検出されると、そのテーブルへのアクセスがブロックされます。

mysql> select * from db.table;
ERROR 1146 (42S02): Table db.table doesn't exist
      

MySQL セッションで foreign_key_checks を無効にすると、テーブルへのアクセスが再び可能になります。テーブルにアクセスして辞書キャッシュに読み込むと、次のデータベースが再起動されるまで、InnoDB は外部キーの不一致をチェックせず、エラーも通知しません。

さらなる問題を回避するため、外部キーの不一致を修正する必要があります。

  1. mysql クライアント セッションの foreign_key_checks を無効にして、テーブルにアクセスします。
    mysql> SET SESSION FOREIGN_KEY_CHECKS=0;
                
  2. 親テーブルと子テーブルを検査し、外部キーの列と参照されるキーの列の不一致を特定します。
    mysql> SHOW CREATE TABLE parent_table;
    mysql> SHOW CREATE TABLE child_table;
                

    対応する列のデータ型が類似していることを確認します。INTEGERDECIMAL などの固定精度型のサイズと符号は同じです。非バイナリ(文字)文字列の列の場合、文字セットと照合を同じにする必要があります。

  3. ALTER TABLE ステートメントを使用して、この不一致を修正します。一部のオペレーションでは、最初に外部キー制約を削除して変更を適用してから、外部キーを再度追加することが必要になる場合があります。
  4. foreign_key_checks を再度有効にします。
    mysql> SET SESSION FOREIGN_KEY_CHECKS=1;
                
(タイムアウト)エクスポート中。 CSV 形式と SQL 形式ではエクスポート方法が異なります。SQL 形式にはデータベース全体が含まれ、完了までに時間がかかる可能性があります。

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

接続が多すぎる。 max_connections フラグの値が大きすぎると、このエラーが発生する原因になる可能性があります。これは、シーケンスから外れたフラグを有効にした場合にも発生します。

max_connections フラグの値を小さくします。または、フラグを削除した後に hard drain を行うためカスタマー サポートに連絡します。これにより、フラグや設定を使用せずに、新しい構成を使用して別のホストでインスタンスが再起動します。

エラー メッセージ トラブルシューティング
接続失敗。 認証はさまざまなレベルで行われるため、多くの原因が考えられます。
  • データベース レベルでは、データベース ユーザーが存在し、パスワードが一致している必要があります。
  • プロジェクト レベルでは、ユーザーに serviceusage.services.use 権限や cloudsql.instances.connect 権限などの適切な IAM 権限がない可能性があります。
  • ネットワーク レベルでは、Cloud SQL インスタンスでパブリック IP を使用している場合、接続のソース IP が承認済みネットワーク内に存在している必要があります。

次のことをお試しください。

  • ユーザーが存在していて、パスワードが一致することを確認します。
  • ユーザー アカウントに Service Usage Consumer ロールを割り当てます。このロールには権限 serviceusage.services.use が含まれています。
  • パブリック IP を使用する場合は、送信元 IP が承認済みネットワークに存在していることを確認します。
information_schema に不明なテーブル COLUMN_STATISTICS がある。 これは、MySQL 8.0 の mysqldump バイナリを使用して MySQL 5.7 データベースからデータをダンプし、それを MySQL 8.0 データベースにインポートする場合に発生します。

MySQL 5.7 データベースからデータをダンプし、MySQL 8.0 データベースにインポートする場合は、必ず MySQL 5.7 の mysqldump バイナリを使用してください。MySQL 8.0 の mysqldump バイナリを使用する場合は、--column-statistics=0 フラグを追加する必要があります。

エラー メッセージ トラブルシューティング
x509: いずれの名前に対しても証明書が無効である。 既知の問題: 現時点では、Cloud SQL Proxy Dialer は Go 1.15 と互換性がありません。

修正されるまで、回避策が記載されている GitHub のディスカッションをご覧ください。

不明なエラー

次の表に、Unknown Error が発生する可能性がある既知のケースとその解決方法(可能な場合)を示します。このリストはすべてを網羅しているわけではありません。以下の表で該当するケースが見つからない場合は、Cloud SQL の公開バグトラッカーで確認してください。問題が見つからない場合は、レポートを送信するか、他のサポート オプションをご確認ください。

オペレーション 次のような問題が考えられます 次の方法をお試しください
ユーザーの追加 データベースにすでに存在するユーザーを追加しようとすると、このエラーが発生することがあります。 ユーザーがデータベースにまだ存在していないことを確認します。
バックアップ 自動バックアップ中または手動バックアップ中にこのエラーが表示される場合は、インスタンスのディスクに空きがない可能性があります。 一時ファイルのサイズが大きすぎる場合は、インスタンスを再起動してそのファイルを削除し、ディスクの空き容量を増やしてください。それ以外の場合は、インスタンスをより大きなディスクサイズにアップグレードする必要があります。
クローン このエラーは、選択したゾーンにリソース不足がある場合に発生することがあります。 リージョン内の別のゾーンを試すか、しばらくしてからもう一度お試しください。
インスタンスの作成
  • このエラーは、最近削除したインスタンスと同じ名前を再利用しようとすると発生します。
  • また、接続性が不安定で発生することもあります。
  • ログに、プロジェクトで Service Networking API が有効になっていないことが示される可能性があります。
  • このエラーは、複数のインスタンスの作成を並行して行おうとする場合にも確認されています。たとえば、Terraform スクリプトによってこの試みが可能になります。
  • 別の原因としては、特定のリソースが枯渇している、または割り当て上限を超過した可能性があります。ログで Quota 'INTERNAL_FORWARDING_RULES_WITH_TARGET_INSTANCE_PER_NETWORK' exceeded. Limit: 100.0 globally のようなエントリを探します。
  • このエラーは、IP 範囲に使用可能なアドレスがなくなった場合で、サブネットの作成に失敗すると発生することがあります。
  • インスタンス名を削除した後、1 週間は再利用できません。
  • 接続が断続的になっている場合は、再試行してください。
  • プロジェクトで Service Networking API を有効にします
  • 並列インスタンス作成スクリプトは、1 つのインスタンスの作成のみ成功します。各インスタンス作成オペレーションが完了してから次のインスタンスに進むよう、スクリプトを修正してください。
  • 新しい範囲を割り振ってください
エクスポート データベースを Cloud Storage バケットにエクスポートしようとしたときにこのエラーが表示された場合は、帯域幅の問題が原因で転送が失敗している可能性があります。 Cloud SQL インスタンスが Cloud Storage バケットとは異なるリージョンに存在している可能性があります。ある大陸から別の大陸へのデータの読み取りと書き込みではネットワークの使用量が多く、このような断続的な問題を引き起こす可能性があります。
フェイルオーバー(自動) 自動フェイルオーバー オペレーションでは、プライマリ インスタンスが応答可能な状態であることをサービスが検出すると、このエラー メッセージが生成されます。 この場合、何もする必要はありません。フェイルオーバーは不要なため、発生することはありません。
インポート インポート ファイルに、スーパーユーザー ロールを必要とするステートメントが含まれている可能性があります。 ファイルを編集して、スーパーユーザー ロールを必要とするステートメントを削除します。

Cloud SQL は一部のサードパーティ バイナリ(mysqld など)を使用するため、不明なエラー メッセージが生成されることがあります。このようなエラーはサードパーティのバイナリの内部エラーで、Cloud SQL の範囲外です。ただし、Cloud SQL のログファイルで具体的なエラーが確認できる場合があります。

また、不明なエラーコードの場合もあります。その場合、完全なメッセージは Unknown Error Code になります。