【问题标题】:Django, MySQL, syncdb: Access Denied to valid userDjango,MySQL,syncdb:对有效用户的访问被拒绝
【发布时间】:2014-02-28 23:02:15
【问题描述】:

我有一个在另外两台服务器上运行良好的 Django 应用程序。它使用 MySQL 作为数据库。

我在新服务器上为应用程序的新实例设置了用户,这样我就可以通过 mysql 命令行客户端成功连接到远程数据库。

但是,当我尝试运行 ./manage.py syncdb 时,它告诉我:

django.db.utils.OperationalError: (1045, "Access denied for user 'app_user'@'mynewserver.com' (using password: YES)")

我在网上看到的每个地方都告诉我要确保用户已在 mysql 中设置并有权访问新数据库,甚至可以运行 flush privileges;。我已经仔细检查了所有这些并多次这样做。这似乎不是问题。

有什么想法吗?

编辑

另外,我刚刚检查并从 python 命令行运行以下命令也可以正常工作:

conn = mysql.connect(host='mynewserver.com', user='app_user', passwd='secret', db='myapp').cursor(mysql.cursors.DictCursor)

编辑 2

我刚刚跑了./manage.py sql myapp > myapp.sql; ./manage.py dbshell < myapp.sql

一切正常,它创建了表格就好了。我假设这将使用与运行./manage.py syncdb 相同的权限和设置。 什么给了?!?

版本

  • Python==2.7.6
  • Django==1.6.1

编辑 3

我想我还应该补充一点,我使用的是 South==0.7.6。如果有帮助的话。

【问题讨论】:

  • 检查 app_user 的权限确保它有读/写权限
  • 也刚刚确认,我可以手动创建表、插入表,并使用与我尝试运行 syncdb 的用户相同的用户从这些表中选择内容。 syncdb 是唯一让我伤心的东西。

标签: python mysql django django-syncdb


【解决方案1】:

我确实遗漏了一些我认为不相关但完全相关的内容。

此应用程序定义了多个数据库。 Syncdb 一次只在一个数据库上运行,默认情况下将使用默认数据库运行,如下所述: https://docs.djangoproject.com/en/1.6/topics/db/multi-db/#synchronizing-your-databases

但是,当我的用户没有其他数据库的权限时,syncdb 会失败。它没有指出它试图访问哪个数据库。

从 django-extensions 运行 ./manage.py reset_db,在我确保用户对所有数据库都具有权限之前也运行良好。

我会假设syncdb 中存在错误。经过更多研究,我可能不得不向 Django 报告一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2019-01-24
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多