mysql协议学习(三)--OK报文
2015-08-06 22:42
756 查看
Payload of OK Packet
对于执行成功的命令,通常会返回OK报文
OK报文和EOF报文的区别
对于OK报文和EOF报文,其header字段都可能为0xfe,那么有如下规则来区分这两种报文
OK Packet:length of packet > 7
EOF Packet:length of packet < 9
eg:
OK with CLIENT_PROTOCOL_41. 0 affected rows, last-insert-id was 0, AUTOCOMMIT enabled, 0
warnings. No further info.
Status Flags说明:
Session State Information
该部分信息由以下部分组成:
其中type有3种,分别是:
types of State Change Information
不同type类型对应的data组成是不同的
SESSION_TRACK_SYSTEM_VARIABLES 对应的data字段内容
eg:
SET autocommit = OFF
第1个字节00表示type=SESSION_TRACK_SYSTEM_VARIABLES,接下来的部分组成为data字段,类型是string<lenenc>,其中第1个字节0f表示接下来的字符串长度为15个字节(0x0f = 15),而SESSION_TRACK_SYSTEM_VARIABLES的data字段又分为两个字段 name(string<lenenc>)和 value(string<lenenc>),那么接下来的 0a
61 75 74 6f 63 6f 6d 6d 69 74 (len = 0x0a) 和 03
4f 46 46 (len = 0x03)则分别为name字段和value字段的内容。
SESSION_TRACK_SCHEMA 对应的data字段内容
eg:
USE test
第1个字节01表示type=SESSION_TRACK_SCHEMA,接下来的部分组成为data字段,类型是string<lenenc>,其中第1个字节05表示接下来的字符串长度为5个字节,data字段内容为 04
74 65 73 74(len = 0x04)
SESSION_TRACK_STATE_CHANGE 对应的data字段内容
备注:A flag byte that indicates whether session state changes occurred. This flag is represented as an ASCII value
Type | Name | Description |
---|---|---|
int<1> | header | [00]or [fe]the OK packet header |
int<lenenc> | affected_rows | affected rows |
int<lenenc> | last_insert_id | last insert-id |
if capabilities & CLIENT_PROTOCOL_41 { | ||
int<2> | status_flags | Status Flags |
int<2> | warnings | number of warnings |
} elseif capabilities & CLIENT_TRANSACTIONS { | ||
int<2> | status_flags | Status Flags |
} | ||
if capabilities & CLIENT_SESSION_TRACK { | ||
string<lenenc> | info | human readable status information |
if status_flags & SERVER_SESSION_STATE_CHANGED { | ||
string<lenenc> | session_state_changes | session state info |
} | ||
} else { | ||
string<EOF> | info | human readable status information |
} |
OK报文和EOF报文的区别
对于OK报文和EOF报文,其header字段都可能为0xfe,那么有如下规则来区分这两种报文
OK Packet:length of packet > 7
EOF Packet:length of packet < 9
eg:
OK with CLIENT_PROTOCOL_41. 0 affected rows, last-insert-id was 0, AUTOCOMMIT enabled, 0
warnings. No further info.
07 00 00 0200000002 0000 00 | ........... |
Flag | Value | Comment |
---|---|---|
SERVER_STATUS_IN_TRANS | 0x0001 | a transaction is active |
SERVER_STATUS_AUTOCOMMIT | 0x0002 | auto-commit is enabled |
SERVER_MORE_RESULTS_EXISTS | 0x0008 | |
SERVER_STATUS_NO_GOOD_INDEX_USED | 0x0010 | |
SERVER_STATUS_NO_INDEX_USED | 0x0020 | |
SERVER_STATUS_CURSOR_EXISTS | 0x0040 | Used by Binary Protocol Resultsetto signal that COM_STMT_FETCHmust be used to fetch the row-data. |
SERVER_STATUS_LAST_ROW_SENT | 0x0080 | |
SERVER_STATUS_DB_DROPPED | 0x0100 | |
SERVER_STATUS_NO_BACKSLASH_ESCAPES | 0x0200 | |
SERVER_STATUS_METADATA_CHANGED | 0x0400 | |
SERVER_QUERY_WAS_SLOW | 0x0800 | |
SERVER_PS_OUT_PARAMS | 0x1000 | |
SERVER_STATUS_IN_TRANS_READONLY | 0x2000 | in a read-only transaction |
SERVER_SESSION_STATE_CHANGED | 0x4000 | connection state information has changed |
该部分信息由以下部分组成:
Type | Name | Description |
---|---|---|
int<1> | type | type of data |
string<lenenc> | data | data of the changed session info |
types of State Change Information
Name | Value | Description |
---|---|---|
SESSION_TRACK_SYSTEM_VARIABLES | 0x00 | one or more system variables changed. See also:session_track_system_variables |
SESSION_TRACK_SCHEMA | 0x01 | schema changed. See also: session_track_schema |
SESSION_TRACK_STATE_CHANGE | 0x02 | "track state change" changed. See also:session_track_state_change |
SESSION_TRACK_SYSTEM_VARIABLES 对应的data字段内容
Type | Name | Description |
---|---|---|
string<lenenc> | name | name of the changed system variable |
string<lenenc> | value | value of the changed system variable |
SET autocommit = OFF
00 0f 0a 61 75 74 6f 63 6f 6d 6d 69 7403 4f 46 46 | ....autocommit.OFF |
61 75 74 6f 63 6f 6d 6d 69 74 (len = 0x0a) 和 03
4f 46 46 (len = 0x03)则分别为name字段和value字段的内容。
SESSION_TRACK_SCHEMA 对应的data字段内容
Type | Name | Description |
---|---|---|
string<lenenc> | name | name of the changed schema |
USE test
01 05 04 74 65 73 74 | ...test |
74 65 73 74(len = 0x04)
SESSION_TRACK_STATE_CHANGE 对应的data字段内容
备注:A flag byte that indicates whether session state changes occurred. This flag is represented as an ASCII value
Type | Name | Description |
---|---|---|
string<lenenc> | is_tracked | [31]("1") if state tracking got enabled. |
相关文章推荐
- mysql协议学习(二)--报文格式
- MySQL中的数据类型
- mysql 使用
- MySql 使用详解(2)
- lvm快照备份mysql
- mysql登录报错ERROR 1045 (28000) 的解决方法
- mysql 分库分表
- mysql 唯一索引
- MySQL IN用法
- mysqldump简单备份
- MySql常用命令总结
- Mysql数据库设计
- ERROR 2003 (HY000): Can't connect to MySQL server on '10.16.115.101' (111)
- mysql left right inner join的用法
- LVS+keepalived+DRBD+heartbeat+mysql
- 脚本实现mysql周完全备份所有库
- 常用MySQL命令
- mysql导入excel数据
- Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
- the user specified as a definer('root'@'%') does not exit解决办法