Я недавно переместил свой mysql datadir
из /var/lib/mysql
в новый каталог /home/mysql
установлен на новом жестком диске.
Для наглядности подумал, что неплохо было бы разместить tmpdir
и socket
на этом новом жестком диске.
Все работает по плану, пока не переместил файл сокета. Перемещение файла сокета предотвращает вход phpMyAdmin; Я могу нормально войти в систему из командной строки и с помощью своего веб-фреймворка, но не с помощью phpMyAdmin.
Единственная разница между рабочей конфигурацией и не в моей my.cnf
файл..
Работает:
[mysqld]
socket = /var/lib/mysql/mysql.sock
...
[client]
socket = /var/lib/mysql/mysql.sock
Не:
[mysqld]
socket = /home/mysql/mysql.sock
...
[client]
socket = /home/mysql/mysql.sock
Предполагая, что это ошибка разрешений, я проверил пути к каждому местоположению:
drwxr-xr-x. root root var
drwxr-xr-x. root root lib
drwxr-xr-x mysql mysql mysql
srwxrwxrwx mysql mysql mysql.sock
drwxr-xr-x. root root home
drwxr-xr-x mysql mysql mysql
srwxrwxrwx mysql mysql mysql.sock
так что я предполагаю, что они в порядке. Я ошибся?
Я phpMyAdmin настроен на использование 'localhost'
У меня есть mysql bind-address
параметр установлен на IP-адрес нашей локальной сети для сервера (192.168.etc.)
Я также перезапустил оба httpd
и mysqld
серверов при тестировании нового конфига.
Я вполне счастлив оставить файл сокета там, где он есть, при условии, что это не проблема безопасности / производительности, но хотелось бы знать, что происходит, если кто-нибудь может помочь пролить свет!
Если вы не используете встроенное расположение по умолчанию, PHP также необходимо явно настроить с указанием расположения файла сокета MySQL в файле php.ini или в строке подключения ...
pdo_mysql.default_socket
= /home/mysql/mysql.sock
или в зависимости от вашего выбора API
mysqli.default_socket
= /home/mysql/mysql.sock
Так как Ибеннет предложил в своем комментарии выше, установив путь сокета к новому местоположению woks. В моем случае настройка по умолчанию для типа подключения была 'tcp'. Это также необходимо изменить на 'разъем'.
Таким образом, две строки, которые необходимо изменить в config.in.php файлы:
$cfg['Servers'][$i]['socket'] = '/home/mysql/mysql.sock';
$cfg['Servers'][$i]['connect_type'] = 'socket';
Не пытайтесь перезапустить httpd:
systemctl restart httpd