Impossibile connettersi al server MySQL locale tramite socket homebrew


109

Recentemente ho provato a installare MySQL con homebrew ( brew install mysql) e quando provo a eseguirlo ottengo il seguente errore:

ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite il socket '/tmp/mysql.sock' (2)

Non c'è /tmp/mysql.sockné a /var/lib/mysql.sock.

Ho cercato e non ho trovato alcun mysql.sockfile.

Come posso risolvere questo problema?


Puoi vedere questo link Risposta di GeekHades. stackoverflow.com/questions/4847069/...
GeekHades

Ho installato mysql e ho avuto lo stesso problema dopo che la batteria del mio laptop si è esaurita e ho forzato uno spegnimento incompleto. Vale la pena correre mysqldper controllare le cose e assicurarsi che MySQL si spenga correttamente l'ultima volta. Se ha avuto un arresto "sporco" (ad esempio, se la batteria di un laptop forza l'arresto del sistema), questo dovrebbe pulirlo. Poi si può iniziare di nuovo server MySQL: mysql.server start.
Dave Everitt,

1
Questa risposta ha funzionato per me: stackoverflow.com/a/6378429/2641861
ArnoHolo

Questo è accaduto per me dopo aver ripristinato un nuovo Mac Mini da un backup di Time Machine. Ho dovuto disinstallare mysql@5.7 e reinstallarlo affinché iniziasse a funzionare. Un po 'un martello ma era relativamente indolore poiché tutte le mie configurazioni sono state mantenute.
Joshua Pinter

Risposte:


93

Quando hai il server in esecuzione tramite

mysql.server start

dovresti vedere il socket in /tmp/mysql.sock . Tuttavia, il sistema sembra aspettarselo in /var/mysql/mysql.sock . Per risolvere questo problema, devi creare un collegamento simbolico in / var / mysql :

sudo mkdir /var/mysql

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

Questo l'ha risolto per me. Ora il mio phpMyAdmin funziona felicemente con localhost e 127.0.0.1 .

Il merito va a Henry


1
Questo ha anche risolto il mio problema con Wordpress che non riusciva a connettersi a mySQL. Grazie ancora
Ayoub

20
Quando provo mysql.server startottengo ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Avevo bisogno di una versione precedente di MySQL, installata tramite brew install mysql@5.6.
Liron Yahdav

3
in esecuzione. mysql.server startrisolto per me
ivange94

@ Liron, hai risolto il problema che stai affrontando? Sto affrontando lo stesso problema senza aiuto.
Buddy

@ EB è passato un po 'di tempo da quando ho avuto questo problema ma guardando indietro al mio commento, hai provato la soluzione alternativa per installare una versione precedente di MySQL? A parte questo, purtroppo sono a corto di idee.
Liron Yahdav

61

Sembra che il tuo server mysql non sia avviato. Di solito eseguo il comando di arresto e poi lo riavvio:

mysqld stop
mysql.server start

Stesso errore, e questo funziona per me.


89
. ERRORE! Il server si chiude senza aggiornare il file PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap

Ho fatto un mysqld &commento sopra, ma penso che probabilmente farebbe la stessa cosa perché mysqld stop sono abbastanza sicuro che nel mio caso fosse a causa di un arresto improprio.
Mitch VanDuyn

54

Avevo alcune directory rimaste da un'altra installazione di mysql (8.0), che non sono state rimosse.

Ho risolto questo problema facendo quanto segue:

Prima disinstalla mysql

brew uninstall mysql@5.6

Elimina le cartelle / i file che non sono stati rimossi

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Reinstallare mysql e collegarlo

brew install mysql@5.6
brew link --force mysql@5.6

Abilita e avvia il servizio

brew services start mysql@5.6

3
Grazie mille :) Tutte le istruzioni sono state fallite ma la tua
Vyacheslav Loginov

1
Grazie - questa risposta ha terminato 24 ore di
colpi

1
Questo ha funzionato anche per me dopo aver provato tutto il resto là fuori! Grazie!!!! :)
Eric

