无法远程连接到Ubuntu 10.10上的MySQL服务器

好吧,我已经search谷歌两天试图让这个工作。 以下是我迄今采取的步骤:

  1. 彻底安装Ubuntu 10.10
  2. 安装mysql 5.1以及admin
  3. 注释掉configuration文件中的绑定地址
  4. 创build一个新的数据库
  5. 创build一个新的用户名@%,以允许远程连接
  6. 将该用户的所有访问权限授予新数据库,除了grant选项
  7. 在本地主机上使用这个新用户和数据库在服务器上login是可以的
  8. 在服务器内部networkingIP上使用这个新的用户和数据库可以在服务器上login
  9. 使用这个新的用户和数据库使用内部networkingIP从远程计算机login是可以的
  10. 使用来自服务器或远程计算机的外部IP地址使用此用户名和数据库login时,login不起作用。
  11. 我为此端口启用了端口转发,并且可以从canyouseeme.org确认的外部查看
  12. 我有nmap'd使用内部IP上的以下命令,并得到以下结果:

    nmap -PN -p 3306 192.168.1.73

    启动Nmap 5.21( http://nmap.org )在2011-02-19 13:41 PST Nmap扫描报告为computername-System-Name(192.168.1.73)主机已启动(延迟0.00064s)。 PORT STATE SERVICE 3306 / tcp打开mysql

    Nmap完成:1个IP地址(1个主机)在0.23秒内扫描

  13. 我有nmap'd内部IP使用以下命令,并得到下面的结果(我有隐藏IP的原因显而易见):

    nmap -PN -p 3306 xxx.xxx.xx.xxx

    启动Nmap 5.21( http://nmap.org )在2011-02-19 13:42 PST Nmap扫描报告HOSTNAME(xxx.xxx.xx.xxx)主机启动(延迟0.00056s)。 PORT STATE SERVICE 3306 / tcpclosuresmysql

    Nmap完成:1个IP地址(1主机up)在0.21秒扫描

我完全陷在这里,需要一些帮助。 我已经尝试了月球下的所有东西,仍然无法从远程外部IP地址连接。 任何帮助非常感谢,我需要做任何事情来帮助find问题让我知道,我会在这里发布结果。

检查/etc/mysql/my.cnfbind-address ,因为在基于Debian的系统上默认设置为127.0.0.1 。 如果你想能够从本地主机之外的另一台机器连接到它,你将需要改变这一点,并重新启动mysql来这样做。

你可以通过以root身份运行netstat -plunta |grep :3306来确认这种情况,你可能会看到它只能绑定到127.0.0.1,而当你修改my.cnf并重新启动时,情况就不会如此了。

有趣的是,这对我来说是这样的:我做了这个命令,上面有人build议:'netstat -plunta | grep:3306',然后我注意到apache和ssh都运行在外部和本地地址0.0.0.0 ,而mysql则拥有127.0.0.1的本地地址。 所以我改变它0.0.0.0像其余的,并结合授予特权在MySQL到其他主机,它的工作!

所以设置为绑定地址时,0.0.0.0作为一种通配符。

我不想将MySQL暴露给互联网。 我会从外面暴露端口22和ssh。 通过SSH隧道将本地端口转发到远程服务器上的端口3306,如下面的第一条命令所示。 然后通过连接到您绑定到本地的端口连接到端口3306上的远程服务器,如第二个命令中所示。

例如。:
ssh -L 3307:0:3306 mysql@remotehost
(其他shell 🙂
mysql -P 3307 -h localhost -u user -p

请注意,只有第一个shell是打开的,你才能连接和使用第二个shell中的MySQL cli。 调查SSH保持活动可能是必要的。 请注意,您也可以使用Putty在Windows计算机上使用这种types的SSH隧道。

你有没有尝试编辑文件

 /etc/mysql/my.cnf 

确保线跳过networking评论(或删除线),并添加以下行

 user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/English bind-address = EXTERNAL(!!) IP SERVER # skip-networking 

另外,确保用户有权访问数据库

 mysql> CREATE DATABASE test; mysql> GRANT ALL ON test.* TO user@'IP' IDENTIFIED BY 'supersecretpassword'; 

不pipe你说什么,“我已经转发了”,它看起来真的不像你。

你可以使用netstat连接吗?

 watch -n1 "netstat -an|grep 3306" 

我不知道还有什么build议。 所有迹象表明该港口已closures。