django.db.utils.OperationalError:(1045,用户'<用户>'@ localhost'拒绝访问

时间:2015-11-17 06:56:59

标签: python django mariadb access-denied

我无法让我的Django项目正确加载我的数据库。它抛出了这个错误。

我正在使用Django运行MariaDB,并且我卸载了所有MySQL

我通过运行:

添加了用户
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;

根据this post.

的建议

当我尝试运行./manage.py runserver

时,控制台正在向我发送此错误
django.db.utils.OperationalError: (1045, "Access denied for user '<user>'@'localhost' (using password: YES)")

我运行'create user'命令并创建用户以匹配我的设置脚本,其默认设置为:

        'ENGINE': 'django.contrib.gis.db.backends.mysql',
        'NAME': 'company_production',
        'USER': 'companydev',
        'PASSWORD': 'companydevpass',
        'HOST': 'localhost',
        'PORT': '',
        'ATOMIC_REQUESTS': True

我已经尝试过我在这里找到的所有与其引发的错误相关的内容,但没有任何工作。

我正在运行Mac OSX 10.11.1 El Capitan和MariaDB版本10.1.8,如果它完全相关的话。

3 个答案:

答案 0 :(得分:2)

这是我用来为Django项目重新创建MySQL数据库的方法:

tmp="/tmp/mysql-tools.sh.tmp"

setup-db ( ) {
    cat <<EOF > $tmp
DROP DATABASE $DB;
CREATE DATABASE $DB;
GRANT USAGE on *.* to '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
GRANT ALL PRIVILEGES ON ${DB}.* to '${DB_USER}'@'localhost';
EOF
    cat $tmp
    mysql -f -u ${MYSQL_ROOTUSR} -p${MYSQL_ROOTPWD} < $tmp
    rm $tmp
}

警告:这会丢弃并重新创建!

其中:

  • DB:数据库名称
  • DB_USER:django数据库用户
  • DB_PASS:Django数据库用户的mysql连接的密码
  • MYSQL_ROOTUSR:mysql root用户(必须具有创建数据库的权限)
  • MYSQL_ROOTPWD:mysql root密码

在您的环境中导出那些

答案 1 :(得分:1)

您的错误会为您提供线索,告知您哪里出错......

django.db.utils.OperationalError: (1045, "Access denied for user '<user>'@'localhost' (using password: YES)")

这意味着django尝试使用用户user访问数据库,而不是您在settings.py中定义的内容。

我猜您在执行python manage.py migrate之前忘记执行runserver,因为您的设置尚未反映在django引擎中。

答案 2 :(得分:1)

可能是由于Django尝试使用错误的用户而不是您在MySQL DB中设置的用户

更改USERNAME中的设置-> USER可以提供帮助:)

我遇到

错误

“ NAME”:“数据库名称”,         'USERNAME':'root',         '密码':'******',         'PORT':'3306',         'HOST':'localhost',

但它与---

一起使用

“ NAME”:“数据库名称”,         'USER':'root',         '密码':'********',         'PORT':'3306',         'HOST':'localhost',