【原创】MySQL Proxy - 协议(部分摘录)

【Generic Response Packets】->【Status Flags】 
  
The status flags are a bit-field: 

======     ============= ======== 
   flag               constant name 
======     ============= ======== 
0x0001         SERVER_STATUS_IN_TRANS 
0x0002         SERVER_STATUS_AUTOCOMMIT 
0x0008         _`SERVER_MORE_RESULTS_EXISTS` 
0x0010         SERVER_STATUS_NO_GOOD_INDEX_USED 
0x0020         SERVER_STATUS_NO_INDEX_USED 
0x0040         SERVER_STATUS_CURSOR_EXISTS 
0x0080         SERVER_STATUS_LAST_ROW_SENT 
0x0100         SERVER_STATUS_DB_DROPPED 
0x0200         SERVER_STATUS_NO_BACKSLASH_ESCAPES 
0x0400         SERVER_STATUS_METADATA_CHANGED 
0x0800         SERVER_QUERY_WAS_SLOW 
0x1000         SERVER_PS_OUT_PARAMS 
======       ============= ======== 

       The capability flags are used by the client and server to indicate which features    they support and want to use.   

【Auth Challenge Packet】->【Capability flags】 

====== =======================  ======================== 
    flags                 constant name                                    description 
====== =======================  ======================== 
0x0001          CLIENT_LONG_PASSWORD           new more secure passwords 
0x0002           CLIENT_FOUND_ROWS                 Found instead of affected rows 
0x0004           CLIENT_LONG_FLAG                     Get all column flags 
0x0008           CLIENT_CONNECT_WITH_DB       One can specify db on connect 
0x0010           CLIENT_NO_SCHEMA                   Don't allow database.table.column 
0x0020           CLIENT_COMPRESS                      Can use compression protocol 
0x0040           CLIENT_ODBC                               Odbc client 
0x0080           _`CLIENT_LOCAL_FILES`                Can use LOAD DATA LOCAL 
0x0100           CLIENT_IGNORE_SPACE               Ignore spaces before '(' 
0x0200           _`CLIENT_PROTOCOL_41`             New 4.1 protocol 
0x0400           CLIENT_INTERACTIVE                   This is an interactive client 
0x0800           CLIENT_SSL                                   Switch to SSL after handshake 
0x1000           CLIENT_IGNORE_SIGPIPE             IGNORE sigpipes 
0x2000           CLIENT_TRANSACTIONS             Client knows about transactions 
0x4000           CLIENT_RESERVED                       Old flag for 4.1 protocol  
0x8000           CLIENT_SECURE_CONNECTION   New 4.1 authentication 
====== =======================  ======================== 

【Auth Response Packet】->【 Capability flags 】 

`capability flags` are the same as defined in the `Capability flags`_ of the `Auth Challenge Packet`_ plus: 

====== =======================  ========================  
    flags                 constant name                                    description 
====== =======================  ========================    
0x00010000    _`CLIENT_MULTI_STATEMENTS`      Enable/disable multi-stmt support 
0x00020000    _`CLIENT_MULTI_RESULTS`              Enable/disable multi-results 
0x00040000    _`CLIENT_PS_MULTI_RESULTS`         Multi-results in PS-protocol 
0x40000000    CLIENT_SSL_VERIFY_SERVER_CERT 
0x80000000    CLIENT_REMEMBER_OPTIONS 
====== =======================  ======================== 

【 command-type】 

The first byte of the payload describes the command-type like: 

=== ===================  ========================  
hex           constant name                                      description  
=== ===================  ========================  
00       `COM_SLEEP`_                        unhandled 
01       `COM_QUIT`_                         tells the server that the client wants to close the connection 
02       `COM_INIT_DB`_                    change the default schema of the connection 
03       `COM_QUERY`_                      tells the server to execute a text-based query 
04       `COM_FIELD_LIST`_                get the column definition of a tables 
05       `COM_CREATE_DB`_              create a schema 
06       `COM_DROP_DB`_                 drop a schema 
07       `COM_REFRESH`_                  get a list of active threads 
08       `COM_SHUTDOWN`_            get a list of active threads 
09       `COM_STATISTICS`_               get a list of active threads 
0a       `COM_PROCESS_INFO`_        get a list of active threads 
0b       `COM_CONNECT`_                unhandled 
0c       `COM_PROCESS_KILL`_          ask the server to terminate a connection 
0d      `COM_DEBUG`_                      dump debug info to stdout 
0e       `COM_PING`_                         check if the server is alive 
0f        `COM_TIME`_                         unhandled 
10       `COM_DELAYED_INSERT`_    unhandled 
11       `COM_CHANGE_USER`_        change the user of the current connection 
12        COM_BINLOG_DUMP          (null) 
13       `COM_TABLE_DUMP`_          unhandled 
14       `COM_CONNECT_OUT`_        unhandled 
15        COM_REGISTER_SLAVE        (null) 
16       `COM_STMT_PREPARE`_       creates a prepared statement from the passed query string. 
17       `COM_STMT_EXECUTE`_      asks the server to execute a prepared statement as identified by `stmt-id`. 
18       `COM_STMT_SEND_LONG_DATA`_    sends the data for a column. Repeating to send it, appends the data to the parameter. 
19       `COM_STMT_CLOSE`_         deallocates a prepared statement. 
1a       `COM_STMT_RESET`_         resets the data of a prepared statement. Useful in together with `COM_STMT_SEND_LONG_DATA`_. 
1b       `COM_SET_OPTION`_         set options for the current connection 
1c       `COM_STMT_FETCH`_         (null)  
1d      `COM_DAEMON`_               unhandled 
=== ===================  ======================== 

