无法连接到MySQL服务器错误111

170
我在Linux服务器上安装了MySQL服务,IP地址为192.168.1.100。但是当我尝试连接到该IP时,总是出现错误(111),但使用localhost和127.0.0.1却可以正常连接。
以下是我的ifconfig命令输出:
beer@beer-laptop# ifconfig | grep "inet addr"
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
我使用以下命令连接MySQL:
beer@beer-laptop# mysql -ubeer -pbeer -h192.168.1.100
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.100' (111)
beer@beer-laptop# mysql -ubeer -pbeer -hlocalhost Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 160 Server version: 5.1.31-1ubuntu2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
beer@beer-laptop# mysql -ubeer -pbeer -h127.0.0.1 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 161 Server version: 5.1.31-1ubuntu2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
从另一台机器连接时,也会出现错误111:
another@another-laptop# mysql -ubeer -pbeer -h192.168.1.100
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.100' (111)
在这种情况下,使用localhost/127.0.0.1和192.168.1.100之间有什么区别呢?我不知道如何从另一台机器连接到此数据库。请帮忙解决,谢谢!

2
161个赞同和51个标记,近500,000次浏览量,明确的问题陈述和几个答案。为什么一开始就将其关闭,并且为什么它仍然关闭?这显然对某些人非常有用。 - Lou
4个回答

280

这可能意味着你的MySQL服务器仅监听本地接口。

如果你有这样的代码:

bind-address = 127.0.0.1

在你的my.cnf配置文件中,你应该注释它们(在行首添加#),然后重新启动MySQL。

sudo service mysql restart

当然,要做到这一点,你必须成为服务器的管理员。


6
显然,他没有 skip-networking 这一行;-) - Michael Krelin - hacker
13
如何知道MySQL的my.cnf文件所在位置: https://dev59.com/tnE95IYBdhLWcg3wDpcG - Cyril Jacquart
2
但是当您可以从MySQL Workbench连接到它时会发生什么?我有同样的问题。 - George Pamfilis
3
我按照答案给出的方法操作,但仍然无法使其运行。后来我发现,“bind-address”参数在“/etc/mysql/mysql.conf.d/mysqld.cnf”文件中。我在那里将其注释掉后,它就可以运行了! - Yahya
3
Ubuntu版本号>=16.04的更新版本可能在/etc/mysql/mysql.conf.d/myqld.cnf文件中有这一行内容。 - deldev
显示剩余3条评论

41

111意味着连接被拒绝,这意味着您的mysqld仅侦听localhost接口。

要更改它,您可能需要查看my.cnf文件中mysqld部分中的bind-address值。


1
值得注意的是,还要检查端口号是否有效。不匹配的 :3306:3307 也可能导致 111 错误。 - NXT
2
@NXT,我甚至不知道mysql是否可以在不同的接口上监听不同的端口,但即使它可以(鉴于原帖中的症状),这也是非常不可能的情况。然后可能会有防火墙规则等等。有许多实现方法,但可能性是不同的... - Michael Krelin - hacker
1
并不总是这样。我的my.cnf文件没有任何bind-addressskip-networking行,仍然出现相同的错误。也没有安装防火墙。想法用光了。 - CoderGuy123
嗯,111通常意味着连接被拒绝 :) 而且本地主机限制在这种情况下是由于其他证据。如果您提供有关您的情况的更多详细信息,我可能能够帮助您?此外,根据您的系统,现在您可能会在多个文件中分散配置。 - Michael Krelin - hacker
如果我的mysqld中没有bind-address值怎么办? - Toma Tomov
然后它获取默认值(不知道是什么,你可以查看文档)。如果没有默认值,你可以添加一个。在执行操作之前,你可以查看文档以了解正在进行的操作。 - Michael Krelin - hacker

10

如果之前的答案都没有给出任何解决方案,那么你应该检查你的用户权限。

如果你能够使用 root 登录到 mysql 中,那么你应该添加以下内容:

CREATE USER 'root'@'192.168.1.100' IDENTIFIED BY  '***';
GRANT ALL PRIVILEGES ON * . * TO  'root'@'192.168.1.100' IDENTIFIED BY  '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

然后尝试使用 mysql -ubeer -pbeer -h192.168.1.100 再次连接。 应该可以正常工作。


21
我认为与用户权限相关的错误不会导致 111 错误。 - ufk
1
它实际上起作用了,我也得到了111错误。 - Borjante
看起来这比通过注释掉127.0.0.1行来打开整个网络的mysql更好,这应该是最好的解决方案。 - nyxee

8

如果您正在运行cPanel/WHM,请确保在防火墙中将该IP列入白名单。您还需要将该IP添加到您尝试连接的cPanel帐户的远程SQL IP列表中。


3
判断错误是否由防火墙引起的一个好方法是看返回错误所需的时间。如果是MySQL引起的问题,响应应该几乎是即时的。 - Grim...
你能解释一下这是如何完成的吗? - User

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接