2017-08-10 31 views
1

私はPythonAnywhereで自分のWebサイトをホスティングしています。Workbenchを使用してDjangoをリモートMySQLデータベースに接続

サービス上に2つのデータベース:myusername$productionmyusername$devがあります。

プロダクションDBは毎晩自分自身をバックアップし、最新のバッチのライブデータでdevデータベースをロードします。私はsshを使って私のDjango開発環境をdevデータベースに接続しようとしています。これは有料PythonAnywhereの顧客として可能です。

I followed their adviceをダウンロードし、上記のデータベースに問題なく接続する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', 
    } 
} 

しかし、これはdjango.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (10061)")エラーが発生します。また、127.0.0.1localhostに置き換えようとしましたが、ホストとポートの両方を空白のままにしましたが、どちらも機能しませんでした。

私は他の2つのオプションを自分のウェブサイトで使ってみました。別名ではPythonコードを使ってdbに直接アクセスしていましたが、パテを使用していました(私はWindows 10ユーザーです)。

アドバイスをいただければ幸いです。

+1

ホストパラメータが「127.0.0.1」であることを確認すると、データベースがPCにあるとみなされます。だからそれは失礼ではない。代わりにyorサーバーのIPアドレスを使用してください。 – RiggsFolly

+0

@RiggsFolly hmm - 私はIPアドレスを持っていませんが、次のようなものがあります: 'myusername.mysql.pythonanywhere-services.com'なので、それを使ってみました。私はlocalhostを使用していたときより少し時間がかかりましたが、それでも失敗しました....今回はエラー '10060'!私は推測する? – DDiran

+0

'myusername'にリモートからサインインする権利があります – RiggsFolly

答えて

2

ここにPythonAnywhereがあります。 The help page that you link toには、外部からPythonAnywhere MySQLデータベースに接続するためのいくつかの異なるオプションがあります。あなたがそうであるように聞こえます - 少なくとも、最初は - 最初のものと後の2つを混同しています。

最初にMySQL Workbenchを使用します。 MySQL Workbenchには、パブリックインターネットから直接アクセスできないデータベースに接続できるように、SSHトンネルを設定するオプションがあります。しかし、いったんこのトンネルを設定すると、MySQL Workbench内で実行している場合にのみ役に立ちます。マシン上で実行している他のコードには影響しません。だから、Djangoのコードは役に立ちません。

2番目のオプションは、Pythonコードからデータベースに接続する場合です。データベース接続が完了した時点で完全に制御できれば、SSHTunnelForwarderラッパーをSQLコードの周りに置くことができます。そして、そのwithステートメント内で実行するSQLコードはすべてデータベースに接続できます。 't。だから、Djangoを使っているときには、そのMySQLコードがDjangoライブラリの深いところに隠されていて、withステートメントでそれをラップするのは非常に難しいので、これは役に立ちません。

3番目のオプションは、手動でSSHトンネルを設定するためのオプションですが、残念ながら、指示はUnix環境を対象としています。 LinuxまたはMac。これを行うと、ローカルマシン上のサーバ(IPアドレス127.0.0.1、ポート3306)が起動され、接続を受け入れ、SSH経由で転送して、Pythonanywhereファイアウォールの内側に出てきて正しいものに送りますMySQLサーバ。これは、ローカルサーバが実際にPythonAnywhereマシンに作業を渡しているにもかかわらず、マシン上のコードをMySQLサーバのように見えることを意味します。

それで、あなたは何をする必要があったのですか(それはあなたが殆どそこにいるように見えます)、sshコマンドでUnixの指示をするためにPuTTYを設定することでした。These instructionsはほとんどあなたが望むものです。違いは、「SSHゲートウェイ」は「送信元ポート」はからあなたのPythonAnywhere MySQLデータベースホストの名前に「宛先アドレス」(3306

  • だろうssh.pythonanywhere.com
  • だろう

    • だろう"Databases"タブ)、:3306が続きます。
  • 関連する問題