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

Разрешения / etc / mysql не позволяют подключаться к сокету не суперпользователю

Мы запускаем сервер Ubuntu 13.10 под Vagrant и столкнулись с интересной проблемой.

Мы переопределяем расположение сокета в conf.d / my.cnf

[client]
port                           = 3306
socket                         = /tmp/mysql.sock


[mysqld_safe]
socket                         = /tmp/mysql.sock

[mysqld]
user                           = mysql
pid-file                       = /var/run/mysqld/mysql.pid
socket                         = /tmp/mysql.sock
port                           = 3306
datadir                        = /var/lib/mysql
bind-address                   = 0.0.0.0

Все идет нормально. Запуская сервер, на самом деле есть сокет, который прослушивает / tmp.

Однако получить к нему доступ может только суперпользователь!

Как не суперпользователь, mysql -u root -pXXXX получает следующую ошибку:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Клиент пытается подключиться не к тому сокету.

Мы предположили, что проблема заключается в том, что наш непривилегированный пользователь не может получить доступ к файлам conf, чтобы найти правильный сокет, и на самом деле изменение разрешений для / etc / mysql на 0755 устраняет эту проблему, но это не похоже на правильное исправление.

В качестве примечания, 12.04 это поведение такое же, но маскируется тем фактом, что при запуске mysql он создает сокет в / tmp, но также создает символическую ссылку в / var / run / mysqld, поэтому, когда клиент пытается для подключения находит сокет по умолчанию.

На обеих машинах используется mysql версии 5.5.37.

В зависимости от вашей точной конфигурации, приведенного ниже может быть достаточно, чтобы решить проблему с подключением.

вы можете запустить mysql с помощью --socket = / tmp / mysql.sock

из Руководство по MySQL

--socket=path, -S path

Для подключений к localhost - файл сокета Unix, который нужно использовать, или, в Windows, имя именованного канала.

Чтобы сохранить этот параметр, не позволяя пользователю читать всю конфигурацию mysql, вы можете изменить настройки файла ~ / .my.cnf

видеть Файлы опций для подробностей

В вашем случае вы должны добавить в этот файл socket = / tmp / mysql.sock.

Я только что посмотрел на довольно свежую установку Ubuntu 14.04, и разрешения по умолчанию для / etc / mysql равны 755. Честно говоря, я не понимаю, почему вы думаете, что это проблема.