无法在 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
配置文件中。
我正在尝试使用 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
配置文件中。