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
mysql
programma. Een ps aux | grep mysql
laat zien dat de server actief is, en
stat /tmp/mysql.sock
bevestigt dat de socket bestaat. Verder, als ik open a
debugger in except
clausule 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 dtruss
reproduceerde 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.1
produceert 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.1
Werkt 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 mysql
uit.
$ 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_config
uit 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 HOST
gewijzigd van localhost
in 127.0.0.1
en 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:
- Systeem opnieuw opstarten
- mysql.server start
- 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 start
de 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.
- 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 localhost
in 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.sock
bestand. 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 /tmp
map. Zorg ervoor dat /tmp
de 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.1
kan 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?
- gebruiker () rapporten hoe U probeerde te verifiëren in MySQL
- current_user () Rapporten hoe u mocht authenticeren in MySQL
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.sock
bestand 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 mysqld
niet meer actief was (ik gebruik Mac OSX). Ik heb het opnieuw opgestart en de fout is verdwenen.
Ik kwam erachter dat mysqld
grotendeels 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
iotop
u 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 mysqld
uit te voeren.
Dit was wat niet voor mij werkte op Mac.
Als het niet werkt, ga dan naar /usr/local/var/mysql/<your_name>.err
om 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.cnf
en 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.
- Wijzig het socketpad in /etc/my.cnf (omdat ik herhaaldelijk fouten ontving met /TMP/MYSQL.SOCK) REFERENTIE OM HET SETOPPAD TE VERANDEREN
- 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