Назад | Перейти на главную страницу

Mysql не может создать сокет в / tmp, но везде

Я установил 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 (как вы уже сделали).