Kan geen verbinding maken met lokale MySQL-server via socket ‘/tmp/mysql.sock

Toen ik tijdens mijn testsuite probeerde verbinding te maken met een lokale MySQL-server,
mislukt met de fout:

OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

Ik kan echter te allen tijde verbinding maken met MySQL door de opdrachtregel uit te voeren
mysqlprogramma. Een ps aux | grep mysqllaat zien dat de server actief is, en
stat /tmp/mysql.sockbevestigt dat de socket bestaat. Verder, als ik open a
debugger in exceptclausule van die uitzondering, ik ben in staat om betrouwbaar verbinding te maken
met exact dezelfde parameters.

Dit probleem reproduceert redelijk betrouwbaar, maar het lijkt niet 100% te zijn,
want elke keer in een blauwe maan draait mijn testsuite in feite zonder
deze fout raken. Toen ik probeerde te draaien met sudo dtrussreproduceerde het niet.

Alle klantcode is in Python, hoewel ik niet kan bedenken hoe dat relevant zou zijn.

Overschakelen naar het gebruik van host 127.0.0.1produceert de fout:

DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)

Antwoord 1, autoriteit 100%

sudo /usr/local/mysql/support-files/mysql.server start 

Dit werkte voor mij. Als dit echter niet werkt, zorg er dan voor dat mysqld actief is en probeer verbinding te maken.


Antwoord 2, autoriteit 71%

Het relevante gedeelte van de MySQL-handleiding is hier. Ik zou beginnen met het doorlopen van de foutopsporingsstappen die daar worden vermeld.

Onthoud ook dat localhost en 127.0.0.1 niet hetzelfde zijn in deze context:

  • Als host is ingesteld op localhost, dan wordt een socket of buis gebruikt.
  • Als host is ingesteld op 127.0.0.1, dan wordt de client gedwongen om TCP / IP te gebruiken.

U kunt bijvoorbeeld controleren of uw database luistert naar TCP-verbindingen VI netstat -nlp. Het lijkt waarschijnlijk dat het luistert naar TCP-verbindingen omdat u dat zegt mysql -h 127.0.0.1Werkt prima. Om te controleren of u via contactdozen verbinding kunt maken met uw database, gebruikt u mysql -h localhost.

Als niets van dit helpt, moet u waarschijnlijk meer details over uw MySQL-configuratie plaatsen, precies hoe u de verbinding, enz.


Antwoord 3, Autoriteit 62%

Voor mij was het probleem dat ik MySQL-server niet draaide.
Voer eerst de server uit en voer vervolgens mysqluit.

$ mysql.server start
$ mysql -h localhost -u root -p

Antwoord 4, Autoriteit 18%

Ik heb dit gezien in mijn winkel wanneer mijn Devs een stapelbeheer als mamp geïnstalleerd heeft die is geïnstalleerd die vooraf is geconfigureerd met MySQL geïnstalleerd op een niet-standaard plaats.

op uw terminalgedrag

mysql_config --socket

Dat geeft u uw pad naar het sokkenbestand. Neem dat pad en gebruik het in uw databases Host Paramater.

Wat u hoeft te doen, is op uw

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
        'PORT': '',
    },
}

OPMERKING

voer ook which mysql_configuit als je op de een of andere manier meerdere exemplaren van de mysql-server op de computer hebt geïnstalleerd, dan maak je mogelijk verbinding met de verkeerde.


Antwoord 5, autoriteit 14%

Ik heb zojuist de HOSTgewijzigd van localhostin 127.0.0.1en het werkt prima:

# settings.py of Django project
...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '',
},
...

Antwoord 6, autoriteit 8%

Wanneer, als u uw daemon mysql verliest in mac OSx maar aanwezig is in een ander pad, bijvoorbeeld in private/var, voer dan het volgende commando uit

1)

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

2) herstart je verbinding met mysql met :

mysql -u username -p -h host databasename

werkt ook voor mariadb


Antwoord 7, autoriteit 6%

Voer de onderstaande cmd uit in terminal

/usr/local/mysql/bin/mysqld_safe

Start de machine vervolgens opnieuw op om van kracht te worden. Het werkt!!


Antwoord 8, autoriteit 5%

Na een paar van deze oplossingen geprobeerd te hebben en zonder succes, werkte dit voor mij:

  1. Systeem opnieuw opstarten
  2. mysql.server start
  3. Succes!

