MySQL远程连接

我没有得到访问外部的MySQL。 我认为这是MySQL或防火墙的东西或在MySQL内的一些特权。

我已经尝试过在互联网上的步骤。 我将把这个过程一步一步地举例来说明我正在做什么,并作为另一个有这个问题的人的教程:

我在用着:

-ubuntu server 12.04 -mysql-server5.5 -there is NO hardware firewall just software one 

1-首先我安装了mysql:

 sudo apt-get install mysql-server 

我通过以下方式更改了root密码:

 sudo /etc/init.d/mysql stop sudo mysqld --skip-grant-tables & mysql -u root mysql UPDATE user SET Password=PASSWORD('MYPASSWORD') WHERE User='root'; FLUSH PRIVILEGES; exit; 

3-我给所有特权根到任何IP:

 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; 

4-编辑my.cnf后

 sudo nano /etc/mysql/my.cnf 

我评论如下:

 #skip-external-locking #bind-address = 127.0.0.1 

5我编辑了iptables以允许MySql 3306:

 iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT 

现在键入netstat -ant:

 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN tcp 0 0 66.123.173.170:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN tcp 0 0 66.123.173.170:22 189.32.2.232:49167 ESTABLISHED tcp 0 336 66.123.173.170:22 189.32.2.232:49654 ESTABLISHED tcp6 0 0 :::110 :::* LISTEN tcp6 0 0 :::143 :::* LISTEN tcp6 0 0 :::8080 :::* LISTEN tcp6 0 0 :::21 :::* LISTEN tcp6 0 0 :::53 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:953 :::* LISTEN tcp6 0 0 :::25 :::* LISTEN tcp6 0 0 :::993 :::* LISTEN tcp6 0 0 :::995 :::* LISTEN tcp6 0 0 127.0.0.1:8005 :::* LISTEN 

看到端口3306是开放的! 我对吗?

6-我重新启动了mysql:

 sudo service mysql start 

我input了:

 service mysql status 

结果:

 mysql start/running, process 20757 

我试图连接到服务器:

 mysql -h 66.123.173.170 -u root -p 

我得到这个错误:

错误2003(HY000):无法连接到'66 .123.173.170'(111)上的MySQL服务器

当我做:

 mysql -h 127.0.0.1 -u root -p 

它工作于MySQL>terminal

8-疑惑:你看这个过程有什么问题吗?

OBS:在第四步,我也尝试把绑定地址设置为bid-address = 0.0.0.0,但是没有解决问题。

9-DOUBT:如果我closuresMySQL: service mysql stop然后,我可以用mysql -h 127.0.0.1 -u root -p来访问防火墙吗?

我做到了,我甚至可以连接mysql停止/等待(这是MySQL停止和检索状态后给出的状态)。

恢复解决方案:

我杀了持有3306端口的mysqld并重新启动它。

我认为这是一个错误或相关的问题一步一步检查我做了什么:

1-创建一个程序连接3306

首先我用Java创建一个简单的程序,以确保我的防火墙没有任何问题。 程序只需在3306上用TCP连接打开一个端口2分钟即可测试,程序:

 import java.io.IOException; import java.net.serverSocket; public class PortMysqlTest { public static void main(String[] args) { int port = 3306; serverSocket ss = null; try { ss = new serverSocket(port); ss.setReuseAddress(true); } catch (IOException e) { System.out.println(e.getMessage()); } long futureTime = System.currentTimeMillis() + 1000 * 60 * 2; while (System.currentTimeMillis() < futureTime) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } if (ss != null) { try { ss.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } } 

2-停止了mysql服务

在执行程序之前,我停止了mysql服务:

 sudo service mysql stop 

或者可以通过以下方式完成:

 /etc/init.d/mysql stop 

3-用java PortMysqlTest启动我的程序

我的程序(PortMysqlTest)抛出一个异常,说明地址/端口已被mysqld使用!

惊喜? 据我所知,与MySQL服务停止的端口应该是免费的。 我对吗? (我不确定是否有人可以回答这个…)

我搜索了使用地址/端口的应用程序PID:

 sudo netstat -lpn | grep 3306 

答案:

 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 6736/mysqld 

5-我杀了这个过程:

 kill -9 6736 

OBS,如果你不知道是什么杀的话:6736是拿着端口的过程,我用第4步得到了这个数6736 / mysqld

6-现在我再次运行我的程序:

java PortMysqlTest和telnet连接(telnet 66.123.173.170 3306)externaly和它的工作

所以问题不是防火墙 ,因为我可以外部连接到机器66.123.173.170。

7-再次启动mysql服务:

(我等了2分钟,我的程序停止并释放3306端口),然后再次启动mysql服务来测试:

 sudo service mysql start 

要么

 sudo /etc/init.d/mysql start 

我用外网连接了外网:

 telnet 66.123.173.170 3306 

和工作!

我尝试连接到MySQL后:

 mysql -h 66.123.173.170 -u root -p 

和工作!

结论:我认为我的MySql安装有一个错误, 或者什么的,(我不知道是什么),当重新启动mysql时,mysql没有得到配置:

 bind-address = 0.0.0.0 

要么

 bind-address = * 

我希望这可以帮助别人。

你的netstat输出显示它没有对外部连接开放,它应该在那里显示0.0.0.0 ,而不是127.0.0.1 (这是回送,不是本地的)。

您可能需要添加一个不同的bind-address到您的MySQL配置(并且不要忘记重新启动服务)。

尝试

bind-address = *

或者你的实际网卡ip( 66.123.173.170 )也许。

您需要将my.cnf中的绑定地址设置为0.0.0.0,而不仅仅是注释掉该行。

作为一个方面说明,你可能不应该允许所有IP地址的根访问,就像你说的配置它一样。 我只将根限制在本地机器上。

默认情况下MySQL在本地主机上侦听。 您需要将其配置为在您的实际界面上运行,或者您可以在绑定中使用0.0.0.0地址。