Impossibile connettersi al server MySQL locale tramite socket '/var/lib/mysql/mysql.sock' (2)


255

Ricevo il seguente errore quando provo a connettermi a mysql:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

C'è una soluzione per questo errore? Quale potrebbe essere la ragione dietro?


Ho risposto qui, per favore controlla il link qui sotto: stackoverflow.com/a/35577309/4773290
Pratik Patil

Risposte:


222

Ti stai connettendo a "localhost" o "127.0.0.1"? Ho notato che quando ti connetti a "localhost" viene utilizzato il connettore socket, ma quando ti connetti a "127.0.0.1" viene utilizzato il connettore TCP / IP. È possibile provare a utilizzare "127.0.0.1" se il connettore socket non è abilitato / funzionante.


27
In tal caso, probabilmente dovresti verificare se il tuo server MYSQL è effettivamente in esecuzione.
Jan Thomä,

3
Puoi anche forzare l'uso di un socket con il parametro socket (-S con / usr / bin / mysql) e forzare TCP / IP fornendo una porta (-P con / usr / bin / mysql.)
Kaoru

L'uso di un nome di rete completo diverso da localhost ha funzionato per me. Assicurati solo che sia dichiarato nel file 'hosts' sul lato client.
Fabien Haddadi,

2
Nota per gli utenti cygwin: se il client mysql cygwin tenta di collegarsi ad un server mysql WAMP locale, ad esempio, utilizzare -h <nome host diverso da localhost>. Non provare a creare un file mysql.sock e dichiararlo in qualunque file my.cnf, non funzionerà.
Fabien Haddadi,

Un nome host errato mi ha dato lo stesso errore esatto. Guardare il /etc/hostsfile nel mio contenitore docker mi ha mostrato il nome host MySql mysql. L'uso dello stesso nome host nella mia configurazione di connessione ha risolto il problema.
Stephane,

188

Assicurati che il tuo servizio mysql sia in esecuzione

service mysqld start

Quindi, prova una delle seguenti operazioni:

(se non hai impostato la password per mysql)

mysql -u root

se hai già impostato la password

mysql -u root -p

5
sulle versioni più recenti di debian: service mariadb startbecause mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra

2
Dai a quel ragazzo una medaglia.
Siraj Alam,

Questa è stata la risposta per me. Dal momento che sto usando mariadb la soluzione era di eseguire quanto segue: "sudo systemctl start mariadb". Dopo tutto è andato bene.
Mohsen,

Consegna una medaglia a @Zahra
Ahmed C,

28

Se il tuo file my.cnf (di solito nella cartella etc) è correttamente configurato con

socket=/var/lib/mysql/mysql.sock

puoi verificare se mysql è in esecuzione con il seguente comando:

mysqladmin -u root -p status

prova a cambiare il tuo permesso nella cartella mysql. Se lavori localmente, puoi provare:

sudo chmod -R 777 /var/lib/mysql/

quello ha risolto per me


Funziona anche per me, ma dopo che ho eseguito l'aggiornamento alla versione più recente appare quindi questo problema, posso sapere perché questo accada?
Ben

sudo chmod -R 777 / var / lib / mysql / Ha funzionato per me con un problema che avevo durante l'avvio di un contenitore
docker

23

Il server MySQL non è in esecuzione o non si trova nella posizione del suo file socket (controllare my.cnf).


Ho avuto il problema sopra descritto e questo era il problema. Grazie.
oshirowanen,

3
Dove sarebbe l'installazione di Homebrew?
pal4life

19

Molto probabilmente mysql.socknon esiste in /var/lib/mysql/.

Se trovi lo stesso file in un'altra posizione, quindi collega simbolicamente:

Per esempio: ce l'ho /data/mysql_datadir/mysql.sock

Passa l'utente a mysql ed eseguilo come indicato di seguito:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Ciò ha risolto il mio problema


rinominare mysql.sock in qualcos'altro, quindi riavviare mysqld ("servizio mysqld restart"), quindi rinominare qualcos'altro in mysql.sock ha funzionato per me. Una leggera variazione su questa risposta, quindi grazie.
Analisi fuzzy,

Questa risposta può aiutare a individuare il mysql.sockfile
Nobita,

15

Se si utilizza un RHEL recente, potrebbe essere necessario avviare mariadb (un db mysql open source) anziché il db mysql:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Dovresti quindi poter accedere a mysql nel solito modo:

mysql -u root -p

Cordiali saluti, questo funziona anche per CentOS 8.1. Dopo l'installazione mariadb-servere mariadb, non dimenticare di eseguire mysql_secure_installationper ripulire alcune impostazioni non sicure predefinite.
Dio Phung,

