Использование псевдонима для сервера localhost в MySQL - PullRequest
5 голосов
/ 11 декабря 2011

Когда я нахожусь в офисе, MySQL работает на определенном сервере, который называется «mysqldev». В моем файле /etc/hosts я установил «mysqldev», чтобы он соответствовал IP-адресу этого сервера. Все идет нормально. Однако, когда я нахожусь вне офиса, используя свой ноутбук, я хочу использовать свою локальную базу данных MySQL, поскольку я клонирую определенные базы данных там, и у меня нет интернета для подключения к офисной базе данных. Я не хочу менять свои скрипты, а скорее конфигурацию своего ноутбука. Итак, на моем ноутбуке я установил /etc/hosts:

127.0.0.1 localhost mysqldev

Однако по какой-то причине это работает не так, как ожидалось. Если я вхожу в MySQL, используя сервер на локальном хосте, все хорошо. Но когда я пытаюсь войти на сервер mysqldev (тот же IP, что и у localhost), я получаю сообщение об ошибке:

Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] Connection refused (trying to connect via tcp://mysqldev:3306)

(это использует PHP, но с использованием командной строки это та же ошибка)

Пользователи, настроенные в системе, имеют определенные разрешения для входа на этот сервер:

CREATE USER 'test'@'mysqldev' IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'mysqldev';

Я также отключил брандмауэр для проверки, и это не имеет значения. Что бы это могло быть?

Ответы [ 2 ]

6 голосов
/ 11 декабря 2011

Клиентская библиотека MySQL пытается угадать, как подключиться к вашей базе данных. Когда вы задаете localhost в качестве имени хоста, это предполагает, что вы используете локальный сокет (найдите на вашем компьютере файл с именем mysql.sock, вероятно, под /var/lib/mysql или /usr/local/mysql/.

Однако, когда вы используете что-нибудь еще, например, IP-адрес, другое имя хоста или, в вашем случае, mysqldev, он пытается подключиться к хосту через tcp. Из сообщения об ошибке кажется, что ваш локальный сервер MySQL не прослушивает TCP-порт 3306 (по умолчанию MySQL)

Проверьте, позволяет ли ваш my.cnf (вероятно, /etc/my.cnf или /etc/mysql/my.cnf) использовать tcp. Если вы найдете строку типа

skip-networking

закомментируйте это:

#skip-networking

и перезагрузите сервер. Затем попробуйте снова подключиться.


Чтобы узнать, где находится ваш сокет, подключитесь через localhost и введите следующую команду:

mysql> show global variables like '%socket%';
+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| socket        | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
0 голосов
/ 12 января 2012

Если вы используете MAMP Pro и столкнулись с проблемами, вы можете просто снять флажок «Разрешить только локальный доступ» в настройках MySQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...