连接属性是键值对,应用程序可以在连接时将它们传递给服务器。对于基于由libmysqlclient客户端库实现的C API的应用程序,mysql_options()和mysql_options4()函数定义连接属性集。其他MySQL连接器可能提供自己的属性定义方法。
这些性能模式表公开了属性信息:
- session_account_connect_attrs:当前会话以及与该会话帐户关联的其他会话的连接属性
- session_connect_attrs:所有会话的连接属性
此外,写入审核日志的连接事件可能包括连接属性。请参见“审核日志文件格式”。
以下划线(_)开头的属性名称保留供内部使用,不应由应用程序创建。该约定允许MySQL引入新属性而不会与应用程序属性发生冲突,并使应用程序能够定义自己的与内部属性不发生冲突的属性。
- 可用的连接属性
- 连接属性限制
可用的连接属性
在给定连接中可见的连接属性集取决于各种因素,例如您的平台,用于建立连接的MySQL Connector或客户端程序。
该libmysqlclient客户端库设置这些属性:
- _client_name:客户端名称(- libmysql用于客户端库)。
- _client_version:客户端库版本。
- _os:操作系统(例如- Linux,- Win64)。
- _pid:客户端进程ID。
- _platform:机器平台(例如- x86_64)。
- _thread:客户端线程ID(仅Windows)。
其他MySQL连接器可以定义自己的连接属性。
MySQL Connector / C ++ 8.0.16及更高版本为使用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)。
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:操作系统(例如- 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 Shell设置program_name为mysqlsh。
一些MySQL客户端程序定义了其他属性:
- mysql(自MySQL 8.0.17起): - 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属性被添加到与指示了多少字节丢失,如果属性缓冲器具有足够的空间的值的会话属性。这使性能架构可以在连接属性表中公开每个连接的截断信息。无需检查错误日志即可检查此信息。
 
- 性能架构将截断属性数据并增加
