OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Asked Answered
A

5

32

when connecting to mysql database in Django ,I get the error.

  1. I'm sure mysql server is running.

  2. /var/run/mysqld/mysqld.sock doesn't exist.

  3. When I run $ find / -name *.sock -type s, I only get /tmp/mysql.sock and some other irrelevant output.

  4. I added socket = /tmp/mysql.sock to /etc/my.cnf. And then restared mysql, exited django shell, and connected to mysql database. I still got the same error.

I searched a lot, but I still don't know how to do.

Any help is greate. Thanks in advance.

Well, I just tried some ways. And it works. I did as follows.

  1. Add socket = /tmp/mysql.sock .Restart the mysql server.
  2. ln -s /tmp/mysql.sock /var/lib/mysqld/mysqld.sock

I met an another problem today. I can't login to mysql. I'm newbie to mysql. So I guess mysql server and client use the same socket to communicate. I add socket = /var/mysqld/mysqld.sock to [mysqld] [client] block in my.cnf and it wokrs.

Arabeila answered 9/8, 2013 at 15:55 Comment(6)
Could you connect locally to your MySQL server using MySQL CLI? (Something like that: mysql -u you_user_name -p)Talkington
What is your DATABASES settings?Downwash
I can connect to mysql server using mysql -u user_name -p . I set database as django recomendedArabeila
Could you set socket = /var/run/mysqld/mysqld.sock directly? That way you don't have to link /tmp/mysql.sock to that path manually.Waldgrave
possible duplicate of Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)Reedreedbird
Possible duplicate of ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)Serrano
P
74

Use "127.0.0.1", instead of "localhost"

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': 'django',
      'USER': 'root',
      'PASSWORD': '',
      'HOST': '127.0.0.1',
      'PORT': '3306',
   }
}
Pondweed answered 28/8, 2016 at 20:4 Comment(2)
Any idea why that would make any difference? Isn't localhost the same as 127.0.0.1 in most cases?Proportionable
This is one of those bittersweet moments we all have in software development sometime: I'm glad it worked, but at the same time I have no idea WHY it did work. Thanks nonetheless.Mccandless
T
1

For me this worked add OPTIONS attribute with read_default_file and give it the path of my.cnf file

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'read_default_file': '/opt/lampp/etc/my.cnf',
        }
    }
}
Towardly answered 23/1, 2021 at 5:27 Comment(0)
P
1

You need to change your HOST from 'localhost' to '127.0.0.1' and check your django app :)

Pact answered 26/5, 2022 at 8:41 Comment(0)
P
0

in flask, you may use that

app=Flask(__name__)

app.config["MYSQL_HOST"]="127.0.0.1
app.config["MYSQL_USER"]="root"...

Participle answered 25/6, 2019 at 21:12 Comment(0)
T
0

I faced this problem when connecting MySQL with Django when using Docker.

Try 'PORT':'0.0.0.0'.

Do not use 'PORT': 'db'. This will not work if you tried to run your app outside Docker.

Temporal answered 28/2, 2021 at 1:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.