Using MySQL with Django - Access denied for user '@'localhost

I also ran into this problem while following the Django tutorial on testing (https://docs.djangoproject.com/en/dev/intro/tutorial05/). When trying to test the polls app, I received the following error:

user@host:~/django/mysite$ python manage.py test polls

Creating test database for alias 'default'...
Got an error creating the test database: (1044, "Access denied for user 'admin'@'localhost' to database 'test_django_mysite'")
Type 'yes' if you would like to try deleting the test database 'test_django_mysite', or 'no' to cancel: 

The problem is that django is creating a temporary database called test_django_mysite.
I was able to solve this problem by granting access to 'admin'@'localhost' on the test_django_mysite database that it was trying to create.

mysql> GRANT ALL PRIVILEGES ON test_django_mysite.* TO admin@localhost IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.04 sec)

It's worth noting that I only granted the privileges to test_django_mysite. I didn't need to actually create it.


Your user does not have an access to database. Use the commands below to set up your database.

DROP DATABASE IF EXISTS `mydb`;
CREATE DATABASE `mydb`
    DEFAULT CHARACTER SET utf8
    DEFAULT COLLATE utf8_general_ci;

USE 'mysql';
GRANT ALL PRIVILEGES ON mydb.* TO 'mydb_user'@'localhost' IDENTIFIED BY 'your_password'

WITH GRANT OPTION;
FLUSH PRIVILEGES;

Also, you need to have enough privileges to run it. Save it as script.sql then,

$mysql -u root -p < script.sql

Than on to settings.py where you need to make sure your db settings are set up properly

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',                  
        'USER': 'mydb_user',             
        'PASSWORD': 'your_password',                  
        'HOST': '',                     
        'PORT': '',                      
    }
}

and

python manage.py syncdb

and you're done.