B.2 错误信息接口
错误消息可以起源于服务器端或 Client 端,并且每个错误消息都包含错误代码,SQLSTATE 值和消息字符串,如第 B.1 节“错误消息的源和组件”中所述。有关服务器端,Client 端和全局(服务器和 Client 端之间共享)错误的列 table,请参见第 B.3 节“错误消息参考”。
要从程序内部进行错误检查,请使用错误代码编号或符号,而不是错误消息字符串。消息字符串不经常更改,但是可以更改。另外,如果数据库 Management 员更改语言设置,则会影响消息字符串的语言。参见第 10.12 节“设置错误消息语言”。
在服务器级别的 SQL 错误日志中,在 Client 端程序内部以及在命令行中,都可以在服务器错误日志中找到 MySQL 中的错误信息。
Error Log
在服务器端,某些消息用于错误日志。有关配置服务器在何处以及如何写入日志的信息,请参阅第 5.4.2 节“错误日志”。
其他服务器错误消息旨在发送到 Client 端程序,并且如Client 端错误消息界面中所述可用。
SQL 错误消息界面
在 SQL 级别,MySQL 中有几种错误信息来源:
-
SQL 语句警告和错误信息可通过SHOW WARNINGS和SHOW ERRORS语句获得。 warning_count系统变量指示错误,警告和 Comments 的数量(如果禁用了sql_notes系统变量,则排除 Comments)。 error_count系统变量指示错误数。它的值不包括警告和 Comments。
-
GET DIAGNOSTICS语句可用于检查诊断区域中的诊断信息。参见第 13.6.7.3 节“获取诊断声明”。
-
显示从站状态语句输出包含有关副本服务器上发生的复制错误的信息。
-
如果InnoDBtable 的CREATE TABLE语句失败,则显示引擎的 INNODB 状态语句输出包含有关最新外键错误的信息。
Client 端错误消息界面
Client 端程序从两个来源收到错误:
-
源于 MySQLClient 端库中 Client 端的错误。
-
源于服务器端并由服务器发送给 Client 端的错误。它们在 Client 端库中接收,这使它们可用于主机 Client 端程序。
无论错误是从 Client 端库内部产生还是从服务器接收到,MySQLClient 端程序都会通过调用 Client 端库中的 C API 函数来获取错误代码,SQLSTATE 值,消息字符串和其他相关信息:
-
mysql_errno()返回 MySQL 错误代码。
-
mysql_sqlstate()返回 SQLSTATE 值。
-
mysql_error()返回消息字符串。
-
mysql_stmt_errno(),mysql_stmt_sqlstate()和mysql_stmt_error()是准备好的语句的相应错误函数。
-
mysql_warning_count()返回最新语句的错误,警告和 Comments 的数量。
有关 Client 端库错误功能的描述,请参见第 27.7 节“ MySQL C API”。
MySQLClient 端程序可能以多种方式响应错误。Client 端可能会显示错误消息,以便用户可以采取纠正措施,在内部尝试解决或重试失败的操作或采取其他措施。例如,(使用mysqlClient 端),连接服务器失败可能导致以下消息:
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 1231 (ER_WRONG_VALUE_FOR_VAR): Variable '%-.64s' can't
be set to the value of '%-.200s'
对于 MySQL NDB Cluster 错误,请使用ndb_perror。参见第 21.4.17 节“ ndb_perror-获取 NDB 错误消息信息”。
shell> ndb_perror 323
NDB error code 323: Invalid nodegroup id, nodegroup already existing:
Permanent error: Application error