如何让MySQL(mysqld)创建并写入“/var/run/mysqld”目录?

如何让MySQL(mysqld)创建并写入“/var/run/mysqld”目录?

我真的不明白 Linux 中所有这些权限是如何运作的。

要启动 MySQL 服务器mysqld程序,必须将其.pid文件写入/var/run/mysqld/目录。但我们知道FHS(文件系统层次标准)那:

在启动过程开始时,必须清除(根据需要删除或截断)此目录下的文件。

所以mysqld 不得不在以下位置创建/mysqld目录/var/run/ 每次MySQL 服务器已启动。

的所有者和组/varroot并且/var是:

drwxr-xr-x  13 root root  4096 may 20 23:41 var.

我们还从FHS(文件系统层次结构标准)中了解到:

/var/run 对于非特权用户(root 或运行守护进程的用户)应该是不可写的;如果任何用户可以在此目录中写入,这将是一个重大的安全问题。

因此mysqld无法写入目录。事实上,当我运行mysqld启动 MySQL 服务器时,我总是收到一个错误:

user@user-desktop:~$ sudo mysqld --console
130720 23:43:02 [ERROR] Can't start server : Bind on unix socket: Permission denied
130720 23:43:02 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
130720 23:43:02 [ERROR] Aborting

问题是:如果标准禁止打开此目录进行写入,那么如何mysqld写入.pid文件/var/run/mysqld/?这显然是矛盾的,不是吗?

我的问题是:如何在不改变目录权限的情况mysqld下创建和写入文件?目前我看到的唯一方法:/var/run/mysqld//var/run

user@user-desktop:$ sudo chmod a+w /var

但标准禁止这样做。

答案1

/var/run 对于非特权用户来说应该是不可写的意味着允许 root 和 sudo 帐户(因为这些是特权用户)对其进行写入。

MySQL 的 upstart 脚本以 root 身份启动,然后允许在 中创建文件或目录/var/run。并且此文件使用配置中设置的权限创建。这应该是/etc/my.cnf,它将具有类似这样的

[mysqld]
user   = mysql
socket = /var/lib/mysql/mysql.sock

/etc/init.d安装 MySQL 服务器后,您应该会发现一些与 mysql 相关的东西,我得到了以下信息:

在此处输入图片描述

您确定没有安装 MySQL 客户端吗?

答案2

(服务器版本:WSL2 中的 5.7.28-0ubuntu0.18.04.4(Ubuntu))

Apparmor 保存着控制其他文件权限的系统二进制文件。在第一次成功连接到 mysqld 服务器之前,我在“允许 pid、套接字、套接字锁定文件访问”下添加了此行,之后我将其删除,但仍然可以再次连接。

~$ sudo nano /etc/apparmor.d/usr.sbin.mysqld
/run/mysqld/*, rwx
~$ sudo service apparmor reload

在此之前,我遇到了其他一些错误...必须更改安装时自动创建的 /mysqld-files/ 文件夹的所有权和权限。然后将此选项添加到配置文件中,默认情况下设置为 null,这意味着服务器禁用导入和导出操作。:

~$ sudo chown <username> /var/lib/mysql-files/ && chmod 750 /var/lib/mysql-files/
~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
secure_file_priv = /var/lib/mysql-files

此外,我还必须添加这一点,因为错误告诉我:

explicit_defaults_for_timestamp = ON

在 WSL 中,您不必初始化 mysql。在安装时发生(/var/lib/mysql/ 中的初始化内容)。所以我们可以直接登录。如果我不在登录命令开头写 sudo,则会出现“ERROR 1698 (28000): 拒绝用户‘root’@‘localhost’访问”:

~$ sudo service mysql start
~$ sudo mysql -u root -p
Enter Password: [just ENTER]

然后最后修复“没有目录,使用 HOME=/ 登录”:

~$ sudo service mysql stop
~$ sudo usermod -d /var/lib/mysql/ mysql

ps 在编辑配置文件之前一定要先复制一份,并更改标准端口 3306,然后搜索手册

相关内容