我刚刚安装了一个带有 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_networking
和bind-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 响应远程连接?
答案1
尝试添加bind-address = 0.0.0.0
到您的[mysqld]
部分my.cnf
并重新启动mysqld。
答案2
我已经mariadb
安装了。解决方案是修改bind-address
位于/etc/mysql/mariadb.conf.d/50-server.cnf
答案3
我刚刚遇到这个问题,我的问题似乎与防火墙有关。顺便说一句 - 感谢@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.
➜ ~
如果仍然有问题,则可能是用户权限问题。
答案4
当所有其他方法都失败并且您确定服务器正在侦听默认端口并且您正试图从其他主机拼命连接 mysql 客户端时,请尝试在 mysql 命令的 URL 上指定端口。
尽管很奇怪,但我不得不使用以下语法:
mysql -h someHost --port=3306 -u someUser -p someDb
我完全是偶然发现了这个(错误?)(在我失去头发之后:))。
我的设置:debian jessie,全新 mysql 5.7.18,创建用户/数据库,注释掉 bind-address,重新启动 mysqld