Mysql OK包与EOF包中的 server_sta…
来源:互联网 发布:canonmp288清零软件 编辑:程序博客网 时间:2024/06/06 16:31
这几天往sqlproxy中添加事务支持时发现服务端global/session的autocommit变量值与server返回的OK包中的值不一致。(当后端mysqld以autocommit=0启动的时候)
当客户端向mysqld发送select等查询语句的时候,mysqld会在结果集合的末尾返回一个EOF包;(正确处理时)
当客户端向mysqld发送insert等修改或管理语句的时候,mysqld会放回一个OK包;(正确处理时)
在EOF包与OK包中包含了server_status来标识当前连接对应的mysqld中的工作线程的一些状态信息,主要有:
(include/mysql_com.h)
#defineSERVER_STATUS_IN_TRANS 1
#defineSERVER_STATUS_AUTOCOMMIT 2
#define SERVER_MORE_RESULTS_EXISTS8
#define SERVER_QUERY_NO_GOOD_INDEX_USED 16
#defineSERVER_QUERY_NO_INDEX_USED 32
当mysqld中的工作线程写OK包或EOF包的时候,会把当前线程中的server_status写入包中, 以OK包为例:
下图的函数完成了OK包的封包工作,232行,该函数将当前THD对象中的server_status写入到包中。
然后我们来看看THD->server_status是怎么初始化的
(sql/sql_class.cc )
从929行可以看出,THD->server_status在初始化的时候就会把SERVER_STATUS_AUTOCOMMIT置1.
而对于server_status该位的修改只会在fix_autocommit中被更新,该函数在global/session的autocommit变量被变更是调用。
(sql/sys_vars.cc )
所以这就导致一个问题:THD->server_status中的SERVER_STATUS_AUTOCOMMIT与global/session中的autocommit变量值可能不一致(启动mysqld的时候以autocommit=0启动)。
注:转载注明来自高孝鑫的blog
当客户端向mysqld发送select等查询语句的时候,mysqld会在结果集合的末尾返回一个EOF包;(正确处理时)
当客户端向mysqld发送insert等修改或管理语句的时候,mysqld会放回一个OK包;(正确处理时)
在EOF包与OK包中包含了server_status来标识当前连接对应的mysqld中的工作线程的一些状态信息,主要有:
(include/mysql_com.h)
#defineSERVER_STATUS_IN_TRANS
#defineSERVER_STATUS_AUTOCOMMIT
#define SERVER_MORE_RESULTS_EXISTS8
#define SERVER_QUERY_NO_GOOD_INDEX_USED 16
#defineSERVER_QUERY_NO_INDEX_USED
当mysqld中的工作线程写OK包或EOF包的时候,会把当前线程中的server_status写入包中, 以OK包为例:
下图的函数完成了OK包的封包工作,232行,该函数将当前THD对象中的server_status写入到包中。
然后我们来看看THD->server_status是怎么初始化的
(sql/sql_class.cc )
从929行可以看出,THD->server_status在初始化的时候就会把SERVER_STATUS_AUTOCOMMIT置1.
而对于server_status该位的修改只会在fix_autocommit中被更新,该函数在global/session的autocommit变量被变更是调用。
(sql/sys_vars.cc )
所以这就导致一个问题:THD->server_status中的SERVER_STATUS_AUTOCOMMIT与global/session中的autocommit变量值可能不一致(启动mysqld的时候以autocommit=0启动)。
注:转载注明来自高孝鑫的blog
0 0
- Mysql OK包与EOF包中的 server_sta…
- MySql 缓存使用的Bug 分析(EOF包被OK包替换引起的)
- POJ 3660 Cow Contest(关系闭包…
- Spring 2.5 jar 所有开发包说明
- MySQL的ODBC JDBC官方驱动包
- HIVE 加jar包
- MySQL Online DDL …
- MySQL server has …
- Linux 下zip包的压缩与解压
- Oracle Alerts 与…
- mysql 协议的EOF包及解析
- mysql 协议的OK包及解析
- Join语句的on 与 select xxx in…
- buildbot + bazaar + mysql的测试…
- Mysql ERROR 1045 (28000): Access…
- mongoDB 与mysql 比速度
- HDU 1704 Rank (关系闭包)
- SSH三大框架 整合必备jar包 …
- mysql ndbcluster7.0.16 升级到 7.…
- 我的博客今天0岁325天了,我领取了…
- mysql 服务器端关于用户连接方面的…
- ACE 环境搭建 之 Hello word
- swift语言IOS8开发战记19 UIImagePickerController
- Mysql OK包与EOF包中的 server_sta…
- 重做主从复制(尽量减少对业务的影…
- 编译指令的顺序
- Linux 如何重置root密码
- 配置bzr 在push的时候 &…
- 写个支持多重名section和key的读取…
- 用boost 的program opti…
- 1461错误, mysql_stmt_prepa…
- mysql 主从复制对于事件event…