舔狗的故事-MySQL客户端与服务端的爱恨情仇



舔狗的故事-MySQL客户端与服务端的爱恨情仇

文章插图
一、前言
  • 大家好,我是小诚,前面四篇《从0到1-全面深刻理解MySQL》文章给大家介绍了如何安装数据库到一条SQL在服务端需要经历那些步骤才能够解析完成,相信大家对数据库也有了初步的了解,但俗话说的好"纸上谈兵不如躬行实践",前面学习的知识都是理论的知识,多少有些枯燥,只有亲自实践才知识是否掌握了知识,所以本篇就给大家介绍客户端和服务端的连接方式,实战完成客户端与服务端的连接,从客户端发送指令的操作并获取服务端响应


  • 安利一下,最近时常会收到一些小伙伴反馈的问题,为了方便交流,所以创建了一个水友交流群,无论你工作、面试有困难想找人请教,还是生活有感悟想要找人倾诉,都可以在交流群和水友交流,群里没有大神和小白区分,只有分享者和倾听者,而且群里会时常发送一些福利,欢迎大家来一起交流,吹水,摸鱼,进步(有兴趣的私我或者留言)


  • 《从0到1-全面深刻理解MySQL系列》系列文章会持续更新,感兴趣的小伙伴可以关注我,,一起加油,一起进步!,如有帮助,不要忘记一键三联哦,?( ′???` )比心!


二: MySQL客户端与服务端的“爱恨情仇”

2.1、MySQL的C/S(客户端/服务器)架构说起MySQL架构,即避免不了谈到舔狗和女神之间的关系了,可以将MySQL理解为是由客户端(舔狗)和服务端(女神)两部分组成,舔狗(客户端)可以是多种体现方式,当女神(服务端)"大姨妈"来的时候舔狗(客户端)可以是红糖水(如手机APP),当女神(服务端)生气时舔狗(客户端)可以是名牌包包(如电脑软件/网页) 。

??平常我们执行一条SQL的流程,就跟舔狗(客户端)想去找女神(服务端)约会一样,大概要经历以下的流程:

??1、舔狗(客户端)包装好自己的约会的信息并附带上自己的个人介绍然后就发送给女神(服务端)如:女神,我是xx,今晚7点小树林见一起谈心,约不?

??2、女神(服务端)收到舔狗(客户端)的约会请求后,仔细阅读了舔狗(客户端)发来的信息,发现竟然舔狗(客户端)把地点约到小树林,肯定是有什么企图,二话不说直接拒绝了舔狗的约会(就像客户端发送请求时填错了账号或者密码,服务器拒绝连接) 。

??3、舔狗(客户端)的约会被女神拒绝后,整天郁郁寡欢,同宿舍的基友看到了给它出了一个建议,让它将约会地点改成某五星级酒店,这样女神一定会答应它的约会,舔狗听后大喜,但是它没有那么多钱,思来想去,最后它走进的男科医院卖了一颗肾换到了5千块钱,舔狗一瘸一拐地从男科医院走出,少了一颗肾的它明显感觉身体不如之前,但一想到晚上就能够和女神一起约会,舔狗脸上绽开了菊花般的微笑 。

??4、舔狗(客户端)重新包装了自己的约会信息,然后再次向女神(服务端)发起约会请求,女神看到舔狗的约会地点竟然是豪华的五星级酒店,二话不说就同意了约会(就像客户端发送请求时填写了正确的账号或者密码,服务器接受连接)

??5、舔狗看到女神接受了它的约会请求(建立了连接),非常开心,不断的发送消息给女神(执行SQL),女神服务器也时不时的给舔狗进行回复….
舔狗的故事-MySQL客户端与服务端的爱恨情仇

文章插图


2.2、MySQL客户端和服务端进程

在现代计算机中,一个计算机可以运行多个程序,每个运行着的程序在计算机中我们称之为一个进程 。MySQL的客户端/服务端架构本质上就是两个进程

??每个进程在一台电脑上都有一个唯一的表示叫做进程ID,英文名称叫PID,这个进程ID是由电脑进行随机分配的,如果进程销毁了,这个ID也会被收回,下次再运行的时候,系统又会重新分配一个PID给进程,确保同一台机器上,某个时间内这个PID是唯一的 。

??进程的名称是由程序的设计来定的,MySQL服务端的进程名默认是:mysqld,MySQL客户端的进程名默认是:mysql 。

??通俗的理解,女神(服务端)为了显得自己比较有International,给自己起了个英文名叫:mysqld,舔狗(客户端)看到女神有这么好听的名字,为了引入女神的注意,也给自己起了给英文名叫:mysql 。

??进程间通信(IPC , InterProcess Communication): 是指在不同进程之间传播或交换信息 。

??IPC的方式通常有管道(包括匿名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等 。
【舔狗的故事-MySQL客户端与服务端的爱恨情仇】

2.3、泡妞大法一: TCP/IP

自从上次舔狗(客户端)成功约到女神(客户端)后,舔狗(客户端)别提多开心了,恨不得时刻和女神粘在一起,但是,舔狗(客户端)也知道,如果每次都直接和女神说要约她,次数多了女神肯定会厌倦,而且自己只有两颗肾,不可能每次想约女神的时候都去卖肾,这样女神没到手自己人没了,于是它想出了一个方法,每次想要约女神的时候,不直接就表明自己的目的,而是先用小号去试探女神,等到时机成熟了再亮明自己的身份,大概步骤如下:

??舔狗(客户端): 切换到小号1,给女神发送消息:"在吗?",来试探女神(服务端)是否有空,如果女神回复了,说明女神有空,则再进行第二步,如果没有,则重复发送 。

??舔狗(客户端): "在的,怎么了?",舔狗的刚发出消息不久便收到女神(服务端)的回复,看到消息后,舔狗很开心,它知道计划的第一步已经成功,于是它开始了第二步,又给女神发送一则消息: "听说,今晚《爱的供养》电影首映,刚舍友抢到两张票(无中生友..),但是临时有事去不了就把票给我了,我一个人也用不了两张票,剩下的一张票不知道干嘛了",舔狗知道女神最喜欢杨幂了,这部电影上映她一定会去看的,女神看到消息后一定会马上给他回复的 。

??女神(服务端): 果不其然,女神看到这个消息马上就给舔狗(客户端)回复: "其实我超喜欢杨幂的,不知道剩下的一张票能不能给我呢?",女神发出后就在静静等待舔狗(客户端)的答复 。

??舔狗(客户端): 舔狗看到女神的回复后,脸上绽开了菊花般的微笑,但是他清楚,不能表现得太积极,于是故作镇定隔了几分钟后给女神回复: "好呀,那今晚校门口见咯 。"

??舔狗(客户端): 终于舔狗通过自己的方式成功约到了女神,看完电影舔狗心情愉悦,高兴的买了一袋"橘子"给舍友 。

??舔狗(客户端)又成功的约到了(连接)女神(服务端),舍友都感到非常惊讶,纷纷向他请教,于是他将自己约女神的方法写成了一本书分享给宿舍的单身狗看,书名叫做:《泡妞大法一之-三次"试探"》 。据说,卡恩与瑟夫后来的提出的TCP、IP协议和TCP协议中建立连接的"三次挥手"机制就是受到这本书籍的影响

??下面来通过图片来看看舔狗是如何约到女神的吧:


舔狗的故事-MySQL客户端与服务端的爱恨情仇

文章插图
小结TCP/IP方式连接MySQL服务端程序格式: mysql -h 主机地址 -P 端口号(MySQL默认是3306) -u 用户名 -p 回车(然后输入密码) 。

??在真实的业务场景中,我们的应用程序和实际的数据库一般是部署在不同的服务器中的,它们之间要创建连接,就必须通过网络进行 。在公网的网络环境下,每台计算机都有唯一的IP地址,MySQL通过TCP/IP网络体系结构采用:IP地址 + 端口号的方式实现和网络中其他的主机进程进行通信 。

??小贴士: TCP/IP网络体系结构是现在互联网中最常用的一种体系结构,它是一个协议簇,TCP/IP协议包括TCP、IP、UDP、ICMP等协议组成,而不是单纯的指TCP协议和IP协议,因为TCP和IP两种协议在这个体系结构中占据着非常重要的作用,故以此命名 。


2.4、泡妞方法二: 共享内存舔狗(客户端)发现使用TCP/IP方式和女神(服务端)发起在前几次发起约会请求都是屡试不爽,但是,渐渐地,女神又开始不搭理他了,他知道使用同一种方式久了女神已经厌倦了,于是他和女神的闺蜜多方打听,最终发现女神有一个特殊的习惯,就是每天早上4点钟会去晨跑,晨跑完后她会去一家早餐店吃早餐,这个习惯是雷打不动,女神坚持了两年 。

??舔狗知道自己的机会又来了,于是他每天3点半就起床,然后去到操场等待女神来晨跑,装作"偶遇"的样子,这样就有和女神单独相处的机会了,果不其然,女神看到舔狗后觉的非常惊讶竟然有人和自己有相同的习惯,于是非常有兴致的和舔狗聊了起来,晨跑完后还跟舔狗一起吃了早餐 。

??甜蜜的时间总是短暂的,跟女神吃完早餐后就回到了宿舍,因为舔狗平常很少锻炼的原因,3点半起床和跑步是个非常大的挑战,他感觉身体都快要散架了,但躺在床上回忆起了今天和女神相处的点滴,他觉的是值得的,他拿起笔记本,总结了今天的经验,笔记名叫:《泡妞大法二之-创建两人共享空间》

??下面来通过步骤和图片来看看舔狗是如何通过"共享内存"约到女神的吧:

??1、MySQL服务器程序启动时指定--shared-memory参数支持共享内存方式 。

??2、客户端连接时指定--protocol=memory参数来显式的指定使?共享内存进?通信 。


舔狗的故事-MySQL客户端与服务端的爱恨情仇

文章插图


小结

共享内存实际上就是允许多个进程共享一块存储空间,任何一个进程对这个空间进行了修改,其他的进程都察觉到,使用这种方式的通信,避免了数据在程序之间的复制流程,数据直接写入到内存,减少了拷贝的次数,提高了通信的速度,所以共享内存也被称作IPC中最快的一种通信方式 。

??共享内存的生命周期是和内核一样的,即使所有访问共享内存的进程都完成了,共享内存的区域对象仍然还是存在的(除非进行显示删除),在内核进行重新加载引导之前,对该共享内存区域对象的任何改写操作都将一直保留 。

??但是,共享内存中没有任何同步或者互斥的机制,多个进程可以同时对共享内存进行修改操作这样就可能导致数据安全问题,所以为了保证共享内存区域的数据安全,可以使用信号量的方式来实现对共享内存的同步访问机制 。


2.5、泡妞方法三: 命名管道正所谓"人间不如意事十之八九",舔狗刚想出使用"共享内存"的方式和女神建立专有的私有空间,但没想到女神没过几天就生病了,没办法继续晨跑,舔狗非常想见女神了解具体的情况,但是联系女神又不回消息,又没法到女神宿舍去,思来想去,最后他想到了一个好的方法,那就是重金收买女神的闺蜜,让闺蜜帮她和女神建立专属的连接 。

??心动不如心动,舔狗立马去医院将自己剩下的一个肾也卖了,得到了5千块,他将3千块给了女神的闺蜜,请求她帮忙让自己和女神建立"交流通道",每天都将自己的小纸条带给女神,就这样,舔狗日复一日的让女神闺蜜传递着小纸条给女神,等到了第二个月,终于收到了女神的回复,内容如下: "谢谢你在我生病的这段时间一直关心我,你真是个好人 。"


舔狗的故事-MySQL客户端与服务端的爱恨情仇

文章插图

??虽然字数不多,但舔狗依然很开心,自己的付出终于收到了回报,于是他又拿起了笔记本,记录了自己这段时间和女神的"约会心得",笔名为:《泡妞大法三之-专属通道》

??下面来通过步骤和图片来看看舔狗是如何通过"命名管道"约到女神的吧:

??1、MySQL服务器程序启动时指定--enable-named-pipe参数支持命名管道方式 。

??2、客户端连接时指定--protocol=pipe参数来显式的指定使?共享内存进?通信 。


舔狗的故事-MySQL客户端与服务端的爱恨情仇

文章插图


小结

命名管道也被称为FIFO文件 , 它是一种特殊类型的文件 , 在创建的时候给它指定一个名字,任何进程都可以通过该名字打开管道的另一端 , 根据给定的权限和服务器进程通信 。FIFO(first input first output)是遵循先进先出的原则 , 即第一个进来的数据会第一个被读走 。


写在最后在最后,我们还不知道故事中舔狗的结局会如何,但是我们能够在过程中看到舔狗为了约到女神做出的努力 。这不是正如现实中挣扎在生活和工作中的我们吗?虽然艰难,但依然在坚持,致敬在生活中每个平凡的我们!
坚持用故事讲知识,如果觉得文章对你有帮助,不要忘记扫码关注和一键三连哦,你的支持是我创作更加优质文章的动力 。