Я пытаюсь подключиться MySQL
с помощью Vagrant VM
,
Я могу получить доступ MySQL
с помощью root@localhost
в vagrant ssh, но когда я подключаюсь используя [email protected]
какой IP используется для Vagrant VM, я получаю access denied
ошибка.
Это мои настройки файла Vagrant:
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 3306
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
[email protected] уже добавлен в mySQL и даны разрешения
mysql> select User,Host from mysql.user;
+-----------+---------------+
| User | Host |
+-----------+---------------+
| root | 192.168.33.10 |
| mysql.sys | localhost |
| root | localhost |
+-----------+---------------+
3 rows in set (0.00 sec)
MySQL 5.7 mysqld.cnf
I have tried bind-address to '0.0.0.0' and bind-address '192.168.33.10'.
Все еще сообщение об ошибке показывает:
vagrant@vagrant-ubuntu-trusty:/etc/mysql/mysql.conf.d$ mysql -u [email protected] -p
Enter password:
ERROR 1045 (28000): Access denied for user '[email protected]'@'localhost' (using password: YES)
Внимательно посмотрите на сообщение об ошибке. Сообщение об ошибке указывает, что имя пользователя, предоставленное серверу MySQL:
'[email protected]'
И хост, с которого MySQL видит соединение:
'localhost'
Вот как клиент MySQL интерпретирует эти параметры:
mysql -u [email protected] -p
-u user
предоставляет строковое значение, в этом случае он видит '[email protected]'
в качестве значения имени пользователя. @
знак и цифры и точки являются лишь частью строки имени пользователя. Там нет никакого особого значения, данное этим персонажам, это просто строка. И сервер MySQL будет искать строку в mysql.users
стол, который имеет User
значение, соответствующее этой строке. (
Чтобы найти совпадение, MySQL также рассмотрит значение в Host
колонка. Это должно соответствовать хосту, с которого видно соединение. Что это значит 'root'@'localhost'
это разные пользователь чем 'root'@'192.168.33.10'
,
-p
запросить пароль
Опущены любые параметры команды для используемого протокола, хоста для подключения, номера порта и т. Д. По умолчанию MySQL, когда мы не предоставляем ничего из этого,
-h localhost
как будто это то, что мы указали.
Если мы хотим подключиться к серверу MySQL по протоколу TCP / IP, а не через сокет Unix, нам нужно указать -h hostname
или же -h ipaddress
или укажите --protocol=TCP
Имя хостаlocalhost
: имеет особое значение в MySQL. Это соединение через сокет Unix, а не через петлевой IP-адрес, который мы могли бы ожидать.
Например, чтобы подключиться к серверу MySQL на локальном компьютере, прослушивая порт по умолчанию 3306, используя IP-адрес обратной связи:
mysql -h 127.0.0.1 -u root -p
Большая часть этой информации довольно хорошо описана в Справочном руководстве по MySQL.
http://dev.mysql.com/doc/refman/5.7/en/connecting.html
Кроме того, по умолчанию MySQL использует обратный поиск DNS для преобразования IP-адресов в имена хостов.
Если мы хотим использовать IP-адреса в Host
столбце таблицы mysql.users, нам нужно отключить обратный поиск DNS. Мы делаем это, включив эту опцию:
skip_name_resolve
в my.cnf
конфигурационный файл.
Правильная команда
mysql -u root -h 192.168.33.10 -p