Mijn probleem begon met het feit dat ik niet meer als root kon inloggen op mijn mysql installatie. Ik probeerde mysql te draaien zonder wachtwoorden aan te zetten... maar telkens als ik het commando
# mysqld_safe --skip-grant-tables &
kreeg ik nooit de prompt terug. Ik probeerde deze instructies om het wachtwoord te herstellen te volgen.
Het scherm ziet er gewoon zo uit:
root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
en ik krijg geen prompt om de SQL commando's te typen om het wachtwoord te resetten.
Wanneer ik het stopzet door op CTRL + C te drukken, krijg ik de volgende boodschap:
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
Als ik het commando opnieuw probeer en lang genoeg laat staan, krijg ik wel de volgende reeks boodschappen:
root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
[1]+ Done mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#
Maar als ik dan probeer in te loggen als root door te doen:
# mysql -u root
krijg ik de volgende foutmelding:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Ik heb gecontroleerd en /var/run/mysqld/mysqld.sock
bestand bestaat niet't. De map wel, maar het bestand niet.
Ook, ik weet niet of dit helpt of niet, maar ik rende find / -name mysqld
en het kwam met:
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
Ik ben nieuw bij Linux en MySQL, dus ik weet niet of dit normaal is of niet. Maar ik'ben deze info aan het toevoegen voor het geval het helpt.
Ik heb eindelijk besloten om mysql te verwijderen en opnieuw te installeren.
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
Nadat ik alle pakketten opnieuw had geïnstalleerd in dezelfde volgorde als hierboven, tijdens de phpmyadmin installatie, kreeg ik dezelfde foutmelding:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Dus probeerde ik opnieuw te de-installeren/herinstalleren. Deze keer, nadat ik de pakketten had verwijderd, heb ik ook handmatig alle mysql bestanden en directories hernoemd naar mysql.bad
op hun respectievelijke locaties.
/var/lib/mysql
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql
Daarna heb ik geprobeerd om mysql-server
en mysql-client
opnieuw te installeren. Maar ik'heb gemerkt dat het me niet om een wachtwoord vraagt. Wordt het niet verondersteld om een admin wachtwoord te vragen?
Om alle socket bestanden op uw systeem te vinden, draai:
sudo find / -type s
Mijn Mysql server systeem had de socket open op /var/lib/mysql/mysql.sock
Als je eenmaal hebt gevonden waar de socket wordt geopend, voeg dan de regel toe aan je /etc/my.cnf bestand met het pad naar het socket bestand:
socket=/var/lib/mysql/mysql.sock
Soms specificeert het systeem startup script dat de command line executable heeft gestart een vlag --socket=path
. Deze vlag kan de my.cnf locatie overschrijven, en dat zou resulteren in een socket die niet gevonden wordt waar het my.cnf bestand aangeeft dat hij zou moeten zijn. Als je dan probeert om de mysql command line client uit te voeren, zal deze my.cnf lezen om de socket te vinden, maar hij zal hem niet vinden omdat hij afwijkt van waar de server er een heeft aangemaakt. Dus, tenzij het je uitmaakt waar de socket zich bevindt, zou het gewoon moeten werken om de my.cnf aan te passen.
Stop vervolgens het mysqld proces. Hoe je dit doet zal per systeem verschillen.
Als je's super gebruiker bent in het linux systeem, probeer dan een van de volgende als je niet's weet welke specifieke methode je Mysql setup gebruikt:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -u root -p shutdown
pkill -9 mysqld
pgrep mysql
of ps aux | grep mysql | grep -v grep
4969
is, beëindig het met kill -9 4969
Nadat u dit gedaan heeft, kunt u op zoek gaan naar een pid-bestand in /var/run/mysqld/
en deze verwijderen
Zorg ervoor dat de rechten op de socket zodanig zijn dat de gebruiker waarmee mysqld draait, kan lezen/schrijven. Een gemakkelijke test is om hem open te stellen voor volledig lezen/schrijven en te kijken of hij dan nog werkt:
chmod 777 /var/run/mysqld/mysqld.sock
Als dat het probleem oplost, kan je de permissies en het eigendom van de socket aanpassen zoals nodig, gebaseerd op je veiligheidsinstellingen.
Ook moet de directory waar de socket in zit bereikbaar zijn voor de gebruiker die het mysqld proces draait.
De oplossing is veel eenvoudiger.
mysql.sock
bestand zich bevindt. In mijn geval stond het in /opt/lampp/var/mysql/mysql.sock
sudo Nautilus
mysql.sock
bestand zich bevindtmysqld.sock
en klik met de rechter muisknop op het bestand en Snij het/var/run
en maak een map aan genaamd mysqld
en voer deze inmysqld.sock
bestand in /var/run/mysqld/mysqld.sock
:)Ik had dezelfde fout en ontdekte dat het te wijten was aan het upgraden van pakketten, dus na het herstarten van mijn systeem loste ik de fout op.
Ik denk dat als gevolg van sql bibliotheken / packages update die fout opgetreden, Dus probeer dit als je bezig bent met een upgrade :)