文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  错误消息和常见问题  /  错误消息来源和元素

B.1 错误消息来源和元素

本节讨论错误消息在 MySQL 中的来源以及它们包含的元素。

错误消息来源

错误消息可能来自服务器端或客户端。

  • 在服务器端,错误消息可能发生在启动和关闭过程中,也可能发生在执行 SQL 语句过程中遇到的问题等。

    • MySQL 服务器会将其错误消息写入其错误日志。这些消息指示数据库管理员关注的 issue 或需要 DBA 操作的 issue。

    • 服务器会将其他错误消息发送到客户端程序。这些消息指示仅与特定客户端相关的 issue。MySQL 客户端库接收来自服务器的错误,并将这些错误提供给主机客户端程序。

  • 客户端错误消息是从 MySQL 客户端库内部生成的,通常涉及与服务器通信的问题。

写入错误日志的示例服务器端错误消息

  • 此消息在启动过程中生成,提供了状态或进度指示器

    2018-10-28T13:01:32.735983Z 0 [Note] [MY-010303] [Server] Skipping
    generation of SSL certificates as options related to SSL are specified.
  • 此消息指示需要 DBA 操作的 issue

    2018-10-02T03:20:39.410387Z 768 [ERROR] [MY-010045] [Server] Event Scheduler:
    [evtuser@localhost][myschema.e_daily] Unknown database 'mydb'

示例服务器端错误消息,发送到客户端程序,如 mysql 客户端显示的那样

mysql> SELECT * FROM no_such_table;
ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

示例客户端错误消息,来自客户端库内部,如 mysql 客户端显示的那样

$> mysql -h no-such-host
ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (-2)

无论错误是来自客户端库内部还是从服务器接收的,MySQL 客户端程序都可能以不同的方式响应。如上所示,客户端可能会显示错误消息,以便用户采取纠正措施。客户端可能会尝试在内部解决或重试失败的操作,或采取其他操作。

错误消息元素

当发生错误时,错误信息将包含几个元素:错误代码、SQLSTATE 值和消息字符串。这些元素具有以下特征

  • 错误代码:此值为数字。它是 MySQL 特定的,不可移植到其他数据库系统。

    每个错误号都有一个相应的符号值。例如

    错误消息中使用的错误代码集被划分为不同的范围;请参阅 错误代码范围.

    错误代码在给定 MySQL 系列的通用可用性 (GA) 版本中是稳定的。在系列达到 GA 状态之前,新的代码可能仍在开发中,可能会发生变化。

  • SQLSTATE 值:此值为一个五字符字符串(例如,'42S02')。SQLSTATE 值取自 ANSI SQL 和 ODBC,比数字错误代码更标准化。SQLSTATE 值的前两位字符表示错误类别

    • 类别 = '00' 表示成功。

    • 类别 = '01' 表示警告。

    • 类别 = '02' 表示 未找到。 这是在游标的上下文中相关的,用于控制游标到达数据集末尾时发生的情况。当 SELECT ... INTO var_list 语句检索不到行时,也会发生这种情况。

    • 类别 > '02' 表示异常。

    对于服务器端错误,并非所有 MySQL 错误号都有对应的 SQLSTATE 值。在这些情况下,将使用 'HY000'(一般错误)。

    对于客户端错误,SQLSTATE 值始终为 'HY000'(一般错误),因此它对于区分不同的客户端错误没有意义。

  • 消息字符串:此字符串提供错误的文本描述。

错误代码范围

错误消息中使用的错误代码集被划分为不同的范围,每个范围都有自己的用途

  • 1 到 999:全局错误代码。此错误代码范围称为 全局,因为它是一个由服务器和客户端共享的范围。

    当此范围内的错误来自服务器端时,服务器会将其写入错误日志,并在错误代码前面添加六个数字的零填充,并添加 MY- 前缀。

    当此范围内的错误来自客户端时,客户端库会将其提供给客户端程序,不进行零填充或添加前缀。

  • 1,000 到 1,999:服务器错误代码,保留用于发送到客户端的消息。

  • 2,000 到 2,999:客户端错误代码,保留用于客户端库。

  • 3,000 到 4,999:服务器错误代码,保留用于发送到客户端的消息。

  • 5,000 到 5,999:错误代码,保留用于 X Plugin,用于发送到客户端的消息。

  • 10,000 到 49,999:服务器错误代码,保留用于写入错误日志(不发送到客户端)的消息。

    当此范围内的错误发生时,服务器会将其写入错误日志,并在错误代码前面添加六个数字的零填充,并添加 MY- 前缀。

  • 50,000 到 51,999:错误代码,保留用于第三方。

服务器处理写入错误日志的错误消息与发送到客户端的错误消息不同

  • 当服务器将消息写入错误日志时,它将在错误代码前面添加六个数字的零填充,并添加 MY- 前缀(例如:MY-000022MY-010048)。

  • 当服务器将消息发送到客户端程序时,它不会在错误代码前面添加零填充或前缀(例如:10363013)。