如何设置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 重启防火墙
posted @ 2014-12-11 17:38  5Mi17  阅读(447)  评论(0编辑  收藏  举报