Skip to content

connection attribute tables

xiaoboluo768 edited this page Jun 8, 2020 · 2 revisions
  • 应用程序可以使用一些键/值对生成一些连接属性,在对mysql server创建连接时传递给server。对于C API,使用mysql_options()和mysql_options4()函数定义属性集。其他MySQL连接器可以使用一些自定义连接属性方法
  • 连接属性记录在如下两张表中:
    • session_account_connect_attrs:记录当前会话及其相关联的其他会话的连接属性
    • session_connect_attrs:所有会话的连接属性
  • MySQL允许应用程序引入新的连接属性,但是以下划线(_)开头的属性名称保留供内部使用,应用程序不要创建这种格式的连接属性。以确保内部的连接属性不会与应用程序创建的连接属性相冲突
  • 一个连接可见的连接属性集合取决于与mysql server建立连接的客户端平台类型和MySQL连接的客户端类型
    • libmysqlclient客户端库(在MySQL和MySQL Connector / C发行版中提供)提供以下属性:
      • _client_name:客户端名称(客户端库的libmysql)
      • _client_version:客户端libmysql库版本
      • _os:客户端操作系统类型(例如Linux,Win64)
      • _pid:客户端进程ID
      • _platform:客户端机器平台(例如,x86_64)
      • _thread:客户端线程ID(仅适用于Windows)
    • 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编译:php连接的属性集合使用标准libmysqlclient属性,参见上文
      • 使用mysqlnd编译:只有_client_name属性,值为mysqlnd
    • 许多MySQL客户端程序设置的属性值与客户端名称相等的一个program_name属性。例如:mysqladmin和mysqldump分别将program_name连接属性设置为mysqladmin和mysqldump,另外一些MySQL客户端程序还定义了附加属性:
      • mysqlbinlog定义了_client_role属性,值为binary_log_listener
      • 复制slave连接的program_name属性值被定义为mysqld、定义了_client_role属性,值为binary_log_listener、_client_replication_channel_name属性,值为通道名称字符串
      • FEDERATED存储引擎连接的program_name属性值被定义为mysqld、定义了_client_role属性,值为federated_storage
  • 从客户端发送到服务器的连接属性数据量存在限制:客户端在连接之前客户端有一个自己的固定长度限制(不可配置)、在客户端连接server时服务端也有一个固定长度限制、以及在客户端连接server时的连接属性值在存入performance_schema中时也有一个可配置的长度限制
  • 对于使用C API启动的连接,libmysqlclient库对客户端上的客户端面连接属性数据的聚合大小的固定长度限制为64KB:超出限制时调用mysql_options()函数会报CR_INVALID_PARAMETER_NO错误。其他MySQL连接器可能会设置自己的客户端面的连接属性长度限制
  • 在服务器端面,会对连接属性数据进行长度检查:
    • server只接受的连接属性数据的聚合大小限制为64KB。如果客户端尝试发送超过64KB(正好是一个表所有字段定义长度的总限制长度)的属性数据,则server将拒绝该连接
    • 对于已接受的连接,performance_schema根据performance_schema_session_connect_attrs_size系统变量的值检查聚合连接属性大小。如果属性大小超过此值,则会执行以下操作:
      • performance_schema截断超过长度的属性数据,并增加Performance_schema_session_connect_attrs_lost状态变量值,截断一次增加一次,即该变量表示连接属性被截断了多少次
      • 如果log_error_verbosity系统变量设置值大于1,则performance_schema还会将错误信息写入错误日志:
[Warning] Connection attributes of length N were truncated

上一篇: users表 | 下一篇: session_account_connect_attrs表

Clone this wiki locally