我已经在我的本地机器上安装了MySQL Community Edition 5.5,我想允许远程连接,这样我就可以从外部源连接。
我该怎么做呢?
我已经在我的本地机器上安装了MySQL Community Edition 5.5,我想允许远程连接,这样我就可以从外部源连接。
我该怎么做呢?
当前回答
如果mysqld有一个绑定地址设置为环回/本地地址(例如127.0.0.1),服务器将无法从远程主机到达,因为环回接口无法从任何远程主机到达。
将此选项设置为0.0.0.0(::对于IPv4+6)以接受来自任何主机的连接,如果您希望只允许在一个接口上连接,则将该选项设置为另一个外部可达地址。
源
其他回答
检查远程服务器是否允许通配符访问端口3306:
sudo lsof -i -P -n | grep监听
不应该是这样的:
mysqld 23083 mysql 21u IPv4 145900142 0t0 TCP 127.0.0.1:3306(听)
在这种情况下,我们需要更新/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf:
Bind-address = 127.0.0.1——> 0.0.0.0
然后重新启动mysql "sudo service mysql restart"
为了从客户端测试mySQL连接:
Nc -vz <host_address> 3306
根据我的经验,你可以在这个路径下找到配置文件/etc/mysql/mysql.conf.d/mysqld.cnf。
(我挣扎了一段时间才找到这条路)
如果mysqld有一个绑定地址设置为环回/本地地址(例如127.0.0.1),服务器将无法从远程主机到达,因为环回接口无法从任何远程主机到达。
将此选项设置为0.0.0.0(::对于IPv4+6)以接受来自任何主机的连接,如果您希望只允许在一个接口上连接,则将该选项设置为另一个外部可达地址。
源
在完成以上所有操作后,我仍然无法以根用户远程登录,但是telnet到3306端口确认MySQL正在接受连接。
我开始查看MySQL中的用户,并注意到有多个具有不同密码的根用户。
select user, host, password from mysql.user;
所以在MySQL中,我再次为root设置了所有密码,我最终可以以root身份远程登录。
use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
在我的情况下,我试图连接到一个远程mysql服务器在cent操作系统。在经历了许多解决方案(授予所有特权,删除ip绑定,启用网络)后,问题仍然没有得到解决。
事实证明,在寻找各种解决方案时,我遇到了iptables,这让我意识到mysql端口3306不接受连接。
下面是关于我如何检查和解决这个问题的一个小说明。
检查端口是否接受连接:
telnet (mysql server ip) [portNo]
添加ip表规则,允许端口上的连接:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
不建议在生产环境中这样做,但如果您的iptables没有正确配置,添加规则可能仍然不能解决问题。在这种情况下,应该做以下工作:
service iptables stop
希望这能有所帮助。