1
Sembra che il problema per me fosse che avevo ancora / usr / local / var / mysql dopo un'installazione precedente. La rimozione ha fatto il trucco! Grazie per il tuo suggerimento.
themantimes8

Avevo bisogno di eseguire il passaggio "mysql_secure_installation" menzionato da homebrew prima che l'errore scomparisse.
Searaig

27

Prova a connetterti utilizzando "127.0.0.1" invece di "localhost".


2
@Esteban MySQL proverà a connettersi al socket unix se gli dici di connettersi a "localhost". Se gli dici di connettersi a 127.0.0.1, lo costringi a connettersi alla presa di rete. Quindi probabilmente hai MySQL configurato per ascoltare solo il socket di rete e non il socket del file system. (Fonte: serverfault.com/a/295300/59101 )
Ardee Aram

Questo mi ha aiutato a forzare il client mysql a utilizzare il socket TCP, poiché sto eseguendo un tunnel SSH su localhost sul mio database MySQL remoto.
Iow

22

1) Se riesci a vedere "mysql arrestato" quando esegui sotto il comando;

brew services list

2) e se riesci ad avviare mysql con il comando sottostante;

mysql server start

questo significa; mysql è in grado di avviarsi manualmente, ma non si avvia automaticamente all'avvio del sistema operativo. L'aggiunta di mysql ai servizi risolverà questo problema. Per fare ciò, puoi eseguire sotto il comando;

brew services start mysql

Successivamente, puoi riavviare il sistema operativo e provare a connetterti a mysql per vedere se si è avviato automaticamente. Ho fatto lo stesso e ho smesso di ricevere l'errore sotto;

ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite il socket '/tmp/mysql.sock' (2)

Spero che aiuti.


@berk ha aiutato nel mio caso a recuperare l'errore ma ha richiesto un altro errore "ERRORE 1045 (28000): Accesso negato per l'utente" utente "@" localhost "(utilizzando la password: NO)"
Pratik Khadka

Ciao @PratikKhadka, l'errore che stai ricevendo ora significa che mysql è in esecuzione e hai un problema di autenticazione. In base al messaggio di errore che hai pubblicato, stai utilizzando il nome utente come "utente" e non stai utilizzando alcuna password. È necessario utilizzare un nome utente e una password validi. Ti consiglio di controllare il seguente link; " forums.mysql.com/read.php?34,140320,140324 "
Berk

Non c'è bisogno di riavviare il sistema operativo, solo l'esecuzione di "brew services start mysql" ha funzionato per me. Grazie!
AKS

Ciao @AKS, hai ragione. Il riavvio non è necessario per farlo funzionare. Ho modificato la risposta per spiegare perché è necessario riavviare. È necessario vedere se mysql si avvia automaticamente all'avvio del sistema operativo. Grazie per il feedback!
Berk

5

Il file /tmp/mysql.sockè probabilmente una pipe con nome, poiché si trova in una cartella temporanea. Una named pipe è un file speciale che non viene mai memorizzato in modo permanente.

Se creiamo due programmi e vogliamo che un programma invii un messaggio a un altro programma, potremmo creare un file di testo. Abbiamo un programma che scrive qualcosa nel file di testo e l'altro programma che legge ciò che ha scritto l'altro programma. Questo è ciò che è un pipe, tranne che non scrive il file sul disco rigido del nostro computer, IE non archivia il file in modo permanente (come facciamo quando creiamo un file e lo salviamo).

Una presa è esattamente la stessa di una pipa. La differenza è che i socket vengono solitamente utilizzati su una rete, tra computer. Un Socket invia informazioni a un altro computer o riceve informazioni da un altro computer. Sia i pipe che i socket utilizzano un file temporaneo da condividere in modo che possano "comunicare".

In questo caso è difficile distinguere quale MySql sta utilizzando. Non importa però.

Il comando mysql.server startdovrebbe fare in modo che il "server" (programma) esegua il suo ciclo infinito che creerà quel file speciale e attenderà le modifiche ( listenper le scritture).