13

Nel mio caso ho spostato il file socket in un'altra posizione all'interno /etc/my.cnf da /var/lib/mysql/mysql.socka/tmp/mysql.sock

Anche dopo aver riavviato il servizio mysqld, vedo ancora il messaggio di errore quando provo a connettermi. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Il problema riguarda il modo in cui il client è configurato. L'esecuzione della diagnostica mostrerà effettivamente il percorso socket corretto. per esempiops aux | grep mysqld

Lavori:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Non funziona:

mysql -uroot -p
mysql -uroot -p -hlocalhost

È possibile risolvere questo problema aggiungendo la stessa linea socket nella [client]sezione all'interno di mysql config.


13

Modifica semplicemente /etc/my.cnf Aggiungi le seguenti righe amy.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

Riavvia mysql e riconnettiti

mysql -u user -p database delle password -h host;


L'unica risposta corretta. Mi chiedo perché non abbia abbastanza voti positivi.
CentAu,

11

Controlla se il tuo servizio mysqld è in esecuzione o no, se non è in esecuzione, avvia il servizio.

Se il problema non viene risolto, cerca /etc/my.cnfe modifica come segue, dove vedi una riga che inizia con socket. Eseguire un backup di quel file prima di eseguire questo aggiornamento.

socket=/var/lib/mysql/mysql.sock  

Cambia in

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
Ciao Sekar, ho inserito "find / -name my.cnf" e ho ottenuto due posizioni. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Quindi, quale usare .. Ho chiesto domanda qui .. stackoverflow.com/questions/32437796/...
Nana Partykar

7

MariaDB, un fork di MySQL sviluppato dalla community, è diventato l'implementazione predefinita di MySQL in molte distribuzioni.

Quindi prima dovresti iniziare,

$ sudo systemctl start mariadb

Se fallisce piuttosto prova,

$ sudo systemctl start mysqld

Quindi per avviare mysql,

$ mysql -u root -p

Ad oggi, in Fedora il pacchetto si chiama mariadb E in Ubuntu si chiama mariadb-server.

Quindi potrebbe essere necessario installarlo se non è già installato nel sistema.


7

Assicurati di avere abbastanza spazio rimasto /var. Se il demone Mysql non è in grado di scrivere ulteriori informazioni sull'unità, il server mysql non si avvia e porta all'erroreCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Prendi in considerazione l'utilizzo

expire_logs_days = 10
max_binlog_size = 100M

Questo ti aiuterà a limitare l'utilizzo del disco.


Grazie, sto eseguendo mysql su Oracle Virtualbox e quando ho fatto un dump del mio bd, ho esaurito lo spazio e non sono riuscito ad avviare il server mysql, quando ho eliminato il file di dump sono stato in grado di riavviare il server mysql.
JayCee,

1
Questo mi ha risolto. Avevo innodb_buffer_pool_size impostato su un valore molto elevato per gli ambienti di produzione e questo ha causato il crash di mysql sulla mia macchina virtuale.
Benjamin Brizzi,

1
Ho avuto questo problema quando si utilizza phabricator e la soluzione è stata di cambiare innodb_buffer_pool_sizein my.cnf. Impostarlo su un valore piccolo come innodb_buffer_pool_size = 50Mè un buon test per scartare questa ipotesi;)
Yercalamarino,

Questo è stato il problema, ha controllato tutto tranne lo spazio su disco. Spazio liberato da / var, è tornato!
Nadjib Mami,

5

Ecco cosa ha funzionato per me:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart


4

Assicurati di aver avviato il server:

mysql.server start

Quindi connettiti con l'utente root:

mysql -uroot

3

Se il tuo mysql funzionava in precedenza e si è fermato all'improvviso basta "riavviare" il server.

Stavo affrontando questo problema sul mio VPS CentOS .->

Stavo diventando costantemente

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

Ho provato tutte le tecniche, infine il riavvio del server ha risolto i problemi ->

shutdown -r now

Spero che questo ti aiuti !!



3

se modifichi i file in / var / lib / mysql [come copiarli o sostituirli], devi impostare il proprietario dei file su mysql, questo è così importante se il riavvio di mariadb.service non è riuscito

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

Prima inserisci "service mysqld start" e accedi


cosa vuoi sapere? si prega di leggere la FAQ prima di chiedere domanda qui
Freak

A questa domanda è stata data risposta con successo tre anni fa. Questa risposta esatta è stata data più completamente l'anno scorso.
Cairnarvon

2

Assicurati di aver installato correttamente il server MySQL, ho riscontrato questo errore molte volte e penso che sia complicato eseguire il debug dal socket, intendo che potrebbe essere più semplice reinstallarlo.

Se si utilizza CentOS 7, ecco il modo corretto di installarlo:

Prima di tutto, aggiungi la fonte della community mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Quindi è possibile installarlo da yum install mysql-community-server

Avviarlo con systemctl: systemctl start mysqld


1

Il mio problema era che ho installato mysql con successo e ha funzionato bene.

Ma un giorno si è verificato lo stesso errore.

Impossibile connettersi al server MySQL locale tramite socket '/var/lib/mysql/mysql.sock' (2)

E non esisteva alcun file mysql.sock.

Questo sollution ha risolto il mio problema e mysql era di nuovo funzionante:

Accedi come root:

sudo su -

Correre:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Prova come root:

mysql -u root -p

mysql ora dovrebbe essere attivo e funzionante.

Spero che questo possa aiutare anche qualcun altro.


1

Si noti che mentre mysql legge le informazioni sulla posizione del file socket dal file my.cnf, il programma mysql_secure_installation sembra non farlo correttamente a volte.

Quindi, se sei come me e mescoli le cose in giro al momento dell'installazione, potresti entrare nella situazione in cui puoi connetterti al database con mysql bene, ma la cosa non può essere protetta (non usando comunque quello script).

Per risolvere il problema, il suggerimento di sreddy funziona bene: crea un softlink da dove lo script si aspetterebbe il socket dove si trova effettivamente. Esempio:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(Uso / tmp / come posizione predefinita per i socket)


1

Ha funzionato per me con le seguenti modifiche

Qualunque percorso per socket è menzionato in [mysqld] e lo stesso in [client] in my.cnf e riavvia mysql

[mysqld] socket = / var / lib / mysql / mysql.sock

[client] socket = / var / lib / mysql / mysql.sock


1

Un modo per riprodurre questo errore: se intendevi connetterti a un server esterno ma invece connettiti a quello locale inesistente:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Quindi devi specificare l'host in questo modo:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

Questo potrebbe essere un suggerimento stupido ma assicurati al 100% che il tuo DB sia ancora ospitato su localhost. Ad esempio, se un amministratore di rete ha scelto (o cambiato in) hosting DB Amazon, sarà invece necessario quel nome host!


Sto usando il provider di hosting 1and1 e ho ricevuto questo errore dopo aver inviato l'host. La correzione consisteva semplicemente nel fornire il nome host "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
rob

1

Nel mio caso, stavo importando un nuovo database e dopo non sono stato più in grado di riconnettermi. Alla fine ho capito che era un problema di spazio.

Quindi puoi eliminare l'ultimo database ed espandere il tuo disco rigido o quello che ho fatto, ripristinato un'istantanea della mia macchina virtuale.

Nel caso in cui qualcuno pensi che sia utile


0

si è verificato questo problema durante il tentativo di connettere mysql nel client SSH, trovando utile l'aggiunta del percorso socket al comando quando è necessario passare da un socket all'altro.

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

Questo è un problema se si sta esaurendo lo spazio su disco. La soluzione è liberare spazio dall'HDD.

Per favore leggi di più per avere la spiegazione:

Se stai eseguendo MySQL su LINUX controlla lo spazio libero su HDD con il comando disk disk gratuito:

 df 

se stai ricevendo qualcosa del genere:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Quindi questo è il problema e ora hai la soluzione!

Poiché mysql.sock vuole essere creato nella cartella mysql, che è quasi sempre nella cartella principale, non è riuscito a raggiungerlo a causa della mancanza di spazio.

Se periodicamente dai il comando ls nella directory mysql (in openSUSE 11.1 è in / var / lib / mysql) otterrai qualcosa del tipo:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

Il file mysql.sock appare e scompare spesso (è necessario provare a assegnare a ls per colpire un'istanza con il file mysql.sock nella cartella).

Ciò è causato da spazio su disco insufficiente.

Spero di aiutare alcune persone !!!! Grazie!


0

Ho dovuto disabilitare explicit_defaults_for_timestampda my.cnf.


0

Prova le prime 2, 3 soluzioni. L'errore è stil popup e se non riesci a trovare/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Controlla lo spazio disponibile in / var /

df

Se la directory è piena, rimuovere alcuni file / directory inutili

rm /var/cache/*

Probabilmente il tuo problema verrà risolto ora.


0

Se sei nella shell di sf.net , prova:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Cambia {LETTER} e {GROUP ID} come mostrato nel tuo database MySQL del profilo di amministratore del progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.