默认mysql的用户是没有远程访问的权限的,因此当连接的客户端(程序,数据库图形化客户端等)跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限。
1、确保阿里云添加安全组,允许mysql端口3306保持为对应的ip开放,或者允许任意客户端链接。
2、确保防火墙开放3306端口。
* 摘抄 *
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
或只需要允许特定的服务器,ip为10.5.1.3:
/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT
或仅允许子网内的远程连接范围192.168.1.0/24
/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT
保存iptables规则:
# service iptables save
# service iptables save
FreeBSD / OpenBSD pf 的规则( /etc/pf.conf)
pass in on $ext_if proto tcp from any to any port 3306
pass in on $ext_if proto tcp from any to any port 3306
或允许允许ip:10.5.1.3
pass in on $ext_if proto tcp from 10.5.1.3 to any port 3306 flags S/SA synproxy state
pass in on $ext_if proto tcp from 10.5.1.3 to any port 3306 flags S/SA synproxy state
3、两种方法开放端口。修改表和授权法。 因为这次用的是修改表的方法解决问题,因而以此为例子。
mysql> use mysql;
mysql> update user set Host = '%' where Host="localhost";
mysql> select Host, User, Password from user;
mysql> flush privileges;