DataStream 参考

本参考介绍了 MySQL 和 TDS 协议、数据库版本、身份验证方法以及 DataStream 功能支持的字符集。它还介绍 Citrix ADC 如何处理事务请求和修改连接状态的特殊查询。

您还可以将 Citrix ADC 设备配置为为 DataStream 功能生成审核日志消息。

支持的数据库版本、协议和身份验证方法

  MySQL 数据库 MS SQL 数据库
数据库版本 MySQL 数据库版本 4.1、5.0、5.1、5.4、5.5 和 5.6。 MS SQL 数据库版本 2000、2000SP1、2005、2008、2008R2 和 2012。
协议 MySQL 协议版本 10。有关 MySQL 协议的信息,请参阅MySQL 客户端/服务器協议 表格式数据流 (TDS) 协议版本 7.1 及更高版本。有关 TDS 协议的信息,请参阅表格式数据流协议
身份验证方法 支持 MySQL 本机身份验证。 支持 SQL 服务器身份验证和 Windows 身份验证 (Kerberos/NTLM)。

字符集

DataStream 功能仅支持 UTF-8 字符集。

客户端在发送请求时使用的字符集可能与数据库服务器响应中使用的字符集不同。虽然字符集参数是在连接建立过程中设置的,但可以随时通过发送 SQL 查询进行更改。字符集与连接相关联,因此,具有一个字符集的连接上的请求不能多路复用到具有不同字符集的连接上。

Citrix ADC 设备分析客户端发送的查询和数据库服务器发送的响应。

在初始握手后,可以使用以下两个查询更改与连接关联的字符集:

SET NAMES <charset> COLLATION <collation>

SET CHARACTER SET <charset>

Transactions(事务数)

在 MySQL 中,通过使用连接参数自动提交或开始:提交查询来识别事务。自动提交参数可以在初始握手期间或通过使用查询设置自动提交建立连接之后进行设置。

Citrix ADC 设备显式分析每个查询以确定事务的开始和结束。

在 MySQL 协议中,响应包含两个标志来指示连接是否为事务,即事务和自动提交标志。

如果连接是事务,则设置交易标志。或者,如果自动提交模式是关闭,则不会设置自动提交标志。ADC 设备分析响应,如果设置了“交易”标志或未设置 AUTOMMIT 标志,则不执行连接多路复用。当这些条件不再为真时,ADC 设备将开始连接多路复用。

注意

MS SQL 也支持事务。

特殊查询

有一些特殊的查询,例如 SET 和 PROUP,可能会中断请求切换,因此,这些查询需要以不同的方式处理。

在接收包含特殊查询的请求时,Citrix ADC 设备会向客户端发送“确定”响应,此外,还会将请求存储在连接中。

当接收非特殊查询(如 INSERT 和 SELECT)以及存储查询时,Citrix ADC 设备首先查找已将存储查询发送到数据库服务器的服务器端连接。如果不存在此类连接,则 ADC 设备将创建新连接,并首先发送存储的查询,然后发送带有非特殊查询的请求。

在 SET、USE db 和 INIT_DB 特殊查询的情况下,设备会修改服务器端连接中与特殊查询对应的字段。这将导致更好地重复使用服务器端连接。

每个连接中只存储 16 个查询。

以下是 ADC 设备具有修改行为的特殊查询列表。

  • SET query

    SET SQL 查询定义与连接关联的变量。这些查询也用于定义全局变量,但到目前为止,ADC 设备无法区分局部变量和全局变量。对于此查询,ADC 设备使用“存储和转发”机制。

  • 使用<db> 查询

    使用此查询,用户可以更改与连接关联的数据库。在这种情况下,ADC 设备分析发送的<db> 值并修改服务器端连接中的字段以反映要使用的新数据库。

  • INIT_DB command

    使用此查询,用户可以更改与连接关联的数据库。在这种情况下,ADC 设备分析发送的<init_db> 值并修改服务器端连接中的字段以反映要使用的新数据库。

  • COM_PREPARE

    ADC 设备在接收此命令时停止请求切换。

  • PREPARE query

    此查询用于创建与连接关联的预准备语句。对于此查询,ADC 设备使用“存储和转发”机制。

审核日志消息支持

现在,您可以将 Citrix ADC 设备配置为为 DataStream 功能生成审核日志消息。在建立、关闭或删除客户端和服务器端连接时生成审核日志消息。您可以记录和查看的消息类别是错误和信息。客户端连接的错误消息以“CS”开头,服务器端连接的错误消息以“SS 开头。“ 在必要时提供补充资料。例如,已关闭连接的日志消息 (CS_CON_CON_CON_CON_CONN_CONN_CONLOW) 仅包含连接 ID。但是,已建立连接 (CS_CONN_ESTD) 的日志消息除了连接 ID 之外还包括用户名、数据库名称和客户端 IP 地址等信息。