【问题标题】:Allow remote access MySQL, Ubuntu允许远程访问 MySQL、Ubuntu
【发布时间】:2014-12-18 15:29:07
【问题描述】:

我试图在我的 Ubuntu 服务器 (VPS) 上允许远程访问 MySQL。

我试图通过在 Netbeans 中构建的 Java 应用程序访问数据库。 Netbeans 在尝试连接时弹出以下错误消息:

无法建立连接 jdbc:mysql://xx.xxx.xxx.xxx:3306/xxxxxx?zeroDateTimeBehavior=convertToNull 使用 com.mysql.jdbc.Driver (null, 来自服务器的消息:“主机 'xx.xxx.xxx.xxx' 不允许连接到这个 MySQL 服务器")

在尝试通过 Netbeans 连接到我的 MySQL 服务器时,我已遵循此指南:https://www.youtube.com/watch?v=Fk2EkBs-Oq4

MySQL

MySQL 在标准端口 3306 上运行。 在 /etc/mysql/my.cnf 我已注释掉以下行:

绑定地址 = 127.0.0.1

所以我的 my.cnf 文件中不存在绑定地址。

UFW

我的服务器上安装了 UFW。 ufw 状态编号如下所示:

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] Anywhere                   ALLOW IN    MY-IP-ADDRESS*
[ 4] 3306/tcp                   ALLOW IN    Anywhere
[ 5] 3306/tcp                   ALLOW IN    MY-IP-ADDRESS*
[ 6] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 7] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 8] 3306/tcp (v6)              ALLOW IN    Anywhere (v6)

*MY-IP-ADDRESS = 我“输出”到互联网的 IP 地址,我从以下地址接收:http://whatismyipaddress.com/

我做错了什么,为什么无法连接?

编辑: 问题是,如果我在 my.cnf 中绑定,我只能绑定一个 IP。我需要对在 vps 上运行的实时网站进行 localhost 访问,还需要从我的开发计算机(该线程的目标)进行访问。我的想法是删除 my.cnf 中的绑定以允许所有人,然后通过我的防火墙 UFW 授予对 localhost 和我的开发计算机的访问权限。

【问题讨论】:

  • 您的绑定不正确。你绑定的是 localhost 地址,这意味着 mysql 不会监听来自外界的连接。
  • 参考这里:preprogrammer.com/…

标签: mysql ubuntu netbeans


【解决方案1】:

如果您想使用通过PuTTY 和隧道连接
看看这个答案的底部


我假设你有一个 mysql 管理工具。
以下将取决于使用的工具 linux 或其他工具,但工作方式相同。

在那里登录并进入用户管理。

如果你安装的是普通的Mysql,那么应该只有root,没有主机。

从你创建了一个 localhost 的那一刻起,Mysql 就假设你要管理多个主机。

创建现有主机。您的网络中存在计算机名称。这里root@dxxxxx-p。这应该在root 用户下创建。

这还不是全部,现在您仍然拥有所有表授予权限。
这里pricelist没有分配权限

但是sample拥有所有权限

以多主机管理为例。

具有两个可访问名称的计算机

  • myComp1:IP 192.168.0.101
  • 本地主机:IP 127.0.0.1

如果您现在使用“mysql -h localhost -u root ....”在同一台计算机上连接,您将获得分配给 localhost 的权限。

您可能会认为因为localhost 和myComp1 是同一台计算机。
现在myComp1 自动拥有与localhost 相同的权限。
但事实并非如此。所以要小心。

通过 `PuTTY` 和隧道连接

当你用 PuTTY 连接你时,上面描述的一切都不是必需的。

使用隧道,您可以在 ubuntu 服务器上以 root@localhost 身份连接。

这里的 localhost 有点误导,因为它与您的 windows 计算机无关,而是在 ubuntu 服务器上的 localhost 上。

通过 SSH 远程访问您的 MySQL 服务器

因此,您的 Web 服务器上有 MySQL,但出于安全原因,默认情况下它只对本地端口开放。

如果您想从 MySQL Query Browser 或 Netbeans 之类的客户端工具访问您的数据库,通常您必须从您的本地 IP 地址打开访问权限……但这并不安全.

因此,我们将只通过 SSH 隧道使用端口转发,因此您的 MySQL 客户端认为它正在连接到您的 localhost 机器,但它实际上是通过隧道连接到其他服务器。

转到 SSH->隧道

点击后Save

确保 Windows 计算机上的 MySQL 服务器已关闭。
我正在使用MySQL System Tray Monitor。

右键单击,我可以看到所有选项。

点击Open

如果你已经在 ubuntu 上完成了SSH 的所有设置,那应该会出现在这里。 (如果不在网上搜索 Ubuntu SSH 和 Putty)

不要忘记:现在你已经登录了 ubuntu 服务器,你拥有服务器本身的 root@localhost 的所有权限,因为 root@localhost 拥有所有权限,你不需要创建主机和创建模式的权限

现在在你的windows电脑上打开MySql Query Browser

现在连接到 localhost(记住这个 localhost 表示 ubuntu 上的 localhost)
您可以在 Netbeans 中使用相同的设置连接到 Ubuntu 上的 Mysql

Mysql 查询浏览器打开,您可以在 UBUNTU 上处理您的数据库

Netbeans

关闭后New Connection Wizard
与 Mysql Ubuntu 上的所有数据库创建一个新连接。

【讨论】:

  • 为这个超级指南和解释脱帽致敬!也感谢您的耐心!现在它就像一个魅力!谢谢!
【解决方案2】:

改变

bind-address = 127.0.0.1

到

bind-address = YOUR-IP-ADDRESS*

【讨论】:

  • 问题是,如果我在my.cnf中绑定,我只能绑定一个IP。我需要对在 vps 上运行的实时网站进行 localhost 访问,还需要从我的开发计算机(该线程的目标)进行访问。我的想法是删除 my.cnf 中的绑定以允许所有人,然后通过我的防火墙 UFW 授予对 localhost 和我的开发计算机的访问权限。
【解决方案3】:

您需要授予对该数据库的访问权限:

GRANT ALL ON foo.* TO bar@xxx.xxx.xxx.xxx IDENTIFIED BY 'PASSWORD';

并且还更新了防火墙规则,例如:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2012-05-01
    相关资源
    最近更新 更多