错误信息接口
错误消息可以起源于服务器端或客户端,并且每个错误消息都包含错误代码,SQLSTATE值和消息字符串,如第B.1节“错误消息的源和组件”中所述。有关服务器端,客户端和全局(服务器和客户端之间共享的)错误的列表,请参见第B.3节“错误消息参考”。
要从程序内部进行错误检查,请使用错误代码编号或符号,而不是错误消息字符串。消息字符串不经常更改,但是可以更改。另外,如果数据库管理员更改语言设置,则会影响消息字符串的语言。请参见“设置错误消息语言”。
MySQL错误信息在服务器错误日志中,SQL级别,客户端程序内部以及命令行中可用。
- 错误记录
- SQL错误消息接口
- 客户端错误消息界面
- 命令行错误消息界面
错误记录
在服务器端,某些消息用于错误日志。有关配置服务器在何处以及如何写入日志的信息,请参见“MySQL服务器错误日志”。
其他服务器错误消息打算发送到客户端程序,并且如客户端错误消息接口中所述可用。
特定错误代码所在的范围确定服务器是将错误消息写入错误日志还是将其发送给客户端。有关这些范围的信息,请参见错误代码范围。
SQL错误消息接口
在SQL级别,MySQL中有几种错误信息来源:
- SQL语句警告和错误信息可通过
SHOW WARNINGS
和SHOW ERRORS
语句获得。所述warning_count
系统变量指示错误,警告和注意事项的数目(与排除在外,如果票据sql_notes
系统变量是禁止)。该error_count
系统变量指示错误的数量。它的值不包括警告和注释。 - 该
GET DIAGNOSTICS
语句可用于检查诊断区域中的诊断信息。请参见“GET DIAGNOSTICS语句”。 SHOW SLAVE STATUS
语句输出包含有关复制从属服务器上发生的复制错误的信息。SHOW ENGINE INNODB STATUS
语句输出包含有关表CREATE TABLE
语句InnoDB
失败的最新外键错误的信息。
客户端错误消息界面
客户端程序从两个来源收到错误:
- 源于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 C API”。
MySQL客户端程序可能以多种方式响应错误。客户端可能会显示错误消息,以便用户可以采取纠正措施,在内部尝试解决或重试失败的操作或采取其他措施。例如,(使用mysql客户端),连接服务器失败可能导致以下消息:
shell>mysql -h no-such-host ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (0)
命令行错误消息界面
该PERROR程序提供从约错误号命令行信息。请参见“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群集错误,请使用ndb_perror。
shell>ndb_perror 323 NDB error code 323: Invalid nodegroup id, nodegroup already existing: Permanent error: Application error