Antwoord 9, autoriteit 5%

Voor degenen die een upgrade van 5.7 naar 8.0 hebben uitgevoerd via homebrew: deze fout wordt waarschijnlijk veroorzaakt doordat de upgrade niet is voltooid. In mijn geval kreeg ik door mysql.server startde volgende foutmelding:

FOUT! De server is gestopt zonder het PID-bestand bij te werken

Vervolgens controleerde ik het logbestand via cat /usr/local/var/mysql/YOURS.err | tail -n 50, en vond het volgende:

InnoDB: Upgraden na een crash wordt niet ondersteund.

Als je in hetzelfde schuitje zit, installeer dan eerst [email protected]via homebrew, stop de server en start dan het 8.0-systeem opnieuw.

brew install [email protected]
/usr/local/opt/[email protected]/bin/mysql.server start
/usr/local/opt/[email protected]/bin/mysql.server stop

Dan,

mysql.server start

Hierdoor zou uw MySQL (8.0) weer werken.


Antwoord 10, autoriteit 4%

Controleer het aantal geopende bestanden voor het mysql-proces met de opdracht lsof.

Verhoog de limiet voor het openen van bestanden en voer het opnieuw uit.


Antwoord 11, autoriteit 4%

Dit kan een van de volgende problemen zijn.

  1. Onjuiste mysql-vergrendeling.
    oplossing: u moet de juiste mysql-socket vinden door,

mysqladmin -p variabelen | grep-socket

en zet het dan in je db-verbindingscode:

pymysql.connect(db='db', user='user', passwd='pwd', unix_socket="/tmp/mysql.sock")

/tmp/mysql.sock is het resultaat van grep

2.Onjuiste mysql-poort
oplossing: je moet de juiste mysql-poort vinden:

mysqladmin -p variables | grep port

en vervolgens in uw code:

pymysql.connect(db='db', user='user', passwd='pwd', host='localhost', port=3306)

3306 is de haven terug van de grep

Ik denk dat eerste optie zal uw probleem op te lossen.


Antwoord 12, Autoriteit 2%

Ik denk dat ik zag deze hetzelfde gedrag enige tijd geleden, maar kan me niet herinneren de details.
In ons geval, het probleem was het moment de TestRunner initialiseert gegevensbestandverbindingen opzichte van eerste databank interactie vereist, bijvoorbeeld door invoer van een module of een settings.py __init__.py.
Ik zal proberen om digg wat meer info, maar dit kan rinkelen al een bel voor uw zaak.


Antwoord 13, Autoriteit 2%

Zorg ervoor dat uw / etc / hosts heeft 127.0.0.1 localhostin het en het zou moeten werken prima


Antwoord 14, Autoriteit 2%

Ik heb twee sneaky vermoedens op dit één

VERMOEDEN # 1

Kijk naar de mogelijkheid om niet in staat om toegang te krijgen tot de /tmp/mysql.sockbestand. Toen ik setup MySQL databases, ik normaal gesproken laat de socket file site in /var/lib/mysql. Als u in te loggen op mysql als root@localhost, uw besturingssysteem sessie toegang nodig tot de /tmpmap. Zorg ervoor dat /tmpde juiste toegangsrechten in het besturingssysteem. Zorg er ook voor de sudo gebruiker kan altijd lezen bestand in /tmp.

VERMOEDEN # 2

Toegang mysql via 127.0.0.1kan tot verwarring leiden als je niet oplet. Hoe?

Vanuit de command line, als u verbinding met MySQL met een 127.0.0.1, kan het nodig zijn om de TCP / IP-protocol op te geven.

mysql -uroot -p -h127.0.0.1 --protocol=tcp

of probeer de DNS-naam

mysql -uroot -p -hDNSNAME

Hiermee wordt de omzeil ingelogd als root@localhost, maar zorg ervoor dat u root@'127.0.0.1'gedefinieerd hebt.

Voer de volgende keer dat u verbinding maakt met MySQL, voert u dit uit:

SELECT USER(),CURRENT_USER();

Wat geeft dit je?

Als deze functies met dezelfde waarden terugkeren, verbindt u en vereenvoudigt u en verifieert en verifieert u zoals verwacht. Als de waarden verschillend zijn, moet u mogelijk de bijbehorende gebruiker [email protected]maken.


