写点什么

MySQL 之 my.cnf 配置文件

作者:TimeFriends
  • 2022 年 8 月 04 日
  • 本文字数:2194 字

    阅读完需:约 7 分钟

MySQL之my.cnf配置文件

之前没有仔细研究过 my.cnf 文件,今天有时间研究了一下 my.cnf 中的一些概念,这里简单整理如下,如果有什么问题,还请大家指出。

按照教程安装好 MySQL 之后,打开 etc 目录下的 my.cnf 文件,大概可看到下面这样的参数列表,可能不同版本的 mysql 参数多少会有一些不一致,但是并不妨碍我们理解。



首先,我们可以看到这个文件里面有 mysqld 和 mysql_safe 两类参数,我们知道 mysqld 和 mysql_safe 都可以启动 mysql 服务,那么 mysqld 和 mysql_safe 这两个类之间有什么不同呢?要讨论这个问题,我们需要引入第三个类别 mysql.server,并同时讨论这三种启动方式的区别。

问题 1.mysql.server,mysqld,mysqld_safe 的区别

mysql.server

它是一个服务器启动的 shell 脚本,主要作用就是为了方便启动和关闭 mysql 服务,它使用 mysql_safe 来启动 mysql 服务器,在 mysql.server 启动服务器之前,它将目录转换到 mysql 安装目录里面去,然后调用 mysqld_safe。mysql.server 通过向服务器发送一个信号来停止它,也可以使用 mysqladmin shutdown 命令来停止服务器,如果你使用源码或者二进制格式安装 mysql(没有自动安装 mysql.server 这个脚本),你可以手动安装; 这个脚本在 mysql 安装目录下的 support-files 目录里边或者在源码包里边;为了能使用 service mysqld start 命令启动 mysql 服务,此时需要做的是将 mysql.server 的脚本复制到/etc/init.d 目录下,然后重命名为 mysqld,最后给予执行权限。mysqld.server 会从配置文件的 mysqld 区域读取配置选项;

可以在全局配置文件/etc/my.cnf 中配置 mysql.server,mysql.server 脚本支持下面这些选项;一旦指定,它们必须放在配置文件中,不能放到命令行中(mysql.server 支持的命令行参数只有 start 和 stop);

--basedir mysql 安装目录;

--datadir 数据文件的路径;

--pid-file 服务器写自己的进程号的文件;如果这个不指定,mysql 使用默认的 hostname.pid;

The PID file value 被传递给 mysqld_safe,覆盖了[mysqld_safe]下面指定的值;因为 mysql.server 读取[mysqld]选项组而不读取[mysqld_safe]选项组,所以为了在使用 mysql.server 调用 mysqld_safe 的时候, mysqld_safe 能够获得一样的 pid,我们可以让[mysqld]选项组和[mysqld_safe]选项组使用同一个 pid-file;

mysql_safe

这是 mysql 服务启动脚本,它是 mysqld 的父进程,它调用 mysqld 启动数据库服务,并在启动 MySQL 服务器后继续监控其运行情况,并在其死机时重新启动它,当我们开启 mysqld_safe 命令的时候,可以防止 mysql 服务的意外终止,这里做一个小小的测试。

首先查看当前的 mysql 服务:



然后发现服务中有一个 mysql_safe 和一个 mysqld,其中 mysqld_safe 的端口号是 1929,mysqld 的端口号是 2228,这个时候,我们把 2228 的进程杀掉:



我们发现,进程号为 2228 的 mysqld 进程已经被杀掉,进程号为 1929 的 mysqld_safe 进程还在,又重新生成了一个进程号为 2288 的 mysqld 进程,接下来,我们杀掉 mysqld_safe 的进程,kill -9 1929,得到的结果如下:



我们发现杀掉 mysqld_safe 之后,只剩下进程号为 2288 的 mysqld 进程了,并没有生成新的 mysqld_safe 进程,这个时候,在再次杀掉 mysqld 进程 2288,结果如下:



此时,所有的进程都被关闭掉了,综合上述操作,我们可以发现,当 mysqld_safe 进程存在时,我们无法直接杀掉 mysqld 进程,当我们杀掉 mysqld_safe 进程的时候,此时才可以杀掉 mysqld 进程,这便是 mysqld_safe 的守护进程作用,它可以防止 mysqld 进程被意外终止。

mysqld

mysqld 是关于服务器端的程序,要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。

问题 2.mysql 的三种启动方式:

1、mysqld

启动 mysql 服务器:


客户端连接:


2、mysqld_safe

启动 mysql 服务器:


客户端连接:


3、mysql.server


启动 mysql 服务器:


客户端连接:同 1、2

问题 3.socket 文件 mysql.sock 详解

mysql 有两种连接方式,一种是 TCP/IP 的方式,另外一种是 socket 的方式,mysql.sock 主要用户程序与 mysqlserver 在同一机器上,发起本地连接的时候使用,即无需再连接服务时使用 host 和 IP,mysql.sock 是随着每一次 mysql server 的启动而生成的,当服务重启时,mysql.sock 也会重新生成。利用 mysql.sock 连接服务的样例如下:

linux 下安装 mysql 连接的时候经常回提示说找不到 mysql.sock 文件,解决办法很简单: 1.如果是新安装的 mysql,提示找不到文件,就搜索下,指定正确的位置。 2.如果 mysql.sock 文件误删的话,就需要重启 mysql 服务,如果重启成功的话会在 datadir 目录下面生成 mysql.sock 到时候指定即可。


问题 4.查看 mysql 的配置文件调用顺序

mysql --help|grep “my.cnf”,当启动 mysql 服务的时候,会从当前目录的 my.cnf 中去读对应的参数,优先级顺序和输出顺序保持一致。



问题 5.MySQL 的 pid 文件介绍

MySQL pid 文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID。

1、未指定 pid 文件时,pid 文件默认名为 主机名.pid,存放的路径在默认 MySQL 的数据目录。通过 mysqld_safe 启动 MySQL 时,mysqld_safe 会检查 pid 文件,如果 pid 文件不存在,不做处理;如果文件存在,且 pid 已占用则报错 "A mysqld process already exists",如果文件存在,但 pid 未占用,则删除 pid 文件。2、查看 MySQL 的源码可以知道,mysqld 启动后会通过 create_pid_file 函数新建 pid 文件,通过 getpid() 获取当前进程 pid 并将 pid 写入 pid 文件。3、因此,通过 mysqld_safe 启动时, MySQL pid 文件的作用是:在数据文件是同一份,但端口不同的情况下,防止同一个数据库被启动多次。

发布于: 刚刚阅读数: 3
用户头像

TimeFriends

关注

加油! 年轻人! 2022.08.02 加入

这里没有天赋异禀,也没有天资聪颖,只有每天的陪伴。万物瞬息万变,但唯一不变的只有变化。抓住变化的根本,以时间为伍,以坚持为伴,做时间的朋友。

评论

发布
暂无评论
MySQL之my.cnf配置文件_8月月更_TimeFriends_InfoQ写作社区