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

Как ubuntu, mysql определяет имя хоста?

Это конкретный вопрос. У меня есть apache, работающий на ubuntu параллельно, и mysql, работающий на этой виртуальной машине и на хосте OS X. Поскольку я пытаюсь эмулировать свои производственные среды локально, я подключаюсь к удаленному серверу mysql на OS X. Я делаю это успешно для некоторых клиентов, и теперь у меня есть новый.

У меня есть umhef.ca, osx и dom.biz в моем файле хостов ubuntu. Когда я пингую OS X из ubuntu, он сообщает об успехе и правильном IP. В моем файле настроек drupal указан хост "osx" и пользователь rootd. Пользователь настроен на сервере mysql OS x с правами на эту базу данных. Откуда мне это знать? Я вижу других пользователей, которые успешно настроились в mysql, и они выглядят такими же, как этот пользователь.

Это фон, который поможет мне устранить причину появления этой ошибки: PDOException: SQLSTATE [HY000] [1045] Доступ запрещен для пользователя 'rootd'@'umhef.ca' (с использованием пароля: YES)

Что это за хост? Это законный хост, поскольку он и другие указывают на Os x VM. Итак, чтобы решить эту проблему, я пытаюсь сделать это из ubuntu:

mysql --host=osx --user=rootd --password=mypassword
Access denied for user 'rootd'@'umhef.ca' (using password: YES)

Я пробовал закомментировать мой файл хостов ubuntu, но почему ubuntu игнорирует параметр моего хоста? Что еще мне следует использовать для устранения этой проблемы? спасибо, сэм

Если вы можете войти в MySQL как root @ localhost, запустите следующее

SELECT USER(),CURRENT_USER();

О чем это вам говорит:

Когда вы получили ошибку

Доступ запрещен для пользователя 'rootd'@'umhef.ca' (с паролем: ДА)

Хост-часть определялась по таблице mysql.user. MySQL имеет необычный, но методичный способ аутентификации пользователей. В свободное время вы можете прочитать мою публикацию DBA StackExchange Ошибка MySQL: доступ запрещен для пользователя 'a' @ 'localhost' (с использованием пароля: ДА) о том, как это работает.

В любом случае, чтобы перейти к делу, сделайте это

SELECT user,host FROM mysql.user;

Это даст вам все возможное CURRENT_USER() значения (способы, которыми вам разрешено подключаться к MySQL). Я предполагаю, что вы пытались войти в систему как rootd@osx и у вас, вероятно, нет записи в mysql.user. Другими словами, если вы запустите

SELECT CONCAT(user,'@',host) userhost FROM mysql.user
WHERE user='rootd' AND host='osx';

ты ничего не получишь. Если ты бежишь

SELECT CONCAT(user,'@',host) userhost FROM mysql.user WHERE user='rootd';

вы можете увидеть rootd@umhef.ca. Если вы этого не сделаете, тогда mysqld предположит, что вы идете этим путем, и в mysql.user.

Если вы внесли какие-либо изменения в ОС, обязательно перезапустите mysqld, чтобы он узнал об этих изменениях.