Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Performance Schema Connection Attribute Tables

29.12.9 Performance Schema Connection Attribute 表

连接属性是应用程序可以在连接时传递给服务器的键值对。对于基于C API的客户端库(libmysqlclient),mysql_options()mysql_options4()函数定义了连接属性集。其他MySQL连接器可能提供自己的属性定义方法。

这些性能模式表公开了属性信息:

此外,写入审计日志的连接事件可能包括连接属性。请参阅第8.4.5.4节,“Audit Log File Formats”

以下划线开头的属性名(_)是保留给内部使用的,应由应用程序创建。这种约定允许MySQL在不与应用程序属性冲突的情况下引入新的属性,并使应用程序定义自己的属性而不会与内部属性发生冲突。

在给定连接中可见的连接属性集取决于诸如平台、MySQL连接器以及客户端程序等因素。

libmysqlclient客户端库设置这些属性:

  • client_name:客户端名称(libmysql)

  • client_version:客户端库版本

  • os:操作系统(例如,Linux, Win64)

  • pid:客户端进程ID

  • platform:机器平台(例如,x86_64)

  • thread:客户端线程ID(Windows only)

其他MySQL连接器可能定义自己的连接属性。

MySQL Connector/++为使用X DevAPI或X DevAPI for C的应用程序定义了这些属性:

  • client_license:连接器许可证类型(例如,GPL-2.0)

  • client_name:连接器名称(mysql-connector-cpp)

  • client_version:连接器版本

  • os:操作系统(例如,Linux, Win64)

  • pid:客户端进程ID

  • platform:机器平台(例如,x86_64)

  • source_host:客户端运行的主机名

  • thread:客户端线程ID(Windows only)

MySQL Connector/J定义了这些属性:

  • client_name:客户端名称

  • client_version:客户端库版本

  • os:操作系统(例如,Linux, Win64)

  • client_license:连接器许可证类型

  • _platform: 机器平台(例如,x86_64)

  • _runtime_vendor: Java 运行时环境(JRE)供应商

  • _runtime_version: Java 运行时环境(JRE)版本

MySQL Connector/NET 定义了这些属性:

  • _client_version: 客户端库版本。

  • _os: 操作系统(例如,LinuxWin64)。

  • _pid: 客户端进程 ID。

  • _platform: 机器平台(例如,x86_64)。

  • _program_name: 客户端名称。

  • _thread: 客户端线程 ID(仅限 Windows)。

Connector/Python 实现定义了这些属性;一些值和属性取决于 Connector/Python 实现(纯 Python 或 c-扩展):

  • _client_license: 连接器的许可类型;GPL-2.0Commercial。(仅限纯 Python)。

  • _client_name: 设置为 mysql-connector-python(纯 Python)或 libmysql(c-扩展)。

  • _client_version: 连接器版本(纯 Python)或 mysqlclient 库版本(c-扩展)。

  • _os: 运行连接器的操作系统(例如,LinuxWin64)。

  • _pid: 来源机器上的进程标识符(例如,26955

  • _platform: 机器平台(例如,x86_64)。

  • _source_host: 连接器连接到的机器的主机名。

  • _connector_version: 连接器版本(例如,8.4.0)(仅限 c-扩展)。

  • _connector_license: 连接器的许可类型;GPL-2.0Commercial(仅限 c-扩展)。

  • _connector_name: 始终设置为 mysql-connector-python(仅限 c-扩展)。

PHP 定义了取决于它是如何编译的属性:

  • 使用 libmysqlclient 编译:标准 libmysqlclient 属性,前面描述过。

  • 使用 mysqlnd 编译:仅有 _client_name 属性,其值为 mysqlnd

许多 MySQL 客户端程序将一个名为 program_name 的属性设置为客户端名称。例如,mysqladminmysqldumpprogram_name 设置为 mysqladminmysqldump,分别。MySQL Shell 将 program_name 设置为 mysqlsh

一些 MySQL 客户端程序定义了额外的属性:

  • mysql

    • os_user: 运行程序的操作系统用户名称。可用在 Unix 和类 Unix 系统上以及 Windows 上。

    • os_sudouser: SUDO_USER 环境变量的值。可用在 Unix 和类 Unix 系统上。

    mysql 连接属性,其值为空,不会发送。

  • mysqlbinlog

    • _client_role: binary_log_listener

  • 副本连接:

    • program_name: mysqld

    • _client_role: binary_log_listener

    • _client_replication_channel_name: 通道名称。

  • FEDERATED 存储引擎连接:

    • program_name: mysqld

    • _client_role: federated_storage

从客户端到服务器传输连接属性数据的限制存在:

  • 客户端在连接之前设定的固定限制。

  • 服务器在连接时设定的固定限制。

  • 性能模式在连接时根据配置的固定限制。

使用C API初始化连接时,libmysqlclient库对客户端侧的连接属性数据总体大小施加64KB限制:调用mysql_options()导致此限制被违反时,会产生一个CR_INVALID_PARAMETER_NO错误。其他MySQL连接器可能对客户端侧传输到服务器的连接属性数据施加自己的限制。

在服务器侧,对于连接属性数据的大小检查发生在以下时刻:

  • 服务器接受的连接属性数据总体大小有64KB限制。如果客户端尝试发送超过64KB的属性数据,服务器会拒绝连接。否则,服务器认为属性缓冲区有效,并跟踪最长的这样的缓冲区大小,在Performance_schema_session_connect_attrs_longest_seen状态变量中。

  • 对于接受的连接,性能模式检查属性数据总体大小与performance_schema_session_connect_attrs_size系统变量的值。如果属性数据大小超过了这个值,将会发生以下操作:

    • 性能模式截断属性数据,并增加Performance_schema_session_connect_attrs_lost状态变量的值,该变量表示由于截断而丢失连接的数量。

    • 如果系统变量log_error_verbosity大于1,性能模式将错误日志中写入一条消息:

      Connection attributes of length N were truncated
      (N bytes lost)
      for connection N, user user_name@host_name
      (as user_name), auth: {yes|no}

      警告信息的目的是帮助DBA识别出属性截断发生的客户端。

    • 如果属性缓冲区有足够空间,将会在会话属性中添加一个名为_truncated的属性,并以表示丢失字节数的值填充。这使得性能模式能够在连接属性表中暴露每个连接的截断信息,而无需检查错误日志。这些信息可以通过查看而不必查阅错误日志来检验。