如何设置MySql Server远程访问(Debian Linux)
1. 登录Mysql Server:
$mysql -u root -p
2. 检查网络,Server是否允许远程连接:
mysql> show variables like '%skip_networking%'; 此值应该为‘OFF’,一般默认值即为'OFF', 表示允许TCP/IP连接
skip_networking: 只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接,不允许ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP).在值可以在/etc/mysql/my.cnf中进行设置.
3. 绑定权限到mysql.user数据表:
mysql> use mysql; mysql> GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; #允许任何IP地址('%'字符即表示这个意思)的PC, 用user帐户和password密码来远程访问整个MySQL Server('*.*'所有的所有) #必须加类似这样的帐户,才可以远程登陆. root帐户是无法远程登陆的,只可以本地登陆.
#绑定此server下某个特定数据库, 比如只可以远程访问itest表 #mysql> GRANT ALL ON itest.* TO user@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
4. 修改Mysql配置文件:
$sudo vim /etc/mysql/my.cnf #注释bind-address或者改为指定IP地址
5. 保存文件,重启service
$sudo /etc/init.d/mysql restart
6. 防火墙规则下,打开3306端口
$sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination #如果出现以上,则表示没有防火墙规则,所有端口已开放 #如果存在防火墙规则 $sudo vim /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙) -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙) Tips:不要把这两条规则添加到防火墙配置的最后一行,否则会导致防火墙启动失败, 可以添加到22端口下边. #################################### # Firewall configuration written by system-config-firewall ... ... -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT -A INPUT -j REJECT –reject-with icmp-host-prohibited ... ... #################################### Tips: INPUT <--> RH-Firewall-1-INPUT 根据配置文件使用不同的链 $sudo service apache2 restart #或者$sudo /etc/init.d/iptables restart 重启防火墙