Antwoord 15, Autoriteit 2%

Als u een foutmelding krijgt zoals hieronder:

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

VIND ENKEL JUISTE LOCATIE VAN DE MYSQLD.SOCK-bestand en voeg deze toe aan “Host”.

Zoals ik XAMPP op Linux gebruik, dus mijn mysqld.sockbestand is op een andere locatie. Dus het werkt niet voor ‘/var/run/mysqld/mysqld.sock

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'asd',
        'USER' : 'root',
        'PASSWORD' : '',
        'HOST' : '/opt/lampp/var/mysql/mysql.sock',
        'PORT' : ''
    }
}

Antwoord 16, autoriteit 2%

Heb hetzelfde probleem gehad. Het bleek dat mysqldniet meer actief was (ik gebruik Mac OSX). Ik heb het opnieuw opgestart en de fout is verdwenen.

Ik kwam erachter dat mysqldgrotendeels niet actief was vanwege deze link:
http://dev.mysql.com /doc/refman/5.6/en/can-not-connect-to-server.html

Let op de eerste tip!


Antwoord 17, autoriteit 2%

Ik moest alle instanties van mysql uitschakelen door eerst alle proces-ID’s te vinden:

ps aux | grep mysql

En dan ze afmaken:

kill -9 {pid}

Dan:

mysql.server start

Werkte voor mij.


Antwoord 18, autoriteit 2%

Bij mij was de mysql-server niet actief. Dus ik startte de mysql-server via

mysql.server start

dan

mysql_secure_installation

om de server te beveiligen en nu kan ik bezoeken
de MySQL-server via

mysql -u root -p

of

sudo mysql -u root -p

afhankelijk van uw installatie.


Antwoord 19

Controleer of uw mysql het maximale aantal verbindingen niet heeft bereikt, of niet in een soort opstartlus zit, zoals vrij vaak gebeurt als de instellingen in my.cnf onjuist zijn.

Gebruik ps aux | grep mysql om te controleren of de PID verandert.


Antwoord 20

Te lang online rondgekeken om niet bij te dragen. Nadat ik probeerde de mysql-prompt in te typen vanaf de opdrachtregel, bleef ik dit bericht ontvangen:

ERROR 2002 (HY000): Kan geen verbinding maken met lokale MySQL-server via socket ‘/tmp/mysql.sock’ (2)

Dit kwam doordat mijn lokale mysql-server niet meer actief was. Om de server opnieuw op te starten, navigeerde ik naar

shell> cd /user/local/bin

waar mijn mysql.server zich bevond. Typ vanaf hier gewoon:

shell> mysql.server start

Hiermee wordt de lokale mysql-server opnieuw gestart.

Van daaruit kunt u indien nodig het root-wachtwoord opnieuw instellen..

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;

Antwoord 21

De socket bevindt zich in /tmp. Op Unix-systeem, vanwege modi & eigendommen op /tmp, kan dit problemen veroorzaken. Maar zolang u ons vertelt dat u uw mysql-verbinding normaal KUNT gebruiken, denk ik dat het geen probleem is op uw systeem. Een eerste controle zou moeten zijn om mysql.sock naar een meer neutrale map te verplaatsen.

Het feit dat het probleem “willekeurig” (of niet elke keer) optreedt, laat me denken dat het een serverprobleem kan zijn.

  • Bevindt je /tmp zich op een standaard schijf, of op een exotische mount (zoals in het RAM) ?

  • Is je /tmp leeg?

  • Laat iotopu iets verkeerds zien wanneer u het probleem tegenkomt ?


Antwoord 22

# shell script ,ignore the first 
$ $(dirname `which mysql`)\/mysql.server start

Kan nuttig zijn.


Antwoord 23

Configureer uw DB-verbinding in het dialoogvenster ‘DB-verbindingen beheren’. Selecteer ‘Standaard (TCP/IP)’ als verbindingsmethode.

Zie deze pagina voor meer details
http://dev.mysql.com/doc/workbench /en/wb-manage-db-connections.html

Volgens deze andere paginaer wordt een socket-bestand gebruikt, zelfs als u localhost opgeeft.

Een Unix-socketbestand wordt gebruikt als u geen hostnaam opgeeft of als u:
specificeer de speciale hostnaam localhost.

