无法在 Vagrant 中使用 'root'@'IP_Address' 连接 MySQL

Unable to connect MySQL using 'root'@'IP_Address' in Vagrant

我正在尝试使用 Vagrant VM 连接 MySQL。 我可以在 vagrant ssh 中使用 root@localhost 访问 MySQL ,但是当我使用 root@192.168.33.10 连接时用于 Vagrant VM 的 IP,我收到 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)

正确的命令是

mysql -u root -h 192.168.33.10 -p

仔细查看错误信息。错误消息表明提供给 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 table 中查找具有与该字符串匹配的 User 值的行。 (

要找到匹配项,MySQL 还将查看 Host 列中的值。这将必须与连接被视为来自的主机相匹配。这意味着 'root'@'localhost''root'@'192.168.33.10' 不同的 用户。

-p提示输入密码

省略了要使用的协议、要连接的主机、端口号等的任何命令选项。MySQL当我们不提供任何这些时默认为

-h localhost

好像那是我们指定的。


如果我们想通过TCP/IP协议连接到MySQL服务器,而不是使用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 地址解析为主机名。

如果我们想使用 mysql.users table 的 Host 列中的 IP 地址,我们需要禁用反向 DNS 查找。我们通过包含此选项来做到这一点:

skip_name_resolve

my.cnf配置文件中。