连接属性是应用程序可以在连接时传递给服务器的键值对。对于基于
libmysqlclient
客户端库实现的 C API 的应用程序,
mysql_options()
和
mysql_options4()
函数定义了连接属性集。其他 MySQL 连接器可能会提供自己的属性定义方法。
这些性能模式表公开属性信息:
session_account_connect_attrs
:当前会话的连接属性,以及与会话帐户关联的其他会话session_connect_attrs
:所有会话的连接属性
以下划线 ( ) 开头的属性名称_
保留供内部使用,不应由应用程序创建。此约定允许 MySQL 引入新属性而不会与应用程序属性冲突,并使应用程序能够定义自己的属性而不会与内部属性冲突。
可用的连接属性
给定连接中可见的连接属性集因平台、用于建立连接的 MySQL 连接器或客户端程序等因素而异。
客户端库设置这些libmysqlclient
属性:
_client_name
:客户端名称(libmysql
对于客户端库)。_client_version
: 客户端库版本。_os
:操作系统(例如Linux
,,Win64
)。_pid
:客户端进程ID。_platform
:机器平台(例如,x86_64
)。_thread
:客户端线程 ID(仅限 Windows)。
其他 MySQL 连接器可能会定义自己的连接属性。
MySQL Connector/J 定义了这些属性:
_client_license
:连接器许可证类型。_runtime_vendor
:Java 运行时环境 (JRE) 供应商。_runtime_version
:Java 运行时环境 (JRE) 版本。
MySQL Connector/NET 定义了这些属性:
_client_version
: 客户端库版本。_os
:操作系统(例如Linux
,,Win64
)。_pid
:客户端进程ID。_platform
:机器平台(例如,x86_64
)。_program_name
: 客户端名称。_thread
:客户端线程 ID(仅限 Windows)。
PHP 定义的属性取决于它的编译方式:
编译使用
libmysqlclient
:标准libmysqlclient
属性,如前所述。编译使用
mysqlnd
: 只有_client_name
属性,值为mysqlnd
.
许多 MySQL 客户端程序设置一个program_name
属性,其值等于客户端名称。例如,
mysqladmin和mysqldump分别
设置program_name
为
mysqladmin
和mysqldump
。
一些 MySQL 客户端程序定义了额外的属性:
-
_client_role
:binary_log_listener
副本连接:
program_name
:mysqld
_client_role
:binary_log_listener
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_size
对于已接受的连接,性能模式根据系统变量 的值检查聚合属性大小 。如果属性大小超过此值,则会发生以下操作:性能模式截断属性数据并递增
Performance_schema_session_connect_attrs_lost
状态变量,该变量指示发生属性截断的连接数。log_warnings
如果系统变量大于零 ,Performance Schema 会向错误日志写入一条消息:[Warning] Connection attributes of length N were truncated