Я установил mysql для создания своего сокета в /tmp/mysql.sock через /etc/mysql/my.conf, но после перезапуска сервера 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
Вы не должны пытаться поместить в / tmp что-либо, предназначенное для совместного использования между системными службами.
Это не сработает, потому что systemd предоставляет частные / tmp каталоги к большинству сервисов, что устраняет большой класс потенциальных уязвимостей безопасности. Когда вы запускаете службу, systemd помещает службу в контейнер, изменяя каталог / tmp, который обслуживает служба, в этом случае /tmp/systemd-private-23e4ad16efb8basdb2eb23b2073-mysqld.service-aio3pf/tmp
. Это имя каталога генерируется случайным образом при каждом запуске службы.
Сокеты, предназначенные для межпроцессного взаимодействия, должны быть размещены в другом месте, например, в /run
(как вы уже сделали).