Dopodiché, un problema comune potrebbe essere che il programma MySql non ha il permesso di creare un file sulla tua macchina, quindi potresti dovergli dare i privilegi di root

sudo mysql.server start

Ha funzionato benissimo, grazie. Ho appena eseguito mysql.server start, mysql.server stope poi ho riavviato il servizio tramite homebrew con brew services start mysql@5.7e le cose sono andate bene.
taylorthurlow

4

Dopo aver installato macos mojave, ho dovuto cancellare la cartella mysql sotto /usr/local/var/mysqle quindi reinstallare tramite brew install mysqlaltrimenti le cose relative all'autorizzazione sarebbero apparse ovunque .


Ho risolto il problema con la tua risposta, avevo installato in precedenza mysql e poi ho provato a eseguire il downgrade a mysql@5.6
Rodrirokr

Grazie amico. ha risolto anche il mio problema. rimuovere / usr / local / var / mysql e reinstallare era la soluzione per me.
Oğuz Can Sertel

1
Attenzione: rimuovendoti /usr/local/var/mysqlrimuoverai anche tutti i tuoi database esistenti!
Leonardo

3

Ho ricevuto lo stesso errore e questo è ciò che mi ha aiutato:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Giusto per aggiungere a queste risposte, nel mio caso non avevo un server mySQL locale, era in esecuzione all'interno di un container Docker. Quindi il file socket non esiste e non sarà accessibile per il client "mysql".

Il file sock viene creato da mysqld e mysql lo utilizza per comunicare con esso. Tuttavia, se il tuo server mySql non è in esecuzione in locale, non richiede il file sock.

Specificando un nome host / ip il file sock non è richiesto es

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

Dato che ho passato un bel po 'di tempo a cercare di risolverlo e sono sempre tornato su questa pagina quando cercavo questo errore, lascerò la mia soluzione qui sperando che qualcuno risparmi il tempo che ho perso. Anche se nel mio caso sto utilizzando mariadb anziché MySql, potresti comunque essere in grado di adattare questa soluzione alle tue esigenze.

Il mio problema

è lo stesso, ma la mia configurazione è leggermente diversa (mariadb invece di mysql):

Mariadb installato con homebrew

$ brew install mariadb

Avviato il demone

$ brew services start mariadb

Ho provato a connettermi e ho ricevuto l'errore sopra menzionato

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

La mia soluzione

