【问题标题】:MySQL: Able to connect to localhost but not to 127.0.0.1MySQL:能够连接到 localhost 但不能连接到 127.0.0.1
【发布时间】:2018-04-24 19:46:14
【问题描述】:

我猜我忘记了一些明显的事情,但我似乎无法使用 MySQL 连接到 127.0.0.1。通过localhost 连接有效。

MySQL/Linux 版本:Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04

这行得通:

$ mysql -h localhost -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 71982
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

这行不通:

$ mysql -h 127.0.0.1 -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

在我看来,MySQL 正在监听127.0.0.1:3306:

$ netstat -plnt
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1841/mysqld 

我什至可以使用 Telnet 连接到端口 3306:

$ telnet 127.0.0.1 3306
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
j
5.5.5-10.0.31-MariaDB-0ubuntu0.16.04.2TGYk-=,d5-??wz}'Hr*s+u24mysql_native_password

以防万一,我还为主机 127.0.0.1 创建了一个具有授予选项的用户:

mysql > CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '<redacted>';
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;

以下是有关用户的一些信息(@brian-ecker 建议的查询):

MariaDB [(none)]> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-------------+
| User             | Host      | plugin      |
+------------------+-----------+-------------+
| root             | localhost | unix_socket |
| root             | 127.0.0.1 |             |
+------------------+-----------+-------------+

我也尝试过创建一个由 unix_socket 识别的 root 用户,但没有它的帮助:

MariaDB [(none)]> CREATE USER 'root'@'127.0.0.1' IDENTIFIED VIA unix_socket;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
MariaDB [(none)]> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-------------+
| User             | Host      | plugin      |
+------------------+-----------+-------------+
| root             | localhost | unix_socket |
| root             | 127.0.0.1 | unix_socket |
+------------------+-----------+-------------+

您对为什么我可以通过“localhost”而不是“127.0.0.1”连接有什么建议吗?

【问题讨论】:

  • 你试过用密码吗? mysql -h 127.0.0.1 -u root -p。 MySQL 在你使用localhost 时尝试使用套接字连接,但是当你连接到127.0.0.1 时它使用tcp,甚至可以为localhost 和127.0.0.1 设置不同的权限,所以127.0.0.1 可能有一个设置了密码,但localhost 不需要?
  • 是的,我有:mysql -h 127.0.0.1 -u root -p 返回:Enter password: ,当我输入密码时,我看到:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  • 你能发布结果吗:SELECT User, Host, plugin FROM mysql.user;?
  • 当然。我已经用查询结果编辑了原始帖子。

标签: mysql mariadb


【解决方案1】:

通过将其添加到 MySQL 配置来解决它:

skip-name-resolve       = 1

来自MySQL documentation:

如果它是 OFF,mysqld 在检查客户端连接时解析主机名。如果为 ON,mysqld 只使用 IP 号;在这种情况下,授权表中的所有 Host 列值都必须是 IP 地址或 localhost。

【讨论】:

  • 请记住,您也有可能在需要时错过FLUSH PRIVILEGES,或者主机localhost 是除“普通”IP 主机127.0.0.1 之外的特殊单独登录。或者也许两者兼而有之。很可能不需要更改此服务器设置,但可能需要重新启动/刷新服务器权限。
  • 这也为我修复了 - MariaDB 10.1.26 (Debian Stretch)。最烦人的行为。
【解决方案2】:

我在 Debian 9 上的 MariaDB 10.1.26 上与此作过斗争。我发现如果您想在@987654322 上使用 TCP 连接,使用 root 作为用户名根本不起作用 @,或任何地方。

最后,我创建了另一个具有全局权限的用户——没有问题。

【讨论】:

  • 找到解决办法了吗?我有你的情况:在 MariaDB 10.1.31/Debian 9 上,我可以使用localhost(套接字)以root 连接,无论是否使用密码(后者中的unix_socket 插件)。但是我无法以root@127.0.0.1 的身份连接。我还启用了skip-name-resolve,但没有成功(至少我现在确定我使用的是 TCP 而不是套接字)。创建另一个用户有效。
  • 不,从未找到解决方案。
  • 似乎 Debian 团队重新编译了 MariaDB 的源代码以禁用此功能,但我在文档中找不到任何内容。我目前没有时间,但最好尝试使用官方的 MariaDB 软件包而不是 Debian 软件包,或者尝试联系 Debian 维护人员。
【解决方案3】:

也许您想在 localhost 的情况下使用 unix 套接字。但是,如果您不使用“unix_socket”插件,则连接到 127.0.0.1 会再次起作用。例如。执行以下操作:

UPDATE user SET plugin = '' 
WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

此解决方案的一个缺点是您不能再从系统的 root 帐户使用 MySQL root 登录;即无需输入密码即可访问 MySQL root;例如mysql -u root -h localhost 将不再起作用。

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多