02|第二话:基础篇-MySQL初体验

通过第一话我们快速了解了MySQL的历史和特性,并且在本机做好了安装和简单的客户端连接,本文接着第一话继续聊一聊。

本篇文章整体脉络如下:

02|第二话:基础篇-MySQL初体验

02|第二话:基础篇-MySQL初体验

一、客户端和服务端架构

在互联网中,client /server(客户端 / 服务器)的概念,应该是最基础也是最重要的概念了,我们来聊一聊。

02|第二话:基础篇-MySQL初体验

对于一个基于 client /server(客户端 / 服务器)架构的应用程序,首先需要有一个服务器(或称 “服务端”)。

服务器的英语单词是 server,server 的原意是 “服务生,侍者”,生活中的例子就是餐厅里为顾客服务的人。客户端的英语单词是 client,client 的原意是 “顾客”。

如果一台机器可以提供某种服务,我们就可以称其为服务器,各种网站都是提供7*24小时的服务,所以服务器应该一直提供可访问的服务,因此可以说它是一直在监听的。实际上,服务器在网络上监听,并准备好响应对其发出的请求。

我们可以使用netstat或lsof命令查看目前一些正在运行的服务的基本情况(不同操作系统的命令参数是不一样的,具体如何使用可自行百度):

02|第二话:基础篇-MySQL初体验

可以看到本机mysql服务正在监听在127.0.0.1:3306上。

总之,我们可以说服务就是在机器上监听的程序,我们可以将这样的机器称为服务器。

相对应服务端,就是客户端,客户形式众多,比如浏览器、APP、电子邮箱等等。

可以说,当今的互联网大多数是基于客户端 / 服务器的运作方式,也就是说,这不是唯一的连接方式。

例如,在 P2P(Peer To Peer,表示 “点对点”)网络中,每个人都可以扮演客户端和服务器的角色。服务不是由我们要访问的单个服务器提供的,只要是拥有资源的机器都可以充当服务器的角色。

为什么要聊客户端和服务端架构呢?因为我们的MySQL架构也是如此,一般情况下,我们会部署一个MySQL的服务运行在服务器中,代码作为客户端去访问MySQL服务从而进行增删改查。

02|第二话:基础篇-MySQL初体验

计算机上运行的每一个程序也被称为一个进程,运行过程中的MySQL服务器程序和客户端程序也都是计算机中的进程,概述篇也正是完成了MySQL服务端程序在本机的安装,结合自带的MySQL客户端连接工具可进行登陆。

02|第二话:基础篇-MySQL初体验

二、启动服务端程序

第一话概述篇中我们完成了本机安装,并且默认安装目录是:

/opt/homebrew/opt/mysql@5.7

在这个目录下,有一个关键的bin目录,这个目录下存放了许多可执行文件,这些可执行文件有的是服务器程序,有的是客户端程序。

其中mysqld打头的一般都是服务端程序,可以用来启动一个MySQL进程。

我们在概述篇中所使用的启动命令是:

brew services restart mysql@5.7

实际上这里也可以直接启动,我们首先关闭服务,尝试使用mysqld来启动下

02|第二话:基础篇-MySQL初体验

由于信息较多,未全部展示最终启动成功的说明,不过确实是成功启动了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

02|第二话:基础篇-MySQL初体验

三、启动客户端程序

了服务端程序,bin目录下还有许多客户端程序,比方说mysqladmin、mysqldump、mysqlcheck等等,这里我们重点要关注的是可执行文件mysql,通过这个可执行文件可以让我们和服务器程序进程交互,也就是发送请求以及接收服务器的处理结果。启动这个可执行文件时一般需要一些参数,格式如下:

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

