Есть четыре (4) СЦЕНАРИИ, на которые следует обратить внимание
СЦЕНАРИЙ № 1
Когда вы указываете -P<port number> вы должны использовать TCP/IP. Таким образом, -h<IPAddress> будет работать.
СЦЕНАРИЙ № 2
Когда вы указываете -P<port number> без -h<IPAddress> , предполагается localhost . В этом случае TCP/IP не используется, но для аутентификации используется файл сокета mysql.
СЦЕНАРИЙ № 3
Когда вы указываете -h127.0.0.1 без -P<port number> , предполагается localhost . В этом случае TCP/IP не используется, но для аутентификации используется файл сокета mysql.
СЦЕНАРИЙ № 4
Когда вы указываете -h127.0.0.1 с -P<port number> , localhost не предполагается. Будет использоваться TCP/IP, но пользователь должен быть правильно определен.
Учитывая сообщение об ошибке:
ОШИБКА 1045 (28000): доступ запрещен для пользователя '' @ 'localhost' (используется пароль: ДА)
и они так, как вы пытались войти
mysql -u -p -P9906 -h127.0.0.1
Вы нажали СЦЕНАРИЙ № 4
ПРЕДЛОЖЕНИЕ
В mysql.user убедитесь, что у вас есть
user@localhost (хорошо)
user@127.0.0.1 , (ок)
user@% (не рекомендуется, но может сделать)
с тем же паролем (или другими паролями, если это необходимо)
После успешного входа в систему, выполните этот запрос
SELECT USER(),CURRENT_USER();
USER() сообщает, как вы пытались пройти аутентификацию в MySQL
CURRENT_USER() сообщает, как вам разрешили проходить аутентификацию в MySQL
Добавление правильного пользователя позволяет вам правильно проходить аутентификацию. Ваша цель должна состоять в том, чтобы настроить пользователей в mysql.user таким образом, чтобы USER() и CURRENT_USER() имели одинаковый вывод или, по крайней мере, как можно более специфичные для хоста.