在开始之前,请尊重我是新手,问我需要哪些更多信息才能解决这个问题而不是关闭问题。 ;) 好。我正在尝试将我的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,或者我是否需要对数据库进行某种配置?如果您有答案或需要更多信息,请回复。
提前致谢!
答案 0 :(得分:6)
如果要连接到远程MySQL服务器,应该确定三件事:
服务器正在使用网络而不是套接字(skip-networking
中没有my.cnf
行),服务器正在侦听公共IP(使用bind-address
)。
您的防火墙允许远程访问MySQL端口,默认情况下为3306
。
允许用户远程访问:
GRANT ALL ON someDatabase.* to someUser@some.remote.ip IDENTIFIED BY 'foopass';
答案 1 :(得分:2)
快速检查一下 - 我假设您用实际值替换了占位符值(例如* database_name *)?
此外,您是否尝试过首先通过命令行连接到数据库(在本地开发计算机上 - 而不是通过某种与VPS等的SSH连接),以检查它是否可以从您开发的任何地方访问,例如 mysql -u - p ?如果没有,它可能意味着你的网络托管公司(我假设这不是你的数据库 - 请纠正我,如果这是错误的和/或看到@Burhan Khalid的答案)不允许外部连接到该数据库服务器,你将无法从任何软件远程连接 - 这与Django无关。在这种情况下,要么联系托管公司以找出要使用的端口号(或者如果在防火墙规则下是否允许外部数据库连接),或者使用本地数据库进行开发,然后从您的转储文件中填充生产数据库本地数据库。以下是此过程的教程 - http://php.about.com/od/learnmysql/ss/mysql_backup.htm。
在我看来,这是一种更好的做事方式,因为在本地开发然后上传可能更容易,也更实用。如果最终成为实时数据库并运行其中一个可以清除表格的manage.py命令,它还可以防止您犯下代价高昂的错误!
答案 2 :(得分:1)
您可以将数据库与开发服务器一起使用。
当您将主机和端口保持空白时,django使用默认端口连接到本地计算机上的数据库。在您的情况下,您收到错误,因为您在连接到localhost上的数据库时使用的用户名或密码不正确。
连接到远程服务器时,请确保您是 允许远程访问它。 MySQL不允许远程连接 默认情况下。
此外,请确保您尝试连接的端口 on不会被防火墙阻止。
阅读本文以了解允许此行为需要执行的操作:http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
我希望这可以帮助你找到解决方案。
答案 3 :(得分:0)
在'HOST':标记后尝试使用IP地址而不是'db9.subsys.no'。