【问题标题】:"Can't connect to local MySQL Server" using SSH tunnel使用 SSH 隧道“无法连接到本地 MySQL 服务器”
【发布时间】:2020-04-07 04:12:05
【问题描述】:

启动到 MySQL 的 SSH 隧道,以便 MySQL Workbench 可以使用以下命令连接到远程数据库:

ssh -L 3306:localhost:3306 <username>@<domain> -N

MySQL Workbench 可以毫无问题地连接。

我还试图启动 Django 应用程序的本地副本并连接到远程测试数据库,结果遇到了:

django.db.utils.OperationalError: (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such file or directory")'

查看 Django 设置,一切看起来都是正确的。尽管使用了相同的端口,但 Django 似乎忽略了隧道。 Django 在virtualenv 中,所以想知道是否有什么原因导致了它。

有什么建议吗?

【问题讨论】:

  • workbench 有使用 ssh 的选项,只需将选项 standard tcp ip 改为 ssh。通常你必须输入 ssh 的凭据。
  • 从错误消息来看,在我看来 Django 应用程序正在尝试使用本地 unix 套接字而不是 TCP/IP 进行连接。我认为数据库连接的“Django 设置”取决于正在使用的 MySQL DB API,mysqlcient 或 MySQL Connector/Python。 docs.djangoproject.com/en/3.0/ref/databases/#mysql-notes 向下滚动到“连接到数据库”。请注意,对于 MySQL,localhost 的主机名值 not 表示 IP 环回 127.0.0.1,这意味着使用本地 unix 套接字文件。为了强制 TCP/IP,我们通常提供一个端口 (3306),我们可以使用 IP 地址。
  • 如此处所述:docs.djangoproject.com/en/3.0/ref/settings/#databases 连接到本地 TCP/IP 端口,使用 HOST 值 127.0.0.1 ,如果 HOST 值以正斜杠开头,即使用本地 unix套接字(即不使用 TCP/IP)。没有看到实际的“Django 设置”,我们只是猜测。
  • @spencer7593 所以将我的数据库主机连接字符串从localhost 更改为127.0.0.1 解决了这个问题。谢谢您的帮助!如果您想发布答案,我会接受。

标签: mysql django ssh mysql-workbench ssh-tunnel


【解决方案1】:

我不得不将settings.py 中的数据库连接字符串更改为127.0.0.1 而不是localhost

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2020-09-30
    • 2012-09-11
    • 2014-05-03
    • 2019-08-01
    • 2016-11-18
    • 2014-12-13
    • 2020-07-05
    相关资源
    最近更新 更多