scopri quali my.cnffile sono usati da mysql(come suggerito in questo commento ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

controlla dove è in esecuzione il file socket Unix (quasi come descritto qui ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(potresti volere grep mysql invece di mariadb)

Aggiungi il file socket che hai trovato ~/.my.cnf(crea il file se necessario) (supponendo che ~/.my.cnffosse elencato durante l'esecuzione del mysql --verbose ...comando -comando dall'alto):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Riavvia il tuo mariadb:

$ brew services restart mariadb

Dopo questo potrei eseguire mysql e ottenere:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Quindi eseguo il comando con i privilegi di superutente e dopo aver inserito la mia password ho ottenuto:

$ sudo mysql -uroot
MariaDB [(none)]>

Appunti:

  1. Non sono abbastanza sicuro dei gruppi in cui devi aggiungere il socket, prima lo avevo [client-server] ma poi ho pensato che [client] dovrebbe essere sufficiente. Quindi l'ho cambiato e funziona ancora.

  2. Durante l'esecuzione mariadb_config | grep socketottengo: il --socket [/tmp/mysql.sock] che è un po 'confuso poiché sembra che /usr/local/mariadb/data/mariadb.socksia il posto effettivo (almeno sulla mia macchina)

  3. Mi chiedo dove posso configurare /usr/local/mariadb/data/mariadb.sockin /tmp/mysql.sockmodo che sia effettivamente in modo da poter utilizzare le impostazioni predefinite invece di dover modificare il mio .my.cnf(ma ora sono troppo stanco per capirlo ...)

  4. Ad un certo punto ho anche fatto le cose menzionate in altre risposte prima di arrivare a questo.


2

Dovrai eseguire mysql_install_db- il modo più semplice è se ti trovi nella directory di installazione:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

In alternativa, puoi inserire mysql_install_dbun basedirparametro come il seguente:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Ho affrontato lo stesso problema sul mio Mac e l'ho risolto seguendo i seguenti tutorial

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Ma non dimenticare di uccidere o disinstallare la vecchia versione prima di continuare.

comandi:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Spiega con alcuni brevi esempi in che modo il link che hai fornito ti ha aiutato. I collegamenti possono scomparire e quindi questo può essere un motivo per cui la tua risposta potrebbe essere eliminata.
Kurt Van den Branden

2

Dopo un riavvio non sono riuscito a connettermi con il locale mariadb, una ricerca mi ha portato anche in questa pagina e volevo condividere con voi la mia soluzione.

Ho notato che manca la directory my.cnf.d in / usr / local / etc /.

Questo è un bug noto con homebrew che viene descritto e risolto lì. https://github.com/Homebrew/homebrew-core/issues/36801

modo veloce per risolvere: mkdir /usr/local/etc/my.cnf.d


Questo ha funzionato per me. Impossibile connettersi a mariadb locale dopo brew updatee riavviare. brew services listil risultato mostrava lo stato mariadb startedin giallo. Grazie per il consiglio.
nterms

1

Quando eseguo mysql_secure_installation e inserisco la nuova password ho ottenuto:


Errore: impossibile connettersi al server MySQL locale tramite il socket "/tmp/mysql.sock" (2)


Ho notato quando ho provato quanto segue da questa risposta :

netstat -ln | grep mysql

Non ha restituito nulla e ho pensato che significa che non c'era un file .sock.

Quindi, ho aggiunto quanto segue al mio file my.cnf (o in /etc/my.cnf o nel mio caso, /usr/local/etc/my.cnf ).

Sotto:

[mysqld]
socket=/tmp/mysql.sock

Sotto:

[client]
socket=/tmp/mysql.sock

Questo era basato su questo post .

Quindi interrompere / avviare di nuovo mysql e riprovare mysql_secure_installation che finalmente mi ha permesso di inserire la mia nuova password di root e continuare con altre preferenze di configurazione.

Spero che questo aiuti qualcuno. Amico, odio questa roba ...


0

solo per completare questo thread. quindi MAMP (PRO) è usato abbastanza spesso

il percorso qui è

/Applications/MAMP/tmp/mysql/mysql.sock

0

Ho avviato manualmente mysql nel pannello delle preferenze di sistema inizializzando il database e quindi avviandolo. Questo ha risolto il mio problema.


0

Nel mio caso, il colpevole è stato trovato nei file di registro:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Quindi ho rinominato ib_logfile0per eliminare l'errore (ho dovuto fare lo stesso con in ib_logfile1seguito).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Ho avuto lo stesso problema. Dopo aver provato tutti questi metodi senza successo, ho fatto quanto segue:

tail -f the-mysql-or-maria-db-error-file.err

in un'altra console:

brew services restart mariadb

Ho visto il seguente errore:

"Ripristino da arresto anomalo di MAC HOMEBREW non riuscito. Correggi il problema (se, ad esempio, si tratta di un errore di memoria insufficiente) e riavvia, oppure elimina tc log e avvia mysqld con"

Quindi ho cambiato l' tc.logestensione tc.log.txte ho riavviato mariadb

brew services restart mariadb

e fatto!



0

Per me, l'avevo installato mariadbmolto tempo fa, quindi installato mysql@5.7.

Quando ho eseguito mysql -uroot, ottengo l'errore: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Leggere le risposte:

  • Ho disinstallato mariadb
  • Eliminata la cartella /usr/local/var/mysql
  • Ha eseguito il comando mysqld --initialize

Poi sono stato in grado di farlo mysql -uroot -p


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.