做SEO经常会遇到这样那样的问题,解决问题是SEO必备的技能,今天采集过程中,入库的时候,发现无法远程连接mysql数据库。于是乎,搞了一天....下面来详细介绍下步骤。
一、本地开启Telnet客户端服务
1、按“Win + R”快捷键,打开“运行”对话框,输入“cmd”后按回车键,输入Telnet 110.110.110.110 3306看下通不通,其中110.110.110.110是远程服务器ip地址,如果提示telnet不是内部或外部命令而导致无法运行(如图所示)
2、按“Win + R”快捷键,打开“运行”对话框,输入“optionalfeatures”后按回车键,如下图所示:
3、在打开的“Windows功能”窗口中,找到并勾选“Telnet客户端”,如下图所示:
4、接着系统会应用修改,应用成功之后,关闭即可。
二、3306通过linux防火墙
1、输入Telnet 110.110.110.110 3306,如果如图所示,则3306端口没有通过防火墙,下面我们来开启下。
也可以通过shell操作远程服务器iptables -L -n,如果没有3306,也说明3306端口没有通过防火墙。
2、vim /etc/sysconfig/iptables更改防火墙设置
vi /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端口通过防火墙)
特别提示:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端口这条规则的下面
添加好之后防火墙规则如下所示:
######################################
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-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
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT
#####################################
/etc/init.d/iptables restart #最后重启防火墙使配置生效
三、数据库远程连接权限
mysql -u root –p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
事后查找更多资料发现有比较全的方案:
远程登陆数据库的时候出现了下面出错信息:
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx',
经过今天下午的反复纠结,关于MySql数据库无法远程连接的问题可以归结为以下几点:
1). 没有授予相应的权限:
例如,你想root使用123456从任何主机连接到mysql服务器。
1
|
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root' @ '%' IDENTIFIED BY '123456' WITH GRANT OPTION ;
|
如果你想允许用户jack从ip为10.10.50.127的主机连接到mysql服务器,并使用654321作为密码
1
2
|
mysql> GRANT ALL PRIVILEGES ON *.* TO 'jack' @’10.10.50.127’ IDENTIFIED BY '654321' WITH GRANT OPTION ;
mysql>FLUSH RIVILEGES
|
2). 修改mysql数据库中的user表使相应的用户能从某一主机登陆
1
2
3
4
|
mysql -u root –p
mysql>use mysql;
mysql> update user set host = '%' where user = 'root' ;
mysql> select host, user from user ;
|
3). 防火墙禁止了3306端口,以iptable为例
|
vi /etc/sysconfig/iptables
增加下面一行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306-j ACCEPT
service iptables restart
ps: iptables设置
1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
|
4). 修改MySQL的配置文件/etc/mysql/my.cnf,因为默认3306端口只允许本地访问的,注释掉这行
#bind-address = 127.0.0.1
然后重启Mysql,/etc/init.d/mysql restart