Trying to connect Django to MySQL. Connection error when migrating (Xampp, Linux)

Issue

I’ve been working for several weeks on Django. So far I have made 2 small projects. Now I tried to connect Django to the MySQL database.

  1. First, I started a new project.
  2. Then made a new app and updated the app in settings.py.
  3. After that I changed the database in the same file settings.py with my settings.
  4. Made a small model (in the file models.py).
  5. Installed all the necessary apps, (pip install) mysqlclient etc,
  6. Made the first migration successfully with
    python manage.py makemigrations
    So far so good!

Next, I tried to make the second migration (python manage.py migrate), as in the instructions.

Then the error message appears:

‘error 111, can’t connect to database’

Made some changes in the settings file, including SQL mode strict_trans_tables.

Now it shows me the error:

Can’t connect to local MySQL server through socket … Missing file …/mysql.sock.

I looked up the directory and there was no such file.

In the file my.cnf the filename and path is different!!! And exists! (It is using this existing file in my.cnf, but after executing the commang migrate it is searching for this file in a place, where it does not exist!)

To clarify things a little bit, the exact message of the error:

django.db.utils.OperationalError: (2002, "Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)")

There is no such file in the current directory (as I have checked).

my.cnf file contains the following path and filename:
socket=/opt/lampp/var/mysql/mysql.sock
There is a file in the current directory. MySQL works, as well.

What is going on and what to do?

Solution

Finally the Django project was able to start using the MySQL database!!!

The changes in the file setting.py are the same as before, as follows:

        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',

the only thing that had to be done in addition to this, was to include the path of file my.cnf manually:

        'OPTIONS': {
            'read_default_file': '/opt/lampp/etc/my.cnf',
        },

Obviously, this was the reason in the first place the path to the socket file to be mistaken.

But why in the first place this error occurs, I don’t know. Perhaps somewhere after the installation some other path was given, but I don’t know where is this path, pointing to other directory of the socket file separately, or to other path for the my.cnf file.

With the PostgreSQL database the connection was made so simply, it required only the 1st changes in the settings.py file.

After that, additional migrations were made without any disturbance, as well as the superuser account.

The source website from which I was able to use as a cheat sheet for the complete process:
https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database

Answered By – Marko Kolaksazov

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published