Reputation: 95
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.
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?
=================================
Since my issue has been resolved, I how start thinking about what could cause such issue in the first place!
Apparently Django didn't know the path to the my.cnf file, even if it exists, so it had to be implemented manually from the settings.py file with the short code I have written below.
Recently I have been working on a similar projects, involving usage of javascript and node.js as a mean to create a website with access to database from mysql of the Xampp. I am using Linux for both projects, thus it might be related to the specifications of the system. Again in the node.js project I had to implement manually the path to the socked file, as follows:
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
port: process.env.DB_PORT,
// THE PATH TO THE SOCKET FILE:
socketPath: process.env.DB_SOCKET_PATH
});
And thus I stated wondering why this issue has happened in the first place?? As I said, I could only suppose it might be related to the Linux version I am using (Linux Mint 20.3), or the way it was installed. When you start working with computers it is much easier to know what caused the problem, rather than only the correct solution.
Thank you very much in advance!
Upvotes: 1
Views: 1175
Reputation: 95
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
Upvotes: 0
Reputation: 76444
You have reached an issue which suggests a MySQL problem. It is wise to try and connect to MySQL directly at this point, because if that's successful, then you know for sure that your issues are on the application settings' side and if it's unsuccessful, then you need to solve MySQL's connectivity first and only then switch to your app's settings.
Now, the error clearly suggests that MySQL's socket file cannot be found.
First, let's check whether MySQL is running at all. In Ubuntu Linux the command to do so is
sudo service mysql status
If you use something else as an OS, then of course you will need to operate slightly differently.
In Ubuntu, if the command above yields something like
Unit mysql.service could not be found.
, then the service does not exist and you need to install it.
Otherwise, if the service exists but is not running, then you will need to start it if you are able. If not, then you have some maintenance to do.
Finally, if the MySQL service is successfully running, try connecting to it via cli, like:
mysql -u <youruser> -p
The -p
at the end signifies that a password will be used, so after running the command above you will need to type in the password (if everything goes well).
If you get the same socket file-related error (which presumably will happen), then you will need to find the location of the socket file (.sock) and update MySQL's cnf file (/etc/my.cnf in Linux) so that it will take into account the correct location of the socket file:
socket=/var/lib/mysql/mysql.sock
Upvotes: 1