Het laat ook zien hoe u uw server kunt controleren door deze opdrachten uit te voeren:

Als een mysqld-proces actief is, kunt u dit controleren door de
volgende commando’s. Het poortnummer of de bestandsnaam van de Unix-socket kan zijn:
anders in uw opstelling. host_ip vertegenwoordigt het IP-adres van de
machine waarop de server draait.

shell> mysqladmin version 
shell> mysqladmin variables 
shell> mysqladmin -h `hostname` version variables 
shell> mysqladmin -h `hostname` --port=3306 version 
shell> mysqladmin -h host_ip version 
shell> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version

Antwoord 24

in ubuntu14.04 kun je dit doen om dit probleem op te lossen.

zack@zack:~/pycodes/python-scraping/chapter5$ **mysqladmin -p variables|grep socket**
Enter password: 
| socket                                            | ***/var/run/mysqld/mysqld.sock***                                                                                            |
zack@zack:~/pycodes/python-scraping/chapter5$***ln -s  /var/run/mysqld/mysqld.sock /tmp/mysql.sock***
zack@zack:~/pycodes/python-scraping/chapter5$ ll /tmp/mysql.sock 
lrwxrwxrwx 1 zack zack 27 11月 29 13:08 /tmp/mysql.sock -> /var/run/mysqld/mysqld.sock=

Antwoord 25

Voor mij weet ik zeker dat MySQLD is gestart en de opdrachtregel MySQL kan goed werken. Maar de HTTPD-server toont het probleem (kan geen verbinding maken met MySQL via socket).

Ik begon de service met MySqld_Safe & Amp;

Ten slotte, ik vond dat ik de MySQLD-service met service MySqld Start start, er zijn problemen (Selinux-toestemmingsprobleem), en wanneer ik het Selinux-probleem oplost en start de MySQLD met “Service MySqld Start”, het probleem van de HTTPD-verbinding ” verdwijnen. Maar wanneer ik de MySQLD start met MySqld_Safe & AMP;, kan Mysqld worden bewerkt. (MySQL-client kan goed werken). Maar er zijn nog steeds probleem wanneer u verbinding maakt met HTTPD.


Antwoord 26

Als het aansluiting is, lees dit bestand

/etc/mysql/my.cnf

en kijk wat de standaardcontactdoos is. Het is een lijn zoals:

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

Maak nu een alias voor uw shell zoals:

alias mysql="mysql --socket=/var/run/mysqld/mysqld.sock"

Op deze manier heb je geen root-privileges nodig.


Antwoord 27

Probeer eenvoudigweg mysqlduit te voeren.

Dit was wat niet voor mij werkte op Mac.
Als het niet werkt, ga dan naar /usr/local/var/mysql/<your_name>.errom gedetailleerde foutlogboeken te bekijken.


Antwoord 28

MacOS Mojave 10.14.6 gebruiken voor MySQL 8.0.19 geïnstalleerd via Homebrew

  • RAN sudo find / -name my.cnf
  • Bestand gevonden op /usr/local/etc/my.cnf

werkte voor een tijd en uiteindelijk kwam de fout terug. Verwijderde de homebrew-versie van MySQL en installeerde het .DMG-bestand rechtstreeks van

Sindsdien verbindend Sindsdien.


Antwoord 29

In mijn geval, wat hielp bij het bewerken van het bestand /etc/mysql/mysql.conf.d/mysqld.cnfen vervang de regel:

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

met

socket      = /tmp/mysql.sock

Dan herstart ik de server en het werkte prima. Het grappige is dat als ik de lijn terugzet zoals het eerder was en opnieuw is opgestart, nog steeds werkte.


ANTWOORD 30

Ik had onlangs een soortgelijk probleem geconfronteerd. Ging door vele antwoorden. Ik heb het gewerkt aan de volgende stappen.

  1. Wijzig het socketpad in /etc/my.cnf (omdat ik herhaaldelijk fouten ontving met /TMP/MYSQL.SOCK) REFERENTIE OM HET SETOPPAD TE VERANDEREN
  2. MySQLD_SAFE uitvoeren om de server opnieuw te starten omdat het de aanbevolen manier is om opnieuw te starten in geval van fouten. Verwijzing naar mySqld_safe

Other episodes