Это конкретный вопрос. У меня есть 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, чтобы он узнал об этих изменениях.