好吧,我已经在 Google 上搜索了两天,试图让它工作。以下是我到目前为止采取的步骤:
- 全新安装 Ubuntu 10.10
- 安装mysql5.1以及admin
- 注释掉配置文件中的绑定地址
- 创建新数据库
- 创建新用户,用户名@%以允许远程连接
- 授予此用户对新数据库的所有访问权限,但授予选项除外
- 使用本地主机上的新用户和数据库登录服务器即可
- 使用这个新用户和服务器内网ip上的数据库登录服务器没问题
- 使用此新用户和数据库通过内网 IP 从远程计算机登录即可
- 当使用服务器或远程计算机的外部 IP 地址使用此用户名和数据库登录时,登录不起作用。
- 我已为该端口启用了端口转发,并且可以从外部查看,这已得到 canyouseeme.org 的确认
我已在内部 IP 上使用以下命令进行 nmap 并得到以下结果:
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.00064 秒)。港口国服务 3306/tcp 打开 mysql
Nmap 完成:0.23 秒内扫描了 1 个 IP 地址(1 个主机启动)
我已在内部 IP 上使用以下命令进行 nmap 并得到以下结果(出于显而易见的原因,我隐藏了 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.00056 秒)。港口国服务 3306/tcp 关闭 mysql
Nmap 完成:在 0.21 秒内扫描了 1 个 IP 地址(1 个主机启动)
我完全被困在这里,需要一些帮助。我尝试了所有办法,但仍然无法从远程外部 IP 地址连接。任何帮助都非常感谢,我需要做任何事情来帮助找到问题,请告诉我,我会在这里发布结果。
答案1
检查bind-address
,/etc/mysql/my.cnf
因为它在基于 Debian 的系统上默认设置为127.0.0.1
。如果您希望能够从 localhost 以外的另一台机器连接到它,则需要更改此设置并重新启动 mysql 才能执行此操作。
您可以通过以 root 身份运行来确认这种情况netstat -plunta |grep :3306
,您可能会看到它仅绑定到 127.0.0.1,而当您修改 my.cnf 并重新启动时,这种情况将不再存在。
答案2
有趣的是,对我有用的是:我执行了上面有人建议的这个命令:“netstat -plunta |grep :3306”,然后我注意到 apache 和 ssh 都以外部和本地地址 0.0.0.0 运行,而 mysql 的本地地址是 127.0.0.1,正如您所期望的那样。所以我像其他地址一样将其更改为 0.0.0.0,并结合在 mysql 中向其他主机授予权限,它成功了!
因此,简而言之,当设置为绑定地址时,0.0.0.0 就起到了一种通配符的作用。
答案3
我根本不想将 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 计算机上使用此类 SSH 隧道。
答案4
不管您说什么,“我已经转发了”,但看起来您确实没有转发。
您可以使用 netstat 来查看连接吗?
watch -n1 "netstat -an|grep 3306"
我不知道还能建议什么。所有迹象都表明该端口已关闭。