使用 Workbench 将 Django 连接到远程 MySQL 数据库

DDi*_*ran 2 mysql database django ssh

我在 PythonAnywhere 上托管我的网站。

我的服务有两个数据库:myusername$productionmyusername$dev

生产数据库每晚都会进行自我备份,并使用最新一批实时数据加载开发数据库。我正在尝试通过 ssh 将我的 Django 开发环境连接到开发数据库,​​这作为付费 PythonAnywhere 客户是可能的。

我听从了他们的建议并下载了 MySQL Workbench,它可以毫无问题地连接到所述数据库。然后我尝试在 Django 中设置我的dev.py设置,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'myusername$dev',
        'USER': 'myusername',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
Run Code Online (Sandbox Code Playgroud)

然而这会导致django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (10061)")错误。我还尝试替换127.0.0.1localhost,并将主机和端口留空,但这些都不起作用。

然后我在他们的网站上尝试了其他两个选项,即通过 python 代码直接访问数据库,以及使用 Putty(我是 Windows 10 用户),但是这些都不起作用。

任何建议将不胜感激。

Gil*_*mas 5

PythonAnywhere 开发在这里。 您链接到的帮助页面有几个不同的选项,用于从外部连接到 PythonAnywhere MySQL 数据库;听起来你——或者至少最初是——混淆了前两者。

第一个是使用 MySQL Workbench。MySQL Workbench 具有用于设置 SSH 隧道的选项,以便您可以连接到无法从公共 Internet 直接访问的数据库。但是,一旦您设置了该隧道,它仅在您在 MySQL Workbench 中运行内容时才有用——它不会影响您在计算机上运行的其他代码。所以它对 Django 代码没有帮助。

第二个选项是当您想要从 Python 代码连接到数据库时。如果您可以完全控制何时建立数据库连接,则可以将SSHTunnelForwarder包装器放在 SQL 代码周围,并且您在该with语句内执行的任何 SQL 代码都将能够连接到数据库,但该语句之外的代码则无法连接到数据库。因此,当您使用 Django 时,这也没有帮助,因为它的 MySQL 代码隐藏在 Django 库的深处,用语句包装它with会非常棘手。

第三个选项是手动设置 SSH 隧道,但不幸的是,这些说明是针对 Unix 环境的——例如。Linux 或 Mac。当您这样做时,它会在您的本地计算机上启动一个服务器(IP 地址 127.0.0.1,端口 3306),该服务器接受连接,然后通过 SSH 转发它们,以便它们在 Pythonanywhere 防火墙内出现并发送到正确的地址。 MySQL 服务器。这意味着本地服务器看起来在您的计算机上进行编码,就好像它是 MySQL 服务器一样,即使它实际上只是将工作移交给 PythonAnywhere 计算机。

因此,您需要做的(看起来您几乎已经完成了!)是设置 PuTTY 来执行 Unix 指令对命令执行的操作ssh这些说明几乎就是您想要的;差异将是

  • “SSH 网关”将是ssh.pythonanywhere.com
  • “源端口”将为 3306。
  • “目标地址”为 PythonAnywhere MySQL 数据库主机的名称(来自“数据库”选项卡),后跟:3306.