参数名 含义
-h 表示启动服务器程序的计算机的域名或者IP地址,如果服务器程序就运行在本机的话,可以省略这个参数,也可以填localhost或者127.0.0.1。也可以写作 –host=主机的形式。
-u 登陆用户名
-p 登陆密码(注意这里的p是小写,大写的P是指端口号

本地连接只需要写:

mysql -uroot -p

回车后输入密码,即可连接成功,进入成功后的界面:

02|第二话:基础篇-MySQL初体验

下面就可以在mysql>后面输入sql语句,将命令发送给服务端,服务端处理完毕后返回结果集。

当然了,也可以直接把密码带在-p后面,这样就可以一行实现登陆:

mysql -uroot -p123456

这里的123456假设就是密码,但是这种方法极其不推荐,因为别人很有可能偷窥或者通过history命令获取到数据库密码,保护好数据库的重要隐私应当成为每个数据库管理员的基本意识

02|第二话:基础篇-MySQL初体验

四、启动选项

什么是启动选项?其实就是数据库启动的参数,就像我们的新电脑拿到手,第一次开机首先配置好用户名密码、语言、地区等选项,以后开机则默认使用这些参数了。对于MySQL也是如此,我们其实可以在启动MySQL的时候进行一些默认参数的设置,达到我们期望的目的,MySQL一般已经有了默认值,比如服务器允许同时连入的客户端的默认数量是151、默认存储引擎是InnoDB、默认的占用端口号是3306,这些值是可以在MySQL的启动的时候进行修改,这种设置项就是启动选项。

读者朋友如果不清楚什么是存储引擎没有关系,实际上他是负责数据存储和读取的关键角色,是后面我们学习MySQL需要着重研究的对象。

如何设置启动选项呢?有两种方式,一种是在命令行上设置,一种是基于配置文件设置

第一种命令行的方式十分简单,我们回到启动服务端的三个命令:mysqld、mysqld_safe、mysql.server,我们以mysqld为例,比如我们上文提到MySQL的默认存储引擎是InnoDB:

SHOW VARIABLES LIKE ‘default_storage_engine%’;

02|第二话:基础篇-MySQL初体验

关闭MySQL服务,以如下命令启动:

mysqld –default-storage-engine=MyISAM

再次登陆MySQL后查看默认的存储引擎:

02|第二话:基础篇-MySQL初体验

可以看到我们的启动选项生效了!启动选项可以有多个,需要用到时我们只需要再去查询如何使用具体的参数即可。

不过这种方式用的少,因为命令行设置启动参数的方式只对本次启动有效,如果下一次重启则又需要配置同样的一坨启动选项才行,如此重复的工作是比较烦人的,因此可以将这些启动参数放到配置文件中,这样每次启动无需做重复工作了。

在类unix操作系统中,MySQL配置文件是“my.cnf”,那么配置文件位置应该在哪里呢?通过以下命令即可查出:

mysql –help|grep my.cnf

02|第二话:基础篇-MySQL初体验

通过以上命令可以看出,mysql启动是会有一个读取配置文件的优先顺序,这几个路径中任意一个都可以作为配置文件的放置目录并且被mysql启动时读取。

由于我们是brew安装,默认会生成一个默认的/opt/homebrew/etc/my.cnf

02|第二话:基础篇-MySQL初体验

配置文件的格式其实是:

[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

关于启动选项就说这么多,后续如果有涉及到我们再去看是什么含义,我们目前只要知道这么多就足够了。

02|第二话:基础篇-MySQL初体验

五、初体验

功登陆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,也是经常使用的,他可以让结果以垂直的形式将每个列都展示在单独的一行中,看的比较清晰,我们可以对比下:

02|第二话:基础篇-MySQL初体验

当某张表需要展示的列特别多时,G这种展示方式的优势就会凸显出来了。

如果不加;或者G等这些结束符,MySQL则认为这条语句没有输入结束,会一直傻傻地等待你。

如果你想放弃本次编写的命令,可以在输入的命令后边加上c,比如这样:

SELECT NOW()c

这条语句就立即作废了。

02|第二话:基础篇-MySQL初体验

六、总结

本文紧接着概述篇继续探讨了服务端和客户端概念、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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!