我使用-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 |
+-----------+
答案 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的访问和/或管理员权限。