Mysql无法在/ tmp中创build套接字,而是在其他地方创build套接字

我已经设置了mysql来通过/etc/mysql/my.conf在/tmp/mysql.sock中创build它的套接字,但是在重新启动mysql服务器之后,套接字文件并没有显示出来。 如果我将套接字位置更改为/var/run/mysql/mysql.sock,则会创build它。 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 

你不应该试图在/ tmp中放置什么东西,这意味着在系统服务之间共享。

这将不起作用,因为systemd为大多数服务提供私有/ tmp目录 ,从而消除了大量潜在的安全漏洞。 在启动服务时,systemd将服务放置在一个容器中,将服务所在的/ tmp目录更改为/tmp/systemd-private-23e4ad16efb8basdb2eb23b2073-mysqld.service-aio3pf/tmp 。 每次启动服务时都会随机生成此目录名称。

用于进程间通信的套接字应放置在其他位置,如in /run (就像你已经做的那样)。