MySQL拒绝接受远程连接


13

我刚刚用mysql(percona 5.5)安装了新的ubuntu服务器,但是它拒绝接受来自远程主机的连接

如果我尝试远程连接到此服务器,将会发生以下情况:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

当我检查mysql是否侦听远程连接时,我看到了以下内容:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

如您所见,它表示127.0.0.1:3306“我只接受本地连接”。

我检查了我skip_networkingbind-address变量-一切都关闭了:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

我有另一台服务器具有完全相同的配置,并且效果很好:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

这可能是什么原因?如何使mysql响应远程连接?


请注意,该变量bind_address仅自5.6版本起可用(bugs.mysql.com/bug.php?id=44355),因此即使在v5.5中设置了变量,它也将返回一个空集。
骗子2014年

向我们显示您的my.cnf设置。
user9517 2014年

您是否检查过mySQL之外的问题,例如防火墙或路由问题?
斯特斯

Answers:



0

这可能是由于mysql数据库用户表(使用mysql; show table;)造成的。如果绑定到0.0.0.0不适用于您,请尝试在该表中为用户提供主机“%”代替“ localhost”。

例如,尝试创建如下用户:

创建用户yourusername @'%'由'yourpassword'标识

ant尝试与该用户建立联系。


3
通常,连接被拒绝意味着在相关IP:端口上没有监听。
user9517 2014年

没错,我不记得在telnet上说过“无法连接到MySQL服务器”。抱歉。
periket2000'2014-4-4

“无法连接到MySQL”不是源于用户不可用的特权。这是{IP:port}对,未通过连接尝试进行匹配。
法比恩·哈达迪

0

如果其他所有方法都失败了,并且您确定服务器正在侦听默认端口,并且您正试图从其他主机拼命与mysql客户端连接,请尝试在mysql命令的URL上指定端口。

奇怪的是,我不得不使用以下语法:

mysql -h someHost --port=3306 -u someUser -p someDb

我完全是偶然地(在松开头发之后才发现)(错误?))。

我的设置:debian jessie,全新的mysql 5.7.18,创建了用户/数据库,注释了绑定地址,重启了mysqld


合理的解释是,如--port指令所示,someHost MySQL服务器实际上正在侦听3306。但是您的mysql客户端二进制文件来自MariaDB版本...因此,除非另有说明,否则默认使用端口3307。检查您正在使用的mysql客户端二进制文件的来源。提示:还要检查您的PATH环境变量...
Fabien Haddadi '18

0

我刚遇到这个问题,而我的问题似乎与防火墙有关。顺便说一句-感谢@Temnovit提供了Mysql故障排除命令。

我使用netstat告诉服务器正在运行并且在正确的端口上。我还可以通过简单的telnet命令告诉我的服务器不接受该端口上的连接。

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

在关于Fedora防火墙命令的另一个有用答案之后,我可以打开正确的端口。

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

然后,我的telnet命令成功了。

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

如果仍然有问题,则很可能是用户权限问题。



-1

波纹管链接中描述的解决方案应该可以解决您的问题 http://www.debianhelp.co.uk/remotemysql.htm


2
bml13,引用支持您答案的链接是一种很好的做法,但是我们更希望人们在此处写下答案并添加一个链接,而不仅仅是放置链接并保留它。
MadHatter 2014年

1
...尤其是因为现在这是一个死链接。
haz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.