The unhandled   commands belong to  

* the `Old Commands`_ 
* the `Prepared Statements`_ Commands 
* the `Stored Procedures`_ Commands 
* or the Replication Commands 

时间: 2025-01-29 23:08:57

【原创】MySQL Proxy - 协议(部分摘录)的相关文章

【原创】MySQL Proxy - 核心篇

核心层篇(Core)          Network Core 构建于 socket 处理实现的基础之上,将 client connection 和 server connection 关联到一起.     [Connection Life Cycle]    connection 可处于下面 4 种协议基本 phase 之一:    connect authentification query disconnect        通过对 plugin 功能的定制实现,可以改变 network

原创】MySQL Proxy - 架构篇

架构篇(architecture)         MySQL Proxy 的定位是存在于 mysql client 和 mysql server 之间的一个简单的程序,能够对从其上通过的数据进行检查.转换和直接进行相应操作.  应用范围包括:  负载均衡(load balancing) 故障处理(fail over) 查询追踪(query tracking) 查询分析(query analysis) (...)        内部实现上讲,MySQL Proxy 是这样的一个协议栈:  (应该

【原创】MySQL Proxy - 概况

       MySQL Proxy 是一种在网络上使用 MySQL 网络协议进行通信的应用,提供了一或多个 MySQL server 与一或多个 MySQL client 之间的通信功能.由于 MySQL Proxy 使用的是 MySQL 网络协议,故其可以在不做任何修改的情况下,配合任何符合该协议的且与 MySQL 兼容的客户端一起使用.这其中也包括 MySQL 的命令行客户端,任何使用了 MySQL 客户端库的客户端,以及任何支持 MySQL 网络协议的连接器(connector).   

【原创】MySQL Proxy - read_auth_result()

       在鉴权阶段由服务器返回的包可以通过 read_auth_result() 函数进行捕获分析.该函数的唯一参数是由服务器返回的鉴权包的本身.由于该包是一个裸 MySQL 网络协议包,你必须通过检查包的首字节来确认包的类型及其对应的内容.可以使用常量 MYSQLD_PACKET_ERR 和 MYSQLD_PACKET_OK 来标示当前鉴权是否成功:  function read_auth_result(auth) local state = auth.packet:byte() if

【原创】MySQL Proxy - 内部结构

        在 MySQL Proxy 的脚本元素中有一些基本的内部结构需要知道.其中最主要的结构就是 proxy ,其提供了访问贯穿脚本中的许多公共结构的接口,例如连接列表和配置的 backend server .其他结构,例如来自客户端的包和返回的结果集等,只有在具体的脚本函数的上下文环境中才是可以访问的.  下表中描述了 MySQL proxy 脚本元素的公共属性.  Attribute Description connection A structure containing the

【原创】MySQL Proxy中socketpair的使用

      学习 MySQL Proxy 0.8.3 的源码后可知,其全部事件处理线程均对全局 socketpair 的读端进行了监听,以实现通知管道的功能:threads->event_notify_fds[0] .  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 int chassis_event_threads_init_thread(chassis_event_threads_t *threads, chassis_event_thread_t *event_threa

【原创】modb 功能设计之“支持部分MySQL客户端协议”-3

 在研究完 MySQL 官方文档上对 Connector/C 的说明后,终于可以 开工实践了,先搞个小 demo 出来运行看看.  开发环境:Windows XP SP3 v11 + VS2010 + MySQL Connector/C 6.1.2 测试代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <stdio.h> #

【原创】MySQL Proxy - 底层实现篇

底层实现篇(chassis)     [ Configfile and Commandline Options]           glib2 提供了 config-file 解析和 command-line option 解析功能. 其提供了将 option 以相同方式暴露给调用者的方法,以及从 Configfile 和 Commandline 获取 option 的功能.    所有 option 的解析过程都可以分为三步: 1. 提取   command-line 上的 basic op

【原创】MySQL Proxy - query注入动作中的脚本序列

    下图展示了一个如何使用 proxy 将客户端发送过来的 query 注入到 query 队列的例子.因为 proxy 位于客户端和 MySQL 服务器之间,所以经由 proxy 发送到服务器,以及由 proxy 最终返回给客户端的信息,不需要做到完全匹配或者关联.一旦客户端连接到了 proxy ,下图中展现的由客户端发送每一个单独的 query 引起的命令序列将会发生.           当客户端向 proxy 提交了一个 query 的时候,proxy 内部的 read_query(