MySQL OCP888题解019-SHUTDOWN

1、原题

1.1、英文原题

Assuming that a user has correct privileges, which Linux console command will fail to shut down a MySQL server?
A. mysql -e ‘shutdown’
B. service mysqld stop
C. mysqld -e shutdown
D. mysqladmin shutdown

1.2、中文翻译

假设用户拥有正确的权限,哪个Linux控制台命令将无法关闭MySQL服务器?
A. mysql -e ‘shutdown’
B. service mysqld stop
C. mysqld -e shutdown
D. mysqladmin shutdown

1.3、答案

C

2、题目解析

2.1、题干解析

本题考察mysql客户端、mysqld服务器、mysqladmin管理端的知识。

2.2、选项解析

  1. mysql可以使用-e选项运行语句,所以选项A就可以关闭MySQL服务器,选项A错误。
  2. mysqld关闭的方法之一就是service mysqld stop,选项B错误。
  3. mysqld没有-e选项,所以选项C正确。
  4. mysqladmin shutdown可以关闭服务器,所以选项D错误。

3、知识点

3.1、知识点1:mysqld——MySQL服务器

mysqld,也被称为MySQL服务器,是一个单一的多线程程序,不会产生额外的进程。

  • mysqld(MySQL服务器)管理对MySQL数据目录的访问,数据目录中有数据库和表,同时也是日志文件和状态文件等其他信息的默认位置。
  • mysqld(MySQL服务器)启动后,它会监听客户端程序的网络连接,支持这些客户端对数据库的访问。
  • mysqld(MySQL服务器)有一组系统变量,在它运行时影响其操作。系统变量可以在服务器启动时设置,其中许多变量可以在运行时改变以实现动态的服务器重新配置。
  • mysqld(MySQL服务器)也有一组状态变量,提供有关其运行的信息,可以监控这些状态变量以获取运行时的性能特征。

官方参考文档

3.2、知识点2:用mysql客户端运行SQL语句

  • 当在mysql后面跟-e或–execute,后面再跟上SQL语句时(一般要在两边加上引号,因为SQL语句有空格),表示执行该语句并退出。如下例所示:

$> mysql -u root -p -e "SELECT VERSION(); SELECT NOW()" 
Enter password: ****** 
+------------+ 
| VERSION() | 
+------------+ 
| 5.7.29 | 
+------------+ 
+---------------------+ 
| NOW() | 
+---------------------+ 
| 2019-09-03 10:36:28 | 
+---------------------+

官方参考文档
官方参考文档

3.3、知识点3:mysqladmin - 一个MySQL服务器管理程序

  • mysqladmin是一个用于执行管理操作的客户端。你可以用它来检查服务器的配置和当前状态,创建和删除数据库,以及更多。
  • mysqladmin通过shutdown命令关闭MySQL服务器。(注意区别命令和选项,一般不加-或者–的是命令,加-或–的是选项,所以这里的shutdown不是选项,是命令)。

官方参考文档

3.4、知识点4:SHUTDOWN语句

  • SHUTDOWN语句停止MySQL服务器。它需要 SHUTDOWN 权限。
  • 一个成功的SHUTDOWN语句的执行序列包括检查权限,验证参数,并向客户端发送一个OK包,然后服务器就被关闭了。
  • SHUTDOWN语句为使用mysqladmin shutdown命令或mysql_shutdown() C API函数的相同功能提供了一个SQL级接口 。
  • Com_shutdown状态变量跟踪SHUTDOWN语句的数量。由于状态变量在每次服务器启动时都会被初始化,并且不会在重新启动时持续存在,因此Com_shutdown的值通常为0,但如果SHUTDOWN语句被执行但失败了,则可能为非零。
  • 另一种停止服务器的方法是向它发送一个SIGTERM信号,这可以由root或拥有服务器进程的账户来完成。SIGTERM使服务器的关闭可以在连接不到服务器的情况下进行。

官方参考文档

3.5、知识点5:Linux systemd命令组

参考文档

systemd 并不是一个命令,而是一组命令,包括systemctl、systemd-analyze等等,涉及到系统管理的方方面面。

3.5.1、systemd的主要命令

3.5.1.1、systemctl:Systemd 的主命令,用于管理系统

systemctl:systemctl是 Systemd 的主命令,用于管理系统。

# 重启系统
$ sudo systemctl reboot

# 关闭系统,切断电源
$ sudo systemctl poweroff

# CPU停止工作
$ sudo systemctl halt

# 暂停系统
$ sudo systemctl suspend

# 让系统进入冬眠状态
$ sudo systemctl hibernate

# 让系统进入交互式休眠状态
$ sudo systemctl hybrid-sleep

# 启动进入救援状态(单用户状态)
$ sudo systemctl rescue
3.5.1.2、systemd-analyze:查看启动耗时

systemd-analyze命令用于查看启动耗时。

# 查看启动耗时
$ systemd-analyze                                                                                       

# 查看每个服务的启动耗时
$ systemd-analyze blame

# 显示瀑布状的启动过程流
$ systemd-analyze critical-chain

# 显示指定服务的启动流
$ systemd-analyze critical-chain mysql.service
3.5.1.3、hostnamectl:管理主机信息

hostnamectl命令用于查看当前主机的信息。

# 显示当前主机的信息
$ hostnamectl

