草庐IT

mysql - 允许远程访问 MySQL、Ubuntu

coder 2023-10-22 原文

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

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

Cannot establish a connection to jdbc:mysql://xx.xxx.xxx.xxx:3306/xxxxxx?zeroDateTimeBehavior=convertToNull using com.mysql.jdbc.Driver (null, message from server: "Host 'xx.xxx.xxx.xxx' is not allowed to connect to this MySQL server")

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

MySQL

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

bind-address = 127.0.0.1

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

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 中绑定(bind),我只能绑定(bind)一个 IP。我需要对在 vps 上运行的实时网站进行本地主机访问,还需要从我的开发计算机(该线程的目标)进行访问。我的想法是删除 my.cnf 中的绑定(bind)以允许所有内容,然后通过我的防火墙 UFW 向本地主机和我的开发计算机授予访问权限。

最佳答案

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


我假设你有一个 mysql 管理工具。
下面将根据使用的工具 linux 或其他工具进行查看,但工作相同。

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

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

从你创建本地主机的那一刻起,Mysql就假定你要管理多个主机。

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

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

但是样本拥有所有权限

以多主机管理为例。

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

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

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

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

通过 `PuTTY` 和隧道连接

当您使用 PuTTY 连接时,上述所有内容都不是必需的。

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

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

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

您的 Web 服务器上安装了 MySQL,但出于安全原因,它默认仅对本地端口开放。

如果您想从客户端工具(如 MySQL Query BrowserNetbeans)访问您的数据库,通常您必须从您的本地 IP 地址打开访问权限……但这几乎没有那么安全。

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

转到SSH->隧道

点击保存

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

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

点击打开

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

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

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

现在连接到本地主机(记住这个本地主机是指 ubuntu 上的本地主机)
您可以在 Netbeans 中使用相同的设置连接到 Ubuntu 上的 Mysql

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

Netbeans

关闭新建连接向导
与 Mysql Ubuntu 上的所有数据库创建一个新连接。

关于mysql - 允许远程访问 MySQL、Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27550082/

有关mysql - 允许远程访问 MySQL、Ubuntu的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  5. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  7. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  8. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

    我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

随机推荐