
Мы используем сервер 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
--socket=path, -S path
Для подключений к localhost — файл сокета Unix, который будет использоваться, или, в Windows, имя именованного канала, который будет использоваться.
Чтобы сохранить эту настройку, не позволяя пользователю читать всю конфигурацию MySQL, вы можете изменить настройки файла ~/.my.cnf.
видетьФайлы опцийдля подробностей
В вашем случае вам нужно добавить socket=/tmp/mysql.sock в этот файл.
решение2
Я только что посмотрел на довольно свежую установку Ubuntu 14.04, и права доступа по умолчанию для /etc/mysql — 755. Честно говоря, я не понимаю, почему вы считаете это проблемой.