连接属性是应用程序可以在连接时传递给服务器的键值对。对于基于 C API 实现的应用程序,例如使用 libmysqlclient
客户端库的应用程序,mysql_options()
和 mysql_options4()
函数定义连接属性集。其他 MySQL 连接器可能提供自己的属性定义方法。
这些性能模式表公开了属性信息:
-
session_account_connect_attrs
:当前会话和关联会话账户的连接属性 -
session_connect_attrs
:所有会话的连接属性
此外,审核日志中的连接事件可能包括连接属性。请参阅 第 8.4.5.4 节,“审核日志文件格式”。
以下划线 (_
) 开头的属性名称是保留用于内部使用的,不应由应用程序创建。这种约定允许 MySQL 引入新的属性,而不与应用程序属性冲突,并使应用程序能够定义自己的属性,而不与内部属性冲突。
可用的连接属性
在给定连接中可见的连接属性集因平台、使用的 MySQL 连接器或客户端程序而异。
客户端库 libmysqlclient
设置以下属性:
-
_client_name
:客户端名称 (libmysql
对于客户端库)。 -
_client_version
:客户端库版本。 -
_os
:操作系统(例如Linux
、Win64
)。 -
_pid
:客户端进程 ID。 -
_platform
:机器平台(例如x86_64
)。 -
_thread
:客户端线程 ID(仅 Windows)。
其他 MySQL 连接器可能定义自己的连接属性。
MySQL Connector/C++ 定义以下属性 для应用程序使用 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)。
-
_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
: 操作系统(例如,Linux
,Win64
)。 -
_pid
: 客户端进程 ID。 -
_platform
: 机器平台(例如,x86_64
)。 -
_program_name
: 客户端名称。 -
_thread
: 客户端线程 ID(仅 Windows)。
Connector/Python 实现定义这些属性;一些值和属性取决于 Connector/Python 实现(纯 Python 或 c-ext):
-
_client_license
: 连接器许可证类型;GPL-2.0
或Commercial
。(纯 Python 只) -
_client_name
: 设置为mysql-connector-python
(纯 Python)或libmysql
(c-ext)。 -
_client_version
: 连接器版本(纯 Python)或 mysqlclient 库版本(c-ext)。 -
_os
: 操作系统(例如,Linux
,Win64
)。 -
_pid
: 进程标识符(例如,26955
)。 -
_platform
: 机器平台(例如,x86_64
)。 -
_source_host
: 连接器连接的机器主机名。 -
_connector_version
: 连接器版本(例如,8.3.0
)(c-ext 只)。 -
_connector_license
: 连接器许可证类型;GPL-2.0
或Commercial
(c-ext 只)。 -
_connector_name
: 始终设置为mysql-connector-python
(c-ext 只)。
PHP 定义了依赖于编译方式的属性:
-
使用
libmysqlclient
编译:标准libmysqlclient
属性,之前描述。 -
使用
mysqlnd
编译:只有_client_name
属性,值为mysqlnd
。
许多 MySQL 客户端程序设置一个 program_name
属性,值等于客户端名称。例如,mysqladmin 和 mysqldump 设置 program_name
为 mysqladmin
和 mysqldump
,分别。MySQL Shell 设置 program_name
为 mysqlsh
。
一些 MySQL 客户端程序定义了附加属性:
连接属性限制
从客户端到服务器传输连接属性数据时存在限制:
-
客户端在连接前施加的固定限制。
-
服务器在连接时施加的固定限制。
-
性能模式在连接时施加的可配置限制。
使用 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
属性到会话属性中,指示截断的字节数。这使性能模式能够在连接属性表中公开每个连接的截断信息,而不需要检查错误日志。
-