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

Права доступа /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.

решение1

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

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

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

--socket=path, -S path

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

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

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

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

решение2

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

Связанный контент