通过第一话我们快速了解了MySQL的历史和特性,并且在本机做好了安装和简单的客户端连接,本文接着第一话继续聊一聊。
本篇文章整体脉络如下:
一、客户端和服务端架构
在互联网中,client /server(客户端 / 服务器)的概念,应该是最基础也是最重要的概念了,我们来聊一聊。
对于一个基于 client /server(客户端 / 服务器)架构的应用程序,首先需要有一个服务器(或称 “服务端”)。
服务器的英语单词是 server,server 的原意是 “服务生,侍者”,生活中的例子就是餐厅里为顾客服务的人。客户端的英语单词是 client,client 的原意是 “顾客”。
如果一台机器可以提供某种服务,我们就可以称其为服务器,各种网站都是提供7*24小时的服务,所以服务器应该一直提供可访问的服务,因此可以说它是一直在监听的。实际上,服务器在网络上监听,并准备好响应对其发出的请求。
我们可以使用netstat或lsof命令查看目前一些正在运行的服务的基本情况(不同操作系统的命令参数是不一样的,具体如何使用可自行百度):
可以看到本机mysql服务正在监听在127.0.0.1:3306上。
总之,我们可以说服务就是在机器上监听的程序,我们可以将这样的机器称为服务器。
相对应服务端,就是客户端,客户形式众多,比如浏览器、APP、电子邮箱等等。
可以说,当今的互联网大多数是基于客户端 / 服务器的运作方式,也就是说,这不是唯一的连接方式。
例如,在 P2P(Peer To Peer,表示 “点对点”)网络中,每个人都可以扮演客户端和服务器的角色。服务不是由我们要访问的单个服务器提供的,只要是拥有资源的机器都可以充当服务器的角色。
为什么要聊客户端和服务端架构呢?因为我们的MySQL架构也是如此,一般情况下,我们会部署一个MySQL的服务运行在服务器中,代码作为客户端去访问MySQL服务从而进行增删改查。
计算机上运行的每一个程序也被称为一个进程,运行过程中的MySQL服务器程序和客户端程序也都是计算机中的进程,概述篇也正是完成了MySQL服务端程序在本机的安装,结合自带的MySQL客户端连接工具可进行登陆。
二、启动服务端程序
第一话概述篇中我们完成了本机安装,并且默认安装目录是:
/opt/homebrew/opt/mysql@5.7
在这个目录下,有一个关键的bin目录,这个目录下存放了许多可执行文件,这些可执行文件有的是服务器程序,有的是客户端程序。
其中mysqld打头的一般都是服务端程序,可以用来启动一个MySQL进程。
我们在概述篇中所使用的启动命令是:
brew services restart mysql@5.7
实际上这里也可以直接启动,我们首先关闭服务,尝试使用mysqld来启动下。
由于信息较多,未全部展示最终启动成功的说明,不过确实是成功启动了MySQL服务进程,但这个命令用的并不多。
还有一个服务启动命令是mysqld_safe,这是一个启动脚本,会间接调用mysqld并监控服务器运行状态,输出一定的日志方便在报错时排查,当服务器进程出现问题,可以帮助重启服务器程序。
mysqld_safe命令启动的方式要比mysqld启动多了一个mysqld_safe的进程;mysqld_safe其实就是mysqld服务的一个守护进程;它的作用是当mysql宕机后会自动重启mysqld服务。所以平时应该使用mysqld_safe。所以通过kill关闭进程时,需要先关闭守护进程,再关闭mysqld进程。
最后再介绍一个服务启动命令是mysql.server,它也是一个脚本,会间接调用mysqld_safe:
mysql.server start
对应的关闭方法是:
mysql.server stop
三、启动客户端程序
除了服务端程序,bin目录下还有许多客户端程序,比方说mysqladmin、mysqldump、mysqlcheck等等,这里我们重点要关注的是可执行文件mysql,通过这个可执行文件可以让我们和服务器程序进程交互,也就是发送请求以及接收服务器的处理结果。启动这个可执行文件时一般需要一些参数,格式如下:
mysql -h主机名 -u用户名 -p密码
参数名 | 含义 |
---|---|
-h | 表示启动服务器程序的计算机的域名或者IP地址,如果服务器程序就运行在本机的话,可以省略这个参数,也可以填localhost或者127.0.0.1。也可以写作 –host=主机的形式。 |
-u | 登陆用户名 |
-p | 登陆密码(注意这里的p是小写,大写的P是指端口号) |
本地连接只需要写:
mysql -uroot -p
回车后输入密码,即可连接成功,进入成功后的界面:
下面就可以在mysql>后面输入sql语句,将命令发送给服务端,服务端处理完毕后返回结果集。
当然了,也可以直接把密码带在-p后面,这样就可以一行实现登陆:
mysql -uroot -p123456
这里的123456假设就是密码,但是这种方法极其不推荐,因为别人很有可能偷窥或者通过history命令获取到数据库密码,保护好数据库的重要隐私应当成为每个数据库管理员的基本意识。
四、启动选项
什么是启动选项?其实就是数据库启动的参数,就像我们的新电脑拿到手,第一次开机首先配置好用户名密码、语言、地区等选项,以后开机则默认使用这些参数了。对于MySQL也是如此,我们其实可以在启动MySQL的时候进行一些默认参数的设置,达到我们期望的目的,MySQL一般已经有了默认值,比如服务器允许同时连入的客户端的默认数量是151、默认存储引擎是InnoDB、默认的占用端口号是3306,这些值是可以在MySQL的启动的时候进行修改,这种设置项就是启动选项。
读者朋友如果不清楚什么是存储引擎没有关系,实际上他是负责数据存储和读取的关键角色,是后面我们学习MySQL需要着重研究的对象。
如何设置启动选项呢?有两种方式,一种是在命令行上设置,一种是基于配置文件设置。
第一种命令行的方式十分简单,我们回到启动服务端的三个命令:mysqld、mysqld_safe、mysql.server,我们以mysqld为例,比如我们上文提到MySQL的默认存储引擎是InnoDB:
SHOW VARIABLES LIKE ‘default_storage_engine%’;
关闭MySQL服务,以如下命令启动:
mysqld –default-storage-engine=MyISAM
再次登陆MySQL后查看默认的存储引擎:
可以看到我们的启动选项生效了!启动选项可以有多个,需要用到时我们只需要再去查询如何使用具体的参数即可。
不过这种方式用的少,因为命令行设置启动参数的方式只对本次启动有效,如果下一次重启则又需要配置同样的一坨启动选项才行,如此重复的工作是比较烦人的,因此可以将这些启动参数放到配置文件中,这样每次启动无需做重复工作了。
在类unix操作系统中,MySQL配置文件是“my.cnf”,那么配置文件位置应该在哪里呢?通过以下命令即可查出:
mysql –help|grep my.cnf
通过以上命令可以看出,mysql启动是会有一个读取配置文件的优先顺序,这几个路径中任意一个都可以作为配置文件的放置目录并且被mysql启动时读取。
由于我们是brew安装,默认会生成一个默认的/opt/homebrew/etc/my.cnf
:
配置文件的格式其实是:
[server]
(具体的启动选项...)
[mysqld]
(具体的启动选项...)
[mysqld_safe]
(具体的启动选项...)
[client]
(具体的启动选项...)
[mysql]
(具体的启动选项...)
[mysqladmin]
(具体的启动选项...)
可以看到,配置文件是被分割为了多个组,组名分别是server、mysqld、mysqld_safe、client、mysql、mysqladmin。每个组下边可以定义若干个启动选项。
配置文件中不同的选项组是给不同的启动命令使用的,如果选项组名称与程序名称相同,则组中的选项将专门应用于该程序。例如, [mysqld]和[mysql]组分别应用于mysqld服务器程序和mysql客户端程序。不过有两个选项组比较特别:
-
[server]组下边的启动选项将作用于所有的服务器程序。
-
[client]组下边的启动选项将作用于所有的客户端程序。
Col1 | Col2 | Col3 |
---|---|---|
启动命令 | 类别 | 能读取的组 |
mysqld | 启动服务器 | [mysqld]、[server] |
mysqld_safe | 启动服务器 | [mysqld]、[server]、[mysqld_safe] |
mysql.server | 启动服务器 | [mysqld]、[server]、[mysql.server] |
mysql | 启动客户端 | [mysql]、[client] |
mysqladmin | 启动客户端 | [mysqladmin]、[client] |
mysqldump | 启动客户端 | [mysqldump]、[client] |
可以看到,无论是哪种方式启动MySQL服务端程序,只要是配置了[server]服务端启动都会读到,只要是配置了[client]客户端也都会用到,这着实是一件比较让人省事的事情。
下面我配置一下/opt/homebrew/etc/my.cnf
:
[server]
default-storage-engine=InnoDB
port=3307
这里我设置了默认存储引擎是InnoDB,并且端口号为3307,无论以哪种方式启动后,查看端口号已经启动:
sunweiguo@sunweiguodeMacBook-Pro ~ % lsof -nP -i:3307
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 15831 sunweiguo 31u IPv6 0xd5c3516ee5e6c6b5 0t0 TCP *:3307 (LISTEN)
此时我们使用如下方式登陆会失败:
sunweiguo@sunweiguodeMacBook-Pro ~ % mysql -h127.0.0.1 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
如何解决呢?此时需要客户端指定端口号为3307就可以了:
mysql -h127.0.0.1 -uroot -P3307 -p
好了,下面说明两个原则:
配置文件优先级问题:如果不小心在不同优先级的目录下都配置了配置文件,此时会报错吗?答案是当然不会,因为这些目录仅仅是mysql读取配置文件的优先级,记住一个结论:如果我们在多个配置文件中设置了相同的启动参数,则以最后一个配置文件为准,读者朋友可以自己试一试哦。
同一个配置文件中多个组的优先级问题,比如同一个配置文件出现了以下配置:
[server]
default-storage-engine=InnoDB
[mysqld]
default-storage-engine=MyISAM
这种情况下,将以最后一个出现的组中的启动选项为准,比如这里的配置,最终存储引擎会是MyISAM。
关于启动选项就说这么多,后续如果有涉及到我们再去看是什么含义,我们目前只要知道这么多就足够了。
五、初体验
成功登陆mysql后,我们就可以进行基本的操作。
首先,如果我们想断开客户端与服务器的连接并且关闭客户端的话,可以在mysql>提示符后输入如下任意一个命令:
-
quit
-
exit
-
q
大多数情况下我们执行的是一些普通SQL,这些SQL往往需要以;结束,比如我查询当前的时间:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2022-07-31 19:24:32 |
+---------------------+
1 row in set (0.00 sec)
mysql>
此外还有一个结尾符叫做G
,也是经常使用的,他可以让结果以垂直的形式将每个列都展示在单独的一行中,看的比较清晰,我们可以对比下:
当某张表需要展示的列特别多时,G这种展示方式的优势就会凸显出来了。
如果不加;或者G等这些结束符,MySQL则认为这条语句没有输入结束,会一直傻傻地等待你。
如果你想放弃本次编写的命令,可以在输入的命令后边加上c,比如这样:
SELECT NOW()c
这条语句就立即作废了。
六、总结
本文紧接着概述篇继续探讨了服务端和客户端概念、MySQl安装目录下的服务端启动程序以及客户端连接程序、启动选项、并且初步体验了MySQL的登陆、退出以及一些通用注意点,内容较多,核心知识点如下:
-
计算机上运行的每一个程序也被称为一个进程,运行过程中的MySQL服务器程序和客户端程序也都是计算机中的进程,而概述篇中主要完成的是MySQL服务端程序的安装;
-
介绍了三种MySQL服务端进程启动方式:mysqld、mysqld_safe、mysql.server,别忘了我们是通过brew安装的,也可以通过brew services restart mysql@5.7来启动;
-
bin目录下有许多客户端程序,比方说mysqladmin、mysqldump、mysqlcheck等等,这里我们重点要关注的是可执行文件mysql,通过这个可执行文件可以让我们和服务器程序进程交互,也就是发送请求以及接收服务器的处理结果;
-
如何设置启动选项呢?有两种方式,一种是在命令行上使用,一种是基于配置文件使用;
-
命令行的方式不常用,因为命令行设置启动参数的方式只对本次启动有效,如果下一次重启则又需要配置同样的一坨启动选项才行,如此重复的工作是比较烦人的,因此可以将这些启动参数放到配置文件中,这样每次启动无需做重复工作了;
-
配置文件的方式中,mysql启动是会有一个读取配置文件的优先顺序,这几个路径中任意一个都可以作为配置文件的放置目录并且被mysql启动时读取。
-
[server]组下边的启动选项将作用于所有的服务器程序。
-
[client]组下边的启动选项将作用于所有的客户端程序。
-
学习了配置文件如何配置以及生效的规则,尤其需要注意两点:
-
配置文件优先级问题:如果不小心在不同优先级的目录下都配置了配置文件,此时会报错吗?答案是当然不会,因为这些目录仅仅是mysql读取配置文件的优先级,记住一个结论:如果我们在多个配置文件中设置了相同的启动参数,则以最后一个配置文件为准;
-
同一个配置文件中多个组配置了相同的参数,将以最后一个出现的组中的启动选项为准;
-
登陆、退出、结束符、c立即作废本条sql,以及通过mysql命令行登陆的时候不建议直接在-p后面加上密码,这是极其不安全的操作。
原文始发于微信公众号(幕后哈土奇):02|第二话:基础篇-MySQL初体验
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/112952.html