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.