MySQL-1 安装启动MySQL

Windows下启动mysql服务

手动启动:

在Windows系统中安装完MySQL之后,MySQL安装目录的bin目录下也会存在一个mysqld可执行文件。在命令解释器中输入mysqld或者直接在bin目录下双击该文件,就可以启动MySQL服务器的程序了

笔者在这里并没有手动启动成功,但是这不是我们讨论的重点,了解即可,因为后面我们会将mysql注册到windows服务中去,并设置开机自启

以服务的方式启动:

如果我们需要在计算机长时间运行某个程序,并且无论是谁在使用这台计算机,这个程序的运行过程都不受影响,我们就可以把它注册成一个windows服务,由操作系统来帮我们管理,把某个程序注册为windows服务的方式如下:

”完整的可执行文件路径“ --install  [-manual]  [服务名]

如果我们添加了manual选项,就代表着不开机自启,服务名也可以省略,当我们把它注册为windows服务之后,就可以通过下面的命令来启动MySQL服务器了:

net start mysql

笔者在这里安装的是mysql8,压缩包版本的,实际上,在安装过程中,就已经把该服务自动注册到windows了,所以安装完之后并不用自己把服务添加到windows,默认就是存在的。

启动MySQL客户端程序:

上面我们做的只是启动了MySQL的服务端,下面的操作来启动客户端程序:

在成功启动MySQL服务器程序之后,就可以使用客户端来连接MySQL服务器了。bin目录下有许多客户端程序,比如mysqladmin,mysqldump,mysqlcheck等。这里重点关注的是可执行文件mysql(一个名称位mysql的可执行文件)。通过这个可执行文件,我们可以与服务器程序交互,也就是发送请求并接收服务器处理的结果,启动这个可执行文件一般需要一些参数,格式如下:

mysql -h主机名 -u用户名 -p密码

-h代表服务器所在计算机的域名或者ip地址,如果服务器是本机的话,可以省略或者简写成-hlocalhost或者-h127.0.0.1
-u代表用户名
-p代表密码

像h u p这种名称只有一个英文字母的参数称为短形式的参数,使用前需要加下划线,长参数比如像host user password这样的参数后续会讨论。

在这里插入图片描述
最后一行的mysql>是客户端的提示符,之后客户端发送给服务端的命令都需要写在这个后面。
如果我们想要断开客户端与服务端的连接,可以输入以下任意一个命令:

  • quit
  • exit
  • \q
    在这里插入图片描述
    输出Bye说明客户端连接已经关闭了,需要注意的是,这是关闭客户端的方式,并不是关闭服务端的方式,如果愿意的话,可以多开几个cmd,一个服务端是允许多个客户端进行连接的,每个客户端的操作都是互不影响的,如果你有多台计算机,也可以在局域网内通过其他计算机指定ip地址的方式来连接特定服务器。

连接注意事项:

  • 为了安全起见,最好不要在同一行输入用户名和密码的方式进行连接
  • 如果非要在同一行中显式地输入密码,那么-p和密码中间不可以有空白符,其他参数可以有空白符
  • mysql的各个参数没有硬性顺序要求,你可以这么写:
    mysql -p -uroot -h localhost
  • 如果你的客户端和服务器在同一计算机上,那么-h就可以省略:
    mysql -uroot -p
  • 如果你使用的是类UNIX系统的话,那么省略了-u参数后,会把登录操作系统的用户名当作mysql的用户名去处理,比如我用来登录操作系统的用户名是test,那么下面两条命令是等价的:
    mysql -u test -p
    mysql -p
    对于windows系统来说,默认的用户名是ODBC,可以通过设置环境变量USER来添加默认用户名,因为我们操作的一般都是linux系统,所以这里就不过多阐述了。

客户端与服务器连接的过程:

我们现在已经知道如何启动MySQL服务端程序,以及如何使用客户端程序去连接服务端程序,运行中的客户端和服务端本质都是计算机上的一个进程,所以客户端发送请求到服务端并得到响应的过程是一个进程间通信的过程,MySQL支持下面几种客户端进程和服务器进程的通信方式:

TCP/IP:

