侧边栏壁纸
  • 累计撰写 247 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MySQL 数据库服务端启动原理

kaixindeken
2021-04-26 / 0 评论 / 0 点赞 / 115 阅读 / 2,400 字

MySQL 是 Web 开发中最流行的关系型数据库,无论你是在小公司还是大公司,无论你的应用访客寥寥,还是每天需要处理百万、千万甚至亿级用户请求,无论你使用的编程语言是 PHP、Node.js、Java、还是 Python、Golang,每天都要与 MySQL 打交道进行数据存取。

更有好事者称,大部分程序员的工作实际上扮演的都是数据库前端,在需求流水线上进行重复着 CRUD 操作。

所以,尽管你不是专业的 DBA(数据库管理员),只要你想要做好 Web 开发这份差事,似乎都有必要更全面地了解 MySQL 底层的运行原理,并且透过这些原理更好地使用 MySQL,打造出高性能的 MySQL 服务器,从而处理更多请求,提高系统的可用性。

服务端启动

一般安装完 MySQL 软件后,都会包含服务端和客户端,以本人 Mac 本地通过 Homebrew 安装的 MySQL 5.7 为例(其他系统安装路径不同,但是原理和目录结构是一致的,你可以根据自己的 MySQL 安装路径对比学习),对应的安装目录位于 /usr/local/opt/mysql@5.7,在终端窗口进入该目录,运行如下命令查看该目录的目录结构:

tree .

1.jpeg

我们在 bin 目录中可以看到一些比较平时经常用到的、比较熟悉的命令,其中 mysql 用于建立客户端与服务端的连接,mysql.server、mysqld、mysqld_safe 都是启动 MySQL 服务端用到的命令。

所以,从这里可以侧证当前安装的 MySQL 软件既包含了 MySQL 客户端,又包含了 MySQL 服务端。

我们来看看如何启动数据库服务端,这里有几个可以用到的命令:

  • mysqld
  • mysqld_safe
  • mysql.server

这几个命令是层层递进的:

  • mysqld:这个可执行文件就代表着 MySQL 服务端程序,运行这个可执行文件就可以直接启动一个服务端进程。
  • mysqld_safe:这是一个启动脚本,它会间接调用 mysqld,而且还顺便启动了另外一个监控进程,这个监控进程在 MySQL 服务端进程挂了之后可以帮助重启它。另外,使用mysqld_safe 启动 MySQL 服务端进程时,它会记录服务端出错信息和其他诊断信息,从而方便后续排查错误原因。
  • mysql.server:这也是一个启动脚本,它会间接调用 mysqld_safe(可以查看其链接文件的源码看到更多细节)。

所以,通常我们调用 mysql.server 启动 MySQL 服务端即可:

mysql.server start

1.jpeg

如果要退出 MySQL 服务端,运行如下命令:

mysql.server stop

需要注意的是,使用 mysql.server 启动 MySQL 服务端程序时,除了 strat 和 stop 之类的启停命令不再支持其他参数传递:

1.jpeg

这也就意味着不能传递额外的启动参数,如果要设置 MySQL 服务端启动参数,只能通过配置文件设置。

注:使用 mysqld 或者 mysqld_safe 启动 MySQL 服务端进程是可以传递额外启动参数的。

如果想要查看默认启动参数配置,可以先通过如下命令查看所有配置文件的路径:

1.jpeg

可以看到 MySQL 会从多个配置文件读取配置值,如果对应的配置文件不存在,则跳过,这里默认只有 /usr/local/etc/my.cnf 是有效的(你可以创建其他路径下的配置文件,MySQL 会按照上述列举的先后顺序读取配置值,后面的配置值回覆盖前面的):

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1

目前只有一个配置项,[mysqld] 对应的分组会应用于 mysqld 命令(如果有一个 [mysql] 分组则该分组下的配置会应用于 mysql 命令),由于 mysql.server 调用了 mysqld_safe,而 mysqld_safe 又调用了 mysqld,所以运行 mysql.server 命令时也会读取并应用该配置。该配置的含义是只监听来自本地的客户端请求,远程客户端连接会被 MySQL 服务端拒绝。

你还可以设置更多分组、添加更多的配置,不过这些不属于本教程的重点,不再详细展开了,后面用到会单独介绍,你只需要了解配置文件读取的策略和配置项的含义即可。

需要指出的是,不管命令行是否设置了额外参数,配置文件始终会被读取,如果命令行参数与配置文件配置同名,则命令行参数会覆盖配置文件配置。

0

评论区