2

始める前に、私が初心者であることを尊重してください。質問などを閉じるのではなく、この問題を解決するために必要な情報を尋ねてください。;) わかった。Django 開発者サーバーを、リモート サーバーでホストされている MySQL データベースに接続しようとしています。MySQL と MySQL-Python をインストールし、これらの設定を「settings.py」に入れました。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'database_name',                      # Or path to database file if using sqlite3.
        'USER': 'database_user',                      # Not used with sqlite3.
        'PASSWORD': 'database_password',                  # Not used with sqlite3.
        'HOST': 'db9.subsys.no',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

を使用して開発者サーバーを起動しようとすると、次のpython manage.py runserverようになります。

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Python/2.7/site-packages/django/core/management/validation.py", line 103, in get_validation_errors
    connection.validation.validate_field(e, opts, f)
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/validation.py", line 14, in validate_field
    db_version = self.connection.get_server_version()
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 411, in get_server_version
    self.cursor()
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 306, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 387, in _cursor
    self.connection = Database.connect(**kwargs)
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/__init__.py", line 81, in Connect
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/connections.py", line 187, in __init__
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'db9.subsys.no' (60)")

に変更'HOST': 'db9.subsys.no'する'HOST': ''と、代わりに次のようになりました。

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Python/2.7/site-packages/django/core/management/validation.py", line 103, in get_validation_errors
    connection.validation.validate_field(e, opts, f)
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/validation.py", line 14, in validate_field
    db_version = self.connection.get_server_version()
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 411, in get_server_version
    self.cursor()
  File "/Library/Python/2.7/site-packages/django/db/backends/__init__.py", line 306, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 387, in _cursor
    self.connection = Database.connect(**kwargs)
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/__init__.py", line 81, in Connect
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/connections.py", line 187, in __init__
_mysql_exceptions.OperationalError: (1045, "Access denied for user 'database_user'@'localhost' (using password: YES)")

開発者サーバーを使用して MySQL に接続することはできませんか、それともデータベースで何らかの構成を行う必要がありますか? 答えがある場合、または詳細情報が必要な場合は返信してください。

よろしくお願いします!

4

4 に答える 4

6

リモートMySQLサーバーに接続する場合に確認する必要がある3つのこと:

  1. サーバーはソケットではなくネットワークを使用しており(にskip-networking行はありませんmy.cnf)、サーバーはパブリックIPでリッスンしています(with bind-address)。

  2. ファイアウォールは3306、デフォルトでMySQLポートへのリモートアクセスを許可します。

  3. ユーザーにはリモートアクセスが許可されます。

    GRANT ALL ON someDatabase.* to someUser@some.remote.ip IDENTIFIED BY 'foopass';

于 2012-05-19T10:41:28.637 に答える
2

簡単な健全性チェック - プレースホルダーの値 (*database_name* など) を実際の値に置き換えたと思いますか?

また、最初にコマンドライン経由でデータベースに接続してみましたか (VPS などへのある種の SSH 接続ではなく、ローカル開発マシンで)、mysql などの開発元の場所から到達可能であることを確認しましたか?上? そうでない場合は、おそらくあなたのWebホスティング会社(これはあなたのデータベースではないと仮定しています-これが間違っている場合は修正してください、および/または@ Burhan Khalidの回答を参照してください)は、そのデータベースへの外部接続を許可していませんサーバーに接続すると、どのソフトウェアからもリモート接続できなくなります - これは Django とは関係ありません。この場合、ホスティング会社に連絡して使用するポート番号を確認するか (または、外部データベース接続がファイアウォール ルールの下で許可されているかどうか)、開発用にローカル データベースを使用してから、本番データベースにダンプ ファイルを入力します。ローカル データベース。このプロセスに関するチュートリアルは、http://php.about.com/od/learnmysql/ss/mysql_backup.htmです。

私の意見では、ローカルで開発してからアップロードする方がおそらく簡単で実用的であるため、これは物事を行うためのより良い方法です。また、それがライブデータベースになり、テーブルを消去できるmanage.pyコマンドの1つを実行した場合に、コストのかかる間違いを犯すのを防ぐこともできます!

于 2012-05-19T10:37:30.090 に答える
1

開発サーバーでデータベースを使用できます。

ホストとポートを空白のままにすると、django は既定のポートを使用してローカル マシン上のデータベースに接続します。あなたの場合、localhost のデータベースへの接続中に使用しているユーザー名またはパスワードが正しくないため、エラーが発生しています。

リモート サーバーに接続している間は、リモート アクセスが許可されていることを確認してください。デフォルトでは、MySQL はリモート接続を許可しません。

また、接続しようとしているポートがファイアウォールによってブロックされていないことを確認してください。

これを読んで、この動作を許可するために何をする必要があるかを理解してください: http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

これが解決策を理解するのに役立つことを願っています。

于 2012-05-19T10:35:20.200 に答える
0

「HOST」:タグの後に「db9.subsys.no」の代わりにIPアドレスを使用してみてください。

于 2012-12-23T23:32:37.380 に答える