在真实的环境中,客户端和服务器往往存在于不同主机,他们之间通过网络进行通信,MySQL采用TCP作为服务器和客户端之间交流沟通的网络通信协议,在网络环境下,每台计算机都有一个唯一的ip地址,如果某个进程需要采用TCP进行网络通信,就需要向操作系统申请一个端口号,端口号是一个整数值,它的取值范围是0-65535 .这样网络中的其他进程就可以通过ip地址+端口号的方式对服务器进行访问了,MySQL服务器在启动时会默认去申请3306端口号,之后就在这个端口号上等待客户端进行连接,意思就是,mysql服务器默认监听3306端口。

其他通信方式

mysql除了TCP通信协议还有其他协议,比如命名管道和UNIX域套接字,因为对之后的内容影响不大,这里就不过多阐述了。

服务器处理客户端请求:

无论客户端和服务器使用哪种方式进行通信,最后实现的效果都是客户端向服务器发送一段文本(MySQL)语句,服务器进程处理后在向客户端返回一段文本,那么服务器对客户端的请求做了什么处理,才能产生最终的效果呢?,客户端可以向服务端发送增删改查的各类请求,这里使用复杂请求来描述大致过程:
在这里插入图片描述
从上面这张图可以看出,服务器程序处理来自客户端请求时都做了什么,大致分为了3部分:连接管理,解析与优化,存储引擎,下面将对这几部分做阐述:

连接管理:

  客户端进程可以使用前面介绍的TCP/IP,命名管道或者共享内存,UNIX域套接字等方式进行连接,每当有一个客户端与服务器进行连接之后,服务器都会创建一个线程专门用来处理和这个客户端的交互,当客户端退出时,服务器并不会直接把与客户端连接的线程销毁,而是把它缓存起来,当与另一个客户端进行连接时,把缓存的线程分配给客户端,这样就不用频繁的创建与销毁该线程,从而节省了开销,MySQL会为每一个连接进来的客户端分配一个线程,但是线程分配的太多也会影响系统性能,所以我们需要限制可以同时连接到服务器的客户端数量,至于怎么限制后面会讲到。
  在客户端发起连接时,同时需要携带主机信息,用户名密码等,服务器会对这些信息进行验证,如果认证失败,那么服务器回拒绝连接,另外,如果两者不在同一计算机上,还可以采用传输层安全性协议进行加密,从而保证数据传输的安全性。
  当连接建立成功后,服务端会一直等待客户端发来的请求,MySQL服务器收到的只是一个文本信息,该文本信息还要经过各种处理。

解析与优化:

  1. 查询缓存:相同的请求如果再次被查询时,服务器并不会直接进行磁盘IO,而是将原来查询的消息保存下来,这一过程叫做查询缓存,但是缓存并不是万能的,如果两个查询请求有字符上的不同,都会导致缓存不会命中,如果查询请求中包含某些函数,用户自定义变量,系统表,如mysql,information_schema等表,则这个请求就不会被缓存。以时间函数now()为例,同一个函数两次调用会产生不一样的结果,缓存也会失效,如果修改了表数据和表结构,比如说INSERT,UPDATE,DELETE,TRUNCATE TABLE,ALTER TABLE,DROP TABLE等语句,则与该表有关的查询缓存都会变为无效。

  2. 语法解析与查询优化:如果查询缓存没有命中,就会正式进行查询,因为请求只是文本,mysql服务器会将文本先进行分析,判断语法正确等,我们写的语句可能效率并不高,mysql的优化程序会对我们的语句做一些优化,比如说外连接转为内连接,表达式简化,子查询转化为连接等,后期可以使用EXPLAIN语句来查看某个语句的执行计划,这个后面会说。

  3. 存储引擎:服务器完成了查询优化为止,还没有真正访问表中数据,mysql服务器吧数据的存储和提取操作都封装到了一个名为存储引擎的模块中,表是一行一行的记录组成的,但是这个只是逻辑概念,没有物理表示,怎么从表中读数据,怎么把数据写入具体物理存储器上,都是存储引擎负责的。 mysql服务器处理请求的过程简单的划分为server层和存储引擎两个方面,连接管理,查询缓存,语法解析,查询优化这些并不涉及真正数据存取的功能划分为server层的功能,存取真实数据的功能是存储引擎层的功能,各种存储引擎为server层提供统一的调用接口,比如说“读取索引第一条记录”,“读取索引下一条记录”,“插入记录”等。

常用的存储引擎

mysql支持的存储引擎:
在这里插入图片描述
存储引擎对一些功能的支持情况:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值