连接属性是应用程序可以在连接时传递给服务器的键值对。对于基于由 libmysqlclient
客户端库实现的 C API 的应用程序,mysql_options()
和 mysql_options4()
函数定义连接属性集。其他 MySQL 连接器可能提供自己的属性定义方法。
这些 Performance Schema 表公开属性信息
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
: 源机器上的进程 ID(例如,26955
)。_platform
:机器平台(例如,x86_64
)。_source_host
: 连接器连接来源机器的主机名。_connector_version
: 连接器版本(例如,8.4.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
属性,其值为丢失的字节数。这使性能模式能够在连接属性表中公开每个连接的截断信息。可以检查此信息,而不必检查错误日志。