# 设置主机名。
$ sudo hostnamectl set-hostname rhel7
3.5.1.4、localectl:管理本地化设置

localectl命令用于查看本地化设置。

# 查看本地化设置
$ localectl

# 设置本地化参数。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB
3.5.1.5、timedatectl:管理当前时区设置。

timedatectl命令用于查看当前时区设置。

# 查看当前时区设置
$ timedatectl

# 显示所有可用的时区
$ timedatectl list-timezones                                                                                   

# 设置当前时区
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS
3.5.1.6、loginctl:查看当前登录用户

loginctl命令用于查看当前登录的用户。

# 列出当前session
$ loginctl list-sessions

# 列出当前登录用户
$ loginctl list-users

# 列出显示指定用户的信息
$ loginctl show-user ruanyf

3.5.2、Unit

3.5.2.1、Unit的概念

systemd 可以管理所有系统资源,不同的资源统称为 Unit(单位)。Unit 一共分成如下12种:

  • Service unit:系统服务
  • Target unit:多个 Unit 构成的一个组
  • Device Unit:硬件设备
  • Mount Unit:文件系统的挂载点
  • Automount Unit:自动挂载点
  • Path Unit:文件或路径
  • Scope Unit:不是由 Systemd 启动的外部进程
  • Slice Unit:进程组
  • Snapshot Unit:Systemd 快照,可以切回某个快照
  • Socket Unit:进程间通信
  • socketSwap Unit:swap 文件
  • Timer Unit:定时器

systemctl list-units命令可以查看当前系统的所有 Unit 。

# 列出正在运行的 Unit
$ systemctl list-units

# 列出所有Unit,包括没有找到配置文件的或者启动失败的
$ systemctl list-units --all

# 列出所有没有运行的 Unit
$ systemctl list-units --all --state=inactive

# 列出所有加载失败的 Unit
$ systemctl list-units --failed

# 列出所有正在运行的、类型为 service 的 Unit
$ systemctl list-units --type=service
3.5.2.2、Unit的状态

可以使用status命令查看状态

# 显示系统状态
$ systemctl status

# 显示单个 Unit 的状态
$ systemctl status mysql.service

# 显示远程主机的某个 Unit 的状态
$ systemctl -H root@rhel7.example.com status httpd.service

除了status命令,systemctl还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。

# 显示某个 Unit 是否正在运行
$ systemctl is-active mysql.service

# 显示某个 Unit 是否处于启动失败状态
$ systemctl is-failed mysql.service

# 显示某个 Unit 服务是否建立了启动链接
$ systemctl is-enabled mysqld.server.service
3.5.2.3、Unit 管理

对于用户来说,最常用的是下面这些命令,用于启动和停止 Unit(主要是 service)。

# 立即启动一个服务
$ sudo systemctl start mysql.service

# 立即停止一个服务
$ sudo systemctl stop mysql.service

# 重启一个服务
$ sudo systemctl restart mysql.service

# 杀死一个服务的所有子进程,慎用
$ sudo systemctl kill mysql.service

# 重新加载一个服务的配置文件
$ sudo systemctl reload mysql.service

# 重载所有修改过的配置文件
$ sudo systemctl daemon-reload

# 显示某个 Unit 的所有底层参数
$ systemctl show mysql.service

# 显示某个 Unit 的指定属性的值
$ systemctl show -p CPUShares httpd.service

# 设置某个 Unit 的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500
3.5.2.4、Unit的依赖关系

Unit之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。

  • systemctl list-dependencies命令列出一个 Unit 的所有依赖。
shell> systemctl list-dependencies mysql.service
  • 上面命令的输出结果之中,有些依赖是 Target 类型(详见下文),默认不会展开显示。如果要展开 Target,就需要使用–all参数
shell> systemctl list-dependencies --all mysql.service
3.5.2.5、Unit的配置文件
  • 每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。systemctl enable命令用于在上面两个目录之间,建立符号链接关系。
shell> sudo systemctl enable clamd@scan.service
# 等同于
shell> sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'
  • 如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
shell> sudo systemctl disable clamd@scan.service
  • 配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket。如果省略,Systemd 默认后缀名为.service,所以sshd会被理解成sshd.service。

4、总结

  1. mysql是客户端程序,可以在-e或–execute选项后,加上带引号的一个或一组SQL语句(用分号隔离),则mysql会向服务器端发送并执行这些语句,然后退出。
  2. mysqld是MySQL服务器,是一个单一的多线程程序,不会产生额外的进程。它管理对数据目录的访问,监听客户端的网络连接,支持客户端对数据目录的访问。mysqld有系统变量和状态变量两种变量。系统变量是配置,影响其运行。状态变量则用于监控其运行。
  3. mysqladmin是一个用于执行管理操作的客户端。可用它来检查服务器的配置和当前状态,创建和删除数据库,以及更多。
  4. Linux的systemd是一组命令,包括ststemctl在内,实现对系统的管理。在系统管理时,Linux将管理对象抽象为Unit,一个Unit可以是系统服务、硬件设备、文件系统挂载点、文件或目录、进程组、快照、Socket通信、swap文件和定时器等。每个对象都有配置文件, 默认放在目录/etc/systemd/system/(但这里大多数情况下是符号链接),systemd命令通过读取配置文件进行启动、停止等Unit的管理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值