【转载】MySQL客户端服务器协议

查询的实行路径:

      这个协议是半双工的,这意味着 MySQL 服务器在某个给定的时间,可以发送或接收数据,但是不能同时发送和接收。这也意味着没有办法截断消息。

      这种协议让 MySQL 的沟通简单而又快捷,但是它也有一些限制。其中一个就是无法进行流程控制,一旦一方发送消息,另一方在发送回复之前就必须提取完整的消息。这像来回抛球的游戏:在任意时刻,只有某一方有球,而且除非有球在手上,否则就不能把球抛回去(发送消息)。

      客户端用一个数据包将查询发送到服务器。这就是为什么 max_packet_size 这个配置参数对于大查询很重要的一个原因(如果查询过大,那么服务器会拒绝接收数据并且抛出一个错误)。一旦客户端发送了查询,那就意味着“球”已经不在自己手中,唯一能做的事情就是等待结果。

      但是,服务器发送的响应由许多数据包组成。服务器发送响应的时候,客户端必须接收完整的结果集。它不能只提取几行数据后就要求服务器停止发送剩下的数据。如果客户端只需要其中的几行数据,要么等待所有数据都传送完毕后丢掉不用的数据,要么就笨拙地断开连接。这两种办法都不好,这就是为什么 LIMIT 子句很重要的原因。

      还有另外一种理解方式,当客户端从服务器提取数据的时候,它认为所有数据都是从服务器“”过来的,但实际情况是服务器在产生这些数据的同时就把它们“”到客户端。客户端只需要接收推出来的数据,根本没办法告诉服务器停止发送数据。

      绝大多数连接 MySQL 的类库,能让你提取完整的结果,然后缓存到内存中,或者只是提取需要的数据。默认的行为通常是提取所有数据后缓存。这很重要,因为 MySQL 只有在所有数据被提取之后,才会释放点所有的锁和资源。查询的状态会是“发送数据”。如果客户端类库一次性提取了所有的数据,那么就可以减少服务器所做的工作,让服务器可以尽可能快地完成所有的清理工作。

      大部分客户端类库可以让使用者像直接从服务器上提取数据一样处理结果,但是它实际上只是在类库的内存中处理数据。这种机制在大多数时候都工作良好,但是对于很庞大的结果集也许会需要很长的时间和很多内存。如果不缓存数据,那么就可以使用较少的内存,并且尽快开始工作。这么做的缺点就是在应用程序和类库交互的时候,服务器端的锁和资源都是被锁定的。

时间: 2024-09-13 09:07:46

【转载】MySQL客户端服务器协议的相关文章

Mysql客户端不支持鉴定协议的解决方法

MySQL 5.1采用了基于密码混编算法的鉴定协议,它与早期客户端(4.1之前)使用的协议不兼容.如 果你将服务器升级到4.1之上,用早期的客户端进行连接可能失败,并给出下述消息: shell> mysql 客户端不支持服务器请求的鉴定协议:请考虑升级MySQL客户端. 要想解决该问题,应使用下述方法之一: ·升级所有的客户端程序,以使用4.1.1或更新的客户端库. ·用4.1版之前的客户端连接到服务器时,请使用仍具有4.1版之前风格密码的账户. ·对于需要使用4.1版之前的客户端的每位用户,将

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

首先看看有哪些资源:1. MySQL 官网 [MySQL Connectors]->[Connector/C (libmysqlclient)] Connector/C (libmysqlclient) is a client library for C development. 官网对 MySQL Connector/C 的完整文档描 述参考 这里 . 重点内容摘录翻译如下 === [22.5. MySQL Connector/C]       MySQL Connector/C 是一个客户端

Java网络协议 TCP和客户端/服务器范型

服务器|客户端|网络 在网络编程中(同样在其它形式的通讯中,例如数据库编程),使用套接字的应用程序也被分为两类--客户端程序和服务器程序.你可能对"客户端/服务器编程"术语比较熟悉,尽管这个术语的准确意思你不一定清楚.下面的范例就是讨论这个主题. 1. 客户端/服务器范型 客户端/服务器范型把软件分为两类--客户端程序和服务器程序.客户端软件启动一个连接并发送请求,而服务器软件监听连接并处理请求.在UDP编程环境中,没有建立实际的连接,并且UDP应用程序可以在相同的套接字上建立并接收请

【原创】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客户端命令行应用技巧

图像化导向的MySQL管理工具比比皆是,但真正能够提速而且并非"图有其表"的管理工具,可能没有 哪一个比得上MySQL客户端驱动的命令行更有效了.不过,执行一般查询需要大量键盘输入工作,而且确 定您目前正在登录的数据库以及快速监测数据库服务器的性能都会变得很单调乏味. 改变客户端提示符 如果每运行一次show tables来提醒自己目前所选择的是哪个数据库就能得到一块钱的话,估计现在我 都成百万富翁了.事实上,当我们不停的定期在IDE.shell提示符和MySQL客户端提示符之间切换的

DBA应当了解的MySQL客户端程序启动选项

许多服务器管理员都知道,MySQL数据库管理系统(RDBMS)是高度灵活的软件块,带有范围广阔的启动选项,可以用来修改相关行为.然而,大部分人却不清楚,标准MySQL客户端带有同等大量的启动选项,其中一些在日常MySQL交互作用中极为有用.这些选项本身不是"秘密",而它们中很多未被使用,甚至其中一些可以显著利于服务器交互作用的过程处理. 表中是其中一些不太知名的MySQL客户程序启动选项.表格中的每一条目解释了每个选项的功能以及用法.这将给予你MySQL应用范围和深度等问题一些想法,帮

基于多线程的客户端/服务器套接字类

这篇文章主要介绍如何设计基于多线程的客户端/服务器套接字(socket)类.开发者/设计者可以根据具体的 需要决定是否选用另外的线程.在网络上有许多其它的套接字类,但是没有一个能够向这个类一样为你的应用程序 提供回调功能(事件监测).本文设计的类能够为你提供如下的事件监测:完成建立链接.放弃链接.链接失败和 接收数据(包括0字节数据包). 描述: 本文提供一种新的,同时支持TCP和UDP通讯的套接字类,与你可能在本站或其它地方发现的套接字编程文章相 比,本文设计的类有很多优点.首先,这个类没有像

14款经典的MySQL客户端软件

不用我说,大家都知道Mysql是一个怎么样的数据库.虽然它的命运比较坎坷, 但是丝毫没有影响到我们对Mysql的热情.不论是个人程序或者网站,还是企业数据库,Mysql的身影无处不在.无论做什么数据库的开发, 一款 合适的客户端软件可以让你达到事半功倍的效果.下面就我自己使用mysql客户端的经验,再参考其他人的情况做如下汇总,希望对你的数据开发有所帮助. 1. EMS MySQL Manager 强大的mysql管理工具,允许用户通过图形界面创建或编辑数据库对象,并提供通过sql语句管理用户和

Mysql SQL服务器模式介绍_Mysql

mysql SQL服务器模式 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用--sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(--sql-mode =""