Mysql 无法在 /tmp 中创建套接字,但在其他地方

Mysql 无法在 /tmp 中创建套接字,但在其他地方

我已经设置 mysql 通过 /etc/mysql/my.conf 在 /tmp/mysql.sock 中创建套接字,但重新启动 mysql 服务器后,套接字文件未显示。如果我将套接字位置更改为 /var/run/mysql/mysql.sock,它会创建它。Lsof 甚至告诉我 mysql 进程在 /tmp/mysql.sock 处打开了一个套接字,但它根本不存在。

我想下面的控制台输出最能描述这一点。

λ paukul [~] → ls -al /tmp 
total 12
drwxrwxrwt  8 root   root    220 Nov 13 01:55 .
drwxr-xr-x 18 root   root   4096 Oct 18 16:03 ..
drwxrwxrwt  2 root   root     40 Nov 13 01:54 .font-unix
drwxrwxrwt  2 root   root     40 Nov 13 01:54 .ICE-unix
-rw-------  1 paukul paukul  104 Nov 13 01:55 serverauth.HPR12fsB3
drwx------  3 root   root     60 Nov 13 01:54 systemd-private-23e4ad16efb8basdb2eb23b2073-mysqld.service-aio3pf
drwxrwxrwt  2 root   root     40 Nov 13 01:54 .Test-unix
srwx------  1 root   root      0 Nov 13 01:54 wpa_ctrl_384-1
-r--r--r--  1 root   paukul   11 Nov 13 01:55 .X0-lock
drwxrwxrwt  2 root   root     60 Nov 13 01:55 .X11-unix
drwxrwxrwt  2 root   root     40 Nov 13 01:54 .XIM-unix

λ paukul [~] → ps aux | grep mysqld
mysql      323  0.0  0.6 596380 101712 ?       Ssl  01:54   0:00 /usr/bin/mysqld --pid-file=/run/mysqld/mysqld.pid

λ paukul [~] → sudo lsof -p 323 | grep sock
[sudo] password for paukul: 
mysqld  323 mysql   22u  unix 0xffff88040add4600      0t0  15296 /tmp/mysql.sock type=STREAM

λ paukul [~] → grep socket /etc/mysql/my.cnf 
socket = /tmp/mysql.sock
socket = /tmp/mysql.sock

答案1

您不应尝试在 /tmp 中放置任何旨在在系统服务之间共享的内容。

它不会起作用,因为 systemd 提供了私人 /tmp 目录对大多数服务来说,这消除了大量潜在的安全漏洞。启动服务时,systemd 会将服务放入容器中,将服务看到的 /tmp 目录更改为,在本例中为 。/tmp/systemd-private-23e4ad16efb8basdb2eb23b2073-mysqld.service-aio3pf/tmp每次启动服务时,都会随机生成此目录名称。

用于进程间通信的套接字应该放在其他地方,例如/run(正如您已经做的那样)。

相关内容