" 127.0.0.1"选项指定,但仍然使用" localhost"名称

时间:2016-05-21 19:07:05

标签: mysql

我使用-h选项,指定我想通过特定的主机/接口连接到MySQL服务器,但MySQL告诉我这个,显然没有那么多意义

root@ilg40:/# mysql -h 127.0.0.1 -u root -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

OBS:我已经通过127.0.0.1创建了对root的访问权限(已经执行了FLUSH PRIVILEGES()。

root@ilg40:/# mysql -e "SELECT User,Host,authentication_string FROM mysql.user;"
+-----------+-----------+-------------------------------------------+
| User      | Host      | authentication_string                     |
+-----------+-----------+-------------------------------------------+
| root      | localhost |                                           |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root      | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+-----------+-------------------------------------------+

你们有没有想过会发生什么? 我无法找到失败的地方:( ..

P.S:我正在使用Debian Jessy + MySQL 5.7.12

root@ilg40:/# cat /etc/debian_version 
8.4
root@ilg40:/# mysql -e "SELECT VERSION();"
+-----------+
| VERSION() |
+-----------+
| 5.7.12    |
+-----------+

1 个答案:

答案 0 :(得分:0)

根据 MySQL official doc

  

“服务器使用线程安全执行主机名解析   gethostbyaddr_r()和gethostbyname_r()调用操作系统   支持他们。

     

否则,执行查找的线程会锁定互斥锁   并调用gethostbyaddr()和gethostbyname()。   在这种情况下,没有其他线程可以解析不在主机中的主机名   缓存,直到持有互斥锁的线程释放它。“

我找到的解决方案是:从MySQL中删除用户'root'@'localhost'。

DROP USER 'root'@'localhost';

我试图修改/ etc / hosts,但没有好处。如果您在/ etc / hosts中以不同的方式映射地址,MySQL会执行这两个系统调用,将127.0.0.1映射到localhost,还有其他一些方法。

警告:请确保至少有另一个用户具有管理员权限的MySQL,使用127.0.0.1进行连接,否则,您可能会失去对MySQL的访问和/或管理员权限。

相关问题