セクションB.1「エラーメッセージのソースと要素」 で説明されているように、エラーメッセージはサーバー側またはクライアント側で生成され、各エラーメッセージにはエラーコード、SQLSTATE 値、およびメッセージ文字列が含まれます。 サーバー側、クライアント側およびグローバル (サーバーとクライアント間で共有) のエラーのリストは、MySQL 8.0 Error Message Reference を参照してください。
プログラム内からのエラーチェックには、エラーメッセージ文字列ではなく、エラーコード番号または記号を使用します。 メッセージ文字列は頻繁には変更されませんが、変更は可能です。 また、データベース管理者がメッセージ文字列の言語に影響する言語設定を変更した場合は、セクション10.12「エラーメッセージ言語の設定」 を参照してください。
MySQL のエラー情報は、サーバーエラーログ、SQL レベル、クライアントプログラムおよびコマンドラインから入手できます。
サーバー側では、一部のメッセージはエラーログ用です。 サーバーがログを書き込む場所と方法の構成の詳細は、セクション5.4.2「エラーログ」 を参照してください。
その他のサーバーエラーメッセージはクライアントプログラムに送信することを目的としており、クライアントエラーメッセージインタフェース で説明されているように使用できます。
特定のエラーコードが存在する範囲によって、サーバーがエラーメッセージをエラーログに書き込むか、クライアントに送信するかが決まります。 これらの範囲の詳細は、エラーコード範囲 を参照してください。
SQL レベルでは、MySQL にエラー情報のソースがいくつかあります:
SQL ステートメントの警告およびエラーの情報は、
SHOW WARNINGS
ステートメントおよびSHOW ERRORS
ステートメントを使用して表示できます。warning_count
システム変数は、エラー、警告およびノートの数を示します (sql_notes
システム変数が無効な場合、ノートは除外されます)。error_count
システム変数はエラー数を示します。 この値には警告および注意は含まれていません。GET DIAGNOSTICS
ステートメントは、診断領域の診断情報を調査するために使用できます。 セクション13.6.7.3「GET DIAGNOSTICS ステートメント」を参照してください。SHOW SLAVE STATUS
ステートメントの出力には、レプリカサーバーで発生したレプリケーションエラーに関する情報が含まれます。InnoDB
テーブルに対するCREATE TABLE
ステートメントが失敗した場合、SHOW ENGINE INNODB STATUS
ステートメントの出力には、最後の外部キーエラーに関する情報が含まれています。
クライアントプログラムは、次の 2 つのソースからエラーを受け取ります:
MySQL クライアントライブラリ内からクライアント側で発生したエラー。
サーバー側で発生し、サーバーによってクライアントに送信されるエラー。 これらはクライアントライブラリ内で受信され、ホストクライアントプログラムで使用できるようになります。
特定のエラーコードが存在する範囲によって、クライアントライブラリ内から発生したものか、クライアントがサーバーから受信したものかが決まります。 これらの範囲の詳細は、エラーコード範囲 を参照してください。
エラーがクライアントライブラリ内から発生したか、サーバーから受信されたかに関係なく、MySQL クライアントプログラムは、クライアントライブラリで C API 関数をコールして、エラーコード、SQLSTATE 値、メッセージ文字列およびその他の関連情報を取得します:
mysql_errno()
は、MySQL エラーコードを返します。mysql_sqlstate()
は SQLSTATE 値を返します。mysql_error()
はメッセージ文字列を返します。mysql_stmt_errno()
、mysql_stmt_sqlstate()
およびmysql_stmt_error()
は、プリペアドステートメントに対応するエラー関数です。mysql_warning_count()
は、最新のステートメントのエラー、警告およびノートの数を返します。
クライアントライブラリのエラー関数については、MySQL 8.0 C API Developer Guide を参照してください。
MySQL クライアントプログラムは、様々な方法でエラーに応答する場合があります。 クライアントはエラーメッセージを表示して、ユーザーが修正措置を講じるか、内部的に失敗した操作の解決または再試行を試みるか、または他のアクションを実行できるようにすることができます。 たとえば、(mysql クライアントを使用して) サーバーへの接続に失敗すると、次のメッセージが表示されることがあります:
shell> mysql -h no-such-host
ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (0)
perror プログラムは、コマンド行からエラー番号に関する情報を表示します。 セクション4.8.2「perror — MySQL エラーメッセージ情報の表示」を参照してください。
shell> perror 1231
MySQL error code MY-001231 (ER_WRONG_VALUE_FOR_VAR): Variable '%-.64s'
can't be set to the value of '%-.200s'
MySQL NDB Cluster エラーの場合は、ndb_perror を使用します。 セクション23.4.16「ndb_perror — NDB エラーメッセージ情報の取得」を参照してください。
shell> ndb_perror 323
NDB error code 323: Invalid nodegroup id, nodegroup already existing:
Permanent error: Application error