#php #mysql #vagrant #vagrantfile #mysql-5.7
#php #mysql #vagrant #vagrantfile #mysql-5.7
Вопрос:
Я пытаюсь подключиться MySQL
с помощью Vagrant VM
. Я могу получить доступ MySQL
с помощью root@localhost
vagrant ssh, но когда я подключаюсь, используя root@192.168.33.10
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"
root@192.168.33.10 уже добавлен в 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 root@192.168.33.10 -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root@192.168.33.10'@'localhost' (using password: YES)
Комментарии:
1. я думаю, вы установили пароль, когда вашему sql-соединению не нужен пароль
2. Я не очень разбираюсь в vagrant, но вы пытаетесь получить доступ к mysql изнутри виртуальной машины или с хоста или другого компьютера? Я предполагаю локально, поэтому попробуйте создать другого пользователя и подключиться к нему вместо root или предоставить доступ к этому IP-адресу root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.33.10' IDENTIFIED BY 'P4$$WORD' WITH GRANT OPTION;
Ответ №1:
Внимательно посмотрите на сообщение об ошибке. Сообщение об ошибке указывает, что имя пользователя, предоставленное серверу MySQL,:
'user@192.168.33.10'
И хост, с которого MySQL видит соединение, является:
'localhost'
Вот как клиент MySQL интерпретирует эти параметры:
mysql -u root@192.168.33.10 -p
-u user
предоставляет строковое значение, в данном случае оно отображается 'root@192.168.33.10'
как значение имени пользователя. @
Знак, цифры и точки являются лишь частью строки имени пользователя. Этим символам не придается никакого особого значения, это просто строка. И сервер 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
конфигурации.
Ответ №2:
Правильная команда
mysql -u root -h 192.168.33.10 -p