ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2)


441

Ho installato LAMP su Ubuntu 12.04 LTS (Precise Pangolin) e quindi ho impostato la password di root su phpMyAdmin . Ho dimenticato la password e ora non riesco ad accedere. Quando provo a cambiare la password tramite il terminale ottengo:

ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2)

Come posso risolvere questo problema? Non riesco ad aprire LAMP, disinstallarlo o reinstallarlo.


Probabilmente reinstallazione è più facile: stackoverflow.com/a/31984482/763744
Zernel

Reimposta la password arrestando MySQL e avviandola in modalità provvisoria saltando le tabelle
--grant

digita questo nel tuo terminale "sudo apt-get install mysql-server"
Humphrey

Avvia o riavvia il servizio mysql e verifica. sudo /etc/init.d/mysql start o sudo /etc/init.d/mysql restart
Jitendra Patel

systemctl start mariadb.service
Thewebus

Risposte:


254

Una volta ho avuto questo problema e l'ho risolto installando mysql-server, quindi assicurati di aver installato il mysql-server, non il mysql-cliento qualcos'altro.

Questo errore indica che il file /var/run/mysqld/mysqld.socknon esiste, se non lo hai installato mysql-server, il file non esisterebbe. Quindi, in tal caso, installalo con

sudo apt-get install mysql-server

Ma se mysql-serverè già installato ed è in esecuzione, è necessario controllare i file di configurazione.

I file di configurazione sono:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

In /etc/my.cnf, la configurazione del file socket può essere /tmp/mysql.socke nella /etc/mysql/my.cnfconfigurazione del file socket può essere /var/run/mysqld/mysqld.sock. Quindi, rimuovi o rinomina /etc/mysql/my.cnf, lascia usare mysql /etc/my.cnf, quindi il problema potrebbe essere risolto.


Puoi avere il demone mysql in esecuzione e il mysql-server-core installato, ma devi installare il mysql-server, che è i binari E la configurazione del database di sistema!
Cedric

99
sudo apt-get install mysql-serverinstallare mysql su ubuntu
towry

9
Se dovessi spiegare tecnicamente, direi 1) Se stai eseguendo "mysql -u <nome_utente> -h <indirizzo_server_MySQL> -p", stai effettivamente eseguendo il client mysql per accedere al server mysql. Se il server mysql non è installato sull'indirizzo / indirizzo IP menzionato con '-h', verrà visualizzato l'errore sopra riportato. Questo perché non è in grado di connettersi al server MySQL tramite il socket mysql.sock 2) Se Mysql-server è già installato, dovrebbe essere in esecuzione. In caso contrario, si osserverà lo stesso errore. Quindi fallo funzionare sul server che hai specificato.
Mayur Nagekar,

1
Ciò può verificarsi anche se si tenta di modificare la directory in cui è archiviato il database, ma si inserisce la directory errata nel file di configurazione (come un errore di battitura). Invece di dirti che la directory di refuso non esiste, ti dirà che non hai i permessi per accedervi.
Michael,

4
Come primo passo, consiglierei un tentativo di riavviare il processo del server (vedere le altre distinzioni tra server e client). Prova sudo /etc/init.d/mysql restart. Di solito, la reinstallazione non è necessaria. Ti consiglio di controllare prima i file di registro. Non solo il file di registro di mysql ma anche / var / log / syslog poiché potresti aver avuto un arresto anomalo del server che causava la distruzione di mysql come effetto collaterale.
Rein

212

Prova questo:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

Inoltre (per vedere se è in esecuzione):

telnet 127.0.0.1 3306 

Probabilmente è solo una configurazione errata nel my.cnffile, in /etc/somewhere(a seconda della distribuzione Linux ).


1
Ricevo lo stesso errore. E ho controllato e il bind predefinito sia nel main che nel my.cnf è già impostato su 127.0.0.1. Tuttavia usando il comando sopra mi ha permesso di connettermi. Dovrà continuare a cacciare per capire perché solo fare "mysql" sta dando l'errore.
cchiera,

1
Ottengo telnet: impossibile connettersi all'host remoto: connessione rifiutata a causa del comando telnet. Comunque Apache funziona ancora dato che sono in grado di aprire localhost
Rishi Dua il

@cchiera Sai, non avevo questo errore prima. Ma quando volevo collegarmi al mio db tramite un'app iOS usando ssh tunnel, ho ricevuto questo errore del 2013. Per risolverlo ho dovuto modificare /etc/my.cnfe commentare #bind-address = 127.0.0.1 Riferimento 1 Riferimento 2 . Quindi potrei connettermi. Dopo questo, mi sono reso conto che stavo ricevendo ora questo errore del 2002 che mi ha portato a questa risposta e ora funziona di nuovo. Sicuramente sono d'accordo con te ottenendo una spiegazione sul perché solo digitando mysqlsenza -hgenerare un errore.
Pathros,

Nota: mysql -h localhostnon funziona. Assicurati di usare mysql -h 127.0.0.1come specificato nella risposta.
Vadasambar,

Come posso risolvere questo problema se riesco ad accedere con il comando in questa risposta?
Carlos A. Jimenez Holmquist,

128

Sto vedendo tutte queste risposte, ma nessuna offre la possibilità di reimpostare la password e nessuna risposta accettata . La vera domanda è che ha dimenticato la password, quindi ha bisogno di reimpostare, non vedere se è in esecuzione o meno (installato o meno) come implica la maggior parte di queste risposte.


Per reimpostare la password

Segui questi passaggi (può essere utile se dimentichi davvero la password e puoi provarla in qualsiasi momento, anche se al momento non ti trovi nella situazione):

  1. Fermare mysql

    sudo /etc/init.d/mysql stop

    O per altre versioni di distribuzione:

    sudo /etc/init.d/mysqld stop
  2. Avviare MySQL in modalità provvisoria

    sudo mysqld_safe --skip-grant-tables &
  3. Accedi a MySQL usando root

    mysql -uroot
  4. Seleziona il database MySQL da utilizzare

    use mysql;
  5. Reimposta la password

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
  6. Svuota i privilegi

    flush privileges;
  7. Riavvia il server

    quit
  8. Arrestare e riavviare il server

    Ubuntu e Debian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start

    Su CentOS, Fedora e RHEL:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
  9. Accedi con una nuova password

    mysql -u root -p
  10. Digita la nuova password e goditi nuovamente il tuo server come se niente fosse

È stato preso da Reimposta una password di root di MySQL .


L'aggiornamento della password degli utenti non ha funzionato per me, tuttavia una volta effettuato l'accesso al monitor MySQL e dopo aver utilizzato il database mysql, ha repair table user use_frmfunzionato per me per risolvere questo problema. - stackoverflow.com/questions/4297592/…
Craig van Tonder,

20
In MySQL 5.7, il campo password nel campo tabella mysql.user è stato rimosso, ora il nome del campo è 'authentication_string', quindi (5) dovrebbe essereupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel,

Sapresti un modo per rendere questo uno script bash? Mi sembra di averne bisogno ogni volta che riavvio la scatola.
vphilipnyc,

Qualcosa mi dice che vuoi una soluzione alternativa, ma in realtà dovresti provare a scoprire perché devi farlo ogni volta e risolverlo. Per quanto riguarda la sceneggiatura, fai una nuova domanda e pubblica ciò che hai già provato, forse alcuni altri potrebbero aiutarti
davejal

2
Per me ha funzionato alla grande, ma per prima cosa ho dovuto implementare questa soluzione: stackoverflow.com/questions/42153059/…
Andrew Fox,

68

Ho provato i seguenti passaggi:

  1. Accedi come super usero usasudo
  2. Apri /etc/mysql/my.cnfusando gedit
  3. Trova bind-addresse modifica il suo valore nell'indirizzo IP della macchina host del server di database. Per me era localhosto127.0.0.1
  4. Salva e chiudi il file.
  5. Torna al terminale ed esegui sudo service mysql start

E ha funzionato per me.


4
Da questo, ho appena eseguito il servizio sudo mysql restart e ha funzionato.
Orane,

Nel mio caso l'errore è stato l'IP modificato, quindi ho impostato bind-address = localhost
Nicolás Arias,

@rshahriar non c'è niente chiamato come bind-address nel mio /etc/my.cnf è una buona idea aggiungere il campo
RCBian

@SilvioDelgado Non se mai si desidera connettersi tramite tunneling ssh. Spiegazione qui
Pathros,

riavviare il servizio mysql ha funzionato anche per me, ma non sono ancora sicuro di dove trovare il registro degli errori per capire la causa e cercare di evitare che si ripeta ...
Maleka

41

Ho risolto questo problema eseguendo il comando seguente:

mysql.server start

E se sei su un Mac e hai usato brew per installare mysql, usa semplicemente:

brew services start mysql

36

Ho avuto un problema simile. mysql non si avvia:

sudo service mysql start
start: Job failed to start

Se disabilito apparmor:

sudo aa-complain /etc/apparmor.d/*

il problema è andato via. Il problema era che mysqld stava provando ad accedere a /run/mysqld/mysqld.sock ma il profilo di apparmor dava solo il permesso a /var/run/mysqld/mysqld.sock (/ var / run è collegato a / run, quindi in realtà sono lo stesso). Non so perché mysqld non stia usando il percorso var poiché è quello che è impostato in tutti i file di configurazione, ma puoi risolvere il problema aggiungendo quanto segue a /etc/apparmor.d/usr.sbin.mysqld

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

Non sapevo di dover chiamare "sudo service mysql start". L'ultima volta che ho installato MySQL su Ubuntu, penso che sia stato avviato automaticamente all'installazione. MariaDB su Manjaro richiede l'avvio esplicito del servizio dopo l'installazione.
dmiller309,

32

Nel mio caso, il disco era pieno e mysqld non poteva più avviarsi.

Prova a riavviare il servizio mysql.

> service mysql restart

o

> service mysql stop

> service mysql start

Se non riconosce il stopcomando, allora è sicuramente lo spazio su disco. Dovresti fare un po 'di spazio nella partizione mysqlallocata o allargare il disco.

Controllare lo spazio su disco con

> df -h

2
Mi è successa la stessa cosa: disco intero. Pulito un po 'di spazio, riavviato e il problema è andato via.
Darren,

2
Se questo è il tuo problema nell'esecuzione: "/etc/init.d/mysqld start" ti dirà che la tua partizione del disco è piena
Tickon

Lo stesso per me, disco al 100%. Spazio pulito e inizio servizio ok
Hugo

28

Ho risolto questo uccidendo il mysqlprocesso:

ps -ef | grep mysql
kill [the id]

E poi ho riavviato il server con:

sudo /etc/init.d/mysql restart

Ma startfunziona anche:

sudo /etc/init.d/mysql start

Quindi ho effettuato l'accesso come admin, e ho finito.


beh, in realtà stavo interrompendo mysql prima che si schiantasse. Poi ricevo "* Per favore dai un'occhiata al syslog." e "ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (111)". Alla fine, mi rendo conto che sta cercando di riprendersi, quindi lo uccido e lo riavvio.
cwhsu,

Ci sono (rare) situazioni in cui "mysql start" fallirà, quindi è necessario utilizzare l'argomento "restart". Se hai bisogno di uccidere un processo daemon, è meglio usare l'argomento "stop" invece del comando kill. Tuttavia, il comando killall è più conveniente del comando kill (killall mysqld).
Rein

Uccidere il processo MySQL e riavviare MySQL ha funzionato per me, bello
Vishal Shetty,

21

In qualche modo il processo del server MySQL non ha creato il socket, oppure il client sta cercando il socket nel posto sbagliato.

Il mio primo suggerimento sarebbe quello di verificare se il server MySQL è in esecuzione. Il secondo suggerimento potrebbe essere: il server MySQL è in esecuzione su un altro host? In tal caso, aggiungi il -h <hostname>flag al tuo client MySQL nel terminale.

Se MySQL è effettivamente in esecuzione e in esecuzione in locale, controlla il tuo my.cnffile. Dovrebbe esserci una linea simile

socket = /var/run/mysqld/mysqld.sock

Verifica se corrisponde alla posizione del socket menzionata nel tuo post.

Per esperienza, direi che lo scenario più probabile è che il tuo server MySQL non sia affatto in esecuzione o non sia in esecuzione sullo stesso host in cui esegui il tuo client MySQL dal terminale.


19

Ho riscontrato lo stesso problema dopo aver dovuto riavviare il mio server di produzione. Sto eseguendo Debian 8.1 (Jessie) su un droplet DigitalOcean.

Questo è quello che ho fatto per risolvere il mio problema:

  1. Controlla se il file /var/run/mysqld/mysqld.sockesiste. In caso contrario, crearlo manualmente inserendo touch /var/run/mysqld/mysqld.sock(che è quello che dovevo fare).

  2. Quindi il processo MySQL può usare questo file. Cambia la proprietà di detto file inserendo chown mysql /var/run/mysqld/mysqld.sock.

  3. Una volta terminato '2', riavvia il servizio MySQL immettendo service mysql restarto /etc/init.d/mysql restart.

Dopo aver eseguito i passaggi precedenti, il mio problema è stato risolto. Raramente ho questo problema, e probabilmente c'è un modo migliore, quindi fornire feedback costruttivi se necessario :).


1
Ho notato che il file non era presente e ho appena riavviato il server mysql. Ha creato automaticamente il file e avviato correttamente. Grazie per il vantaggio.
Sojurn,

15

Il tuo server mysql potrebbe non essere in esecuzione. Assicurarsi che funzioni digitando mysql.server startnel terminale.


15

Controllare il "bind-adress"parametro in my.cnf.

Altrimenti prova con il comando:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h per host 127.0.0.1, ovvero localhost

  • -P (nota -P in maiuscolo) per la porta 3306, ovvero la porta predefinita per MySQL


11

Ecco cosa ha funzionato per me:

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

Questo crea un collegamento.


Non ha funzionato per me :( Questo crea un collegamento
Michael,

11

Se stai utilizzando Amazon EC2 e stai riscontrando questo problema sull'istanza, devi solo fare:

sudo yum install mysql-server
sudo service mysqld restart

Amazon EC2 non ha un server installato (è installato solo il client), quindi in tal caso è necessario installarlo sull'istanza e successivamente provare

 mysql -u root -p

per verificare se ha funzionato.


Impossibile riavviare mysqld.service: unità mysqld.service non trovata. In Ubuntu 16.04
Ketav Chotaliya,

9

Penso che ogni volta che ricevi l'errore

ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite socket '/var/lib/mysql/mysql.sock'

Per prima cosa ti consiglio di verificare se il tuo mysqldemone è in esecuzione ... Il più delle volte non funzionerà di default. Puoi controllarlo da /etc/init.d/mysqld status.

Se non è in esecuzione, avviarlo prima:

.../etc/init.d/mysqld start.

Scommetto che funzionerà al 110%.


9

Invece di usare localhost:

mysql -u myuser -pmypassword -h localhost mydatabase

Usa 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(nota anche che non c'è spazio tra -p e mypassword)

Godere :)


Non è inoltre possibile includere la password dalla riga di comando per motivi di sicurezza utilizzando questa riga: mysql -u myuser -p -h 127.0.0.1 mydatabase MySQL ti chiederà la tua password e non la farà eco.
DD,

1
Questo mi ha risolto. Tuttavia, mi chiedo ancora perché 127.0.0.1funziona mentre localhostno ?!
not2savvy

9

Assicurati di disporre di backup di database importanti e quindi prova a disinstallare elementi correlati a MySQL :

apt-get remove --purge mysql\*

Quindi installarlo di nuovo :

apt-get install mysql-server mysql-client

Questo ha funzionato per me e i dati sono stati conservati.

Se PHP MySQL mostra errori potresti dover reinstallare PHP MySQL :

apt-get install php5-fpm php5-mysql

Penso che sia l'arma fatale. Ho provato di tutto ma, solo la tua proposta è ciò che mi ha aiutato. Grazie !
Messou,

9

Inoltre sto affrontando lo stesso problema che si verificherà se il tuo mysql servernon è in esecuzione per impostazione predefinita, si fermerà di nuovo dopo alcuni secondi, quindi esegui di nuovo ($ sudo service mysql start comando ) che puoi modificare se lo sai.

per quel comando usa

$ sudo service mysql start   

(inserisci la password utente se richiesta perché usiamo sudo) e quindi esegui

$ sudo mysql -u root -p          (put user password if required )

ora hai il tuo database


7

Se l'installazione è stata recente, è necessario confermare se l'installazione è SERVER di installazione ... come mysql-server-5.5 .. Forse hai installato solo "mysql" .. questo è solo client anziché server.


7

Se hai XAMPP installato sul tuo computer Linux, prova a copiare il tuo my.cnffile da /opt/lampp/etc/my.cnfa/etc/my.cnf .

Quindi, esegui di mysql -u rootnuovo ... Ora dovresti avere il socket corretto ed essere in grado di eseguire il client MySQL.


7

Anch'io ho questo problema, ma ho appena fatto:

sudo service mysql restart 

Ha funzionato per me.


7

HO TROVATO LA SOLUZIONE

Prima di lanciare il comando:mysql_secure_installation

  • Passo 1: sudo systemctl stop mariadb
  • Passo 2: sudo systemctl start mariadb
  • Passaggio 3: mysql_secure_installation

Quindi chiederà la password di root e puoi semplicemente premere Invio e impostare la tua nuova password di root.


6

Nel mio caso, la porta predefinita 3306 veniva utilizzata da qualche altro processo e quindi non si avviava. Dopo aver interrotto l'altro servizio e fatto sudo service mysql start, ha funzionato bene. A proposito, puoi usare qualcosa di simile sudo lsof -Pn -iTCP:3306per vedere chi potrebbe usare la porta.


6

Nel mio caso ha funzionato facendo un po 'di ricerca e sviluppo:

Sono in grado di connettermi a MySQL utilizzando

root-debian#mysql -h 127.0.0.1 -u root -p

Ma non funziona con mysql -u root -p.

Non ne ho trovato nessuno bind-addressin my.cnf . Quindi ho superato il parametro socket=/var/lib/mysql/mysqld.sockin my.cnfcui mi stava causando un problema con il login.

Dopo aver riavviato il servizio è andato tutto bene:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)

6

ho risolto questo problema con il riavvio di mysql

/etc/init.d/mysql stop

e

/etc/init.d/mysql start

questo è tutto.


5

Per esperienza, dico che è necessario verificare prima che il server sia in esecuzione, quindi provare a configurare MySQL. L'ultima soluzione è reinstallare MySQL.


5

Apri il terminale e digita:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

Entrambi i pacchetti client di database MySQL e MySQL Server avranno la stessa versione 5.5. MySQL Client 5.5 e MySQL Server 5.5 sono le attuali "migliori" versioni di questi pacchetti in Ubuntu 14.04 come determinato dai manutentori dei pacchetti.

Se preferisci installare MySQL Client 5.6 e MySQL Server 5.6 puoi anche trovare i pacchetti mysql-client-core-5.6 e mysql-server-5.6 nel Ubuntu Software Center. L'importante è che i numeri di versione del client e del server corrispondano in entrambi i casi.

Questo ha funzionato per me.


5

Verifica se disponi dei diritti corretti:

sudo chmod 755 /var/lib/mysql/mysql

Ho avuto gli stessi problemi e questo ha funzionato per me. Dopo averlo fatto sono stato in grado di avviare MySQL.


5

Nel mio caso, sembra che non sia stato davvero in grado di uccidere il processo mysql, quando corro

sudo service mysql stop
ps -ef | grep mysql

Il processo mysql è sempre stato lì, sembra che stesse bloccando il file socket e il nuovo processo mysql non è stato in grado di crearlo da solo.

quindi questo ha aiutato

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Ora sono in grado di accedere al database utilizzando

mysql -u root

Quindi per aggiornare la password di root:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS : ho avuto problemi con l'aggiornamento di root passwod, sembra un problema con il plugin "auth_socket", quindi ho dovuto creare un nuovo utente con tutti i privilegi

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

Questo crea l'utente "super" senza password e quindi puoi connetterti mysql -u super


grazie per la risposta e sono riuscito ad accedere a mysql, ma non ci sono tabelle utente nei miei database.
John Joe,

Questa soluzione funziona. Ma prima di eseguire l'istruzione sql per modificare la password per root, è necessario selezionare un database. Esegui la seguente dichiarazione <br> use mysql;<br> e ora puoi usare <br>UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Charle K.

5

Sul server Debian Jessie, la mia soluzione di lavoro era semplicemente fare

service mysql restart
service mysql reload

come utente root

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.