Mit problem startede med at jeg ikke længere kunne logge ind som root på min mysql-installation. Jeg forsøgte at køre mysql uden password slået til... men når jeg kørte kommandoen
# mysqld_safe --skip-grant-tables &
Jeg ville aldrig få prompten tilbage. Jeg forsøgte at følge disse instruktioner for at gendanne adgangskoden.
Skærmbilledet ser bare sådan her ud:
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
og jeg får ikke en prompt til at begynde at skrive SQL-kommandoerne for at nulstille adgangskoden.
Når jeg dræber den ved at trykke på CTRL + C, får jeg følgende besked:
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!
Hvis jeg prøver kommandoen igen og lader den stå længe nok, får jeg følgende række af meddelelser:
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#
Men hvis jeg så forsøger at logge ind som root ved at gøre:
# mysql -u root
får jeg følgende fejlmeddelelse:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Jeg har kontrolleret, og filen /var/run/mysqld/mysqld.sock
eksisterer ikke. Mappen gør det, men ikke filen.
Desuden ved jeg ikke, om det hjælper eller ej, men jeg kørte find / -name mysqld
og det kom op med:
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
Jeg er ny til Linux og MySQL, så jeg ved ikke, om det er normalt eller ej. Men I'm inkludere denne info bare i tilfælde af at det hjælper.
Jeg besluttede mig endelig for at afinstallere og geninstallere mysql.
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
Efter at have geninstalleret alle pakker igen i samme rækkefølge som ovenfor, fik jeg den samme fejl under phpmyadmin-installationen:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Så jeg prøvede igen at afinstallere/geninstallere. Denne gang, efter at jeg afinstallerede pakkerne, omdøbte jeg også manuelt alle mysql-filer og mapper til mysql.bad
på deres respektive steder.
/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
Derefter forsøgte jeg at geninstallere mysql-server
og mysql-client
igen. Men jeg har bemærket, at den ikke beder mig om et password. Er det ikke meningen at den skal spørge efter et admin password?
Du kan finde alle socket-filer på dit system ved at køre:
sudo find / -type s
Mit Mysql-server system havde socket åbnet på /var/lib/mysql/mysql.sock
Når du har fundet ud af, hvor socketfilen er åbnet, skal du tilføje eller redigere linjen til din /etc/my.cnf-fil med stien til socketfilen:
socket=/var/lib/mysql/mysql.sock
Nogle gange angiver det script til opstart af systemet, der startede den eksekverbare kommandolinje, et flag --socket=path
. Dette flag kan tilsidesætte my.cnf-placeringen, og det vil resultere i, at en socket ikke findes der, hvor my.cnf-filen angiver, at den skal være. Når du så forsøger at køre mysql-kommandolinjeklienten, vil den læse my.cnf for at finde socket'en, men den vil ikke finde den, da den afviger fra det sted, hvor serveren oprettede en. Så medmindre du er ligeglad med hvor socket'en befinder sig, bør det bare være nok at ændre my.cnf til at matche.
Derefter skal du stoppe mysqld-processen. Hvordan du gør dette, varierer fra system til system.
Hvis du er superbruger i linux-systemet, kan du prøve en af følgende, hvis du ikke kender den specifikke metode, som din Mysql-opsætning bruger:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -u root -p shutdown
pkill -9 mysqld
pgrep mysql
eller ps aux | grep mysql | grep -v grep
4969
afslut med kill -9 4969
Når du har gjort dette, skal du måske kigge efter en pid-fil i /var/run/mysqld/
og slette den
Sørg for at tilladelserne på din socket er sådan, at den bruger mysqld kører som kan læse/skrive på den. En nem test er at åbne den op til fuld læse/skriveadgang og se, om den stadig virker:
chmod 777 /var/run/mysqld/mysqld.sock
Hvis det løser problemet, kan du tilpasse tilladelserne og ejerskabet til socket efter behov baseret på dine sikkerhedsindstillinger.
Desuden skal den mappe, som socket'en befinder sig i, kunne nås af brugeren, der kører mysqld-processen.
Løsningen er meget nemmere.
mysql.sock
-fil er placeret. I mit tilfælde var den i /opt/lampp/var/mysql/mysql.sock
sudo Nautilus
mysql.sock
-fil er placeretmysqld.sock
og højreklik derefter på filen og Klip den/var/run
og opret en mappe kaldet mysqld
og indtast denmysqld.sock
fil på /var/run/mysqld/mysqld/mysqld.sock
:)Jeg stod over for samme fejl og fandt ud af, at det skyldtes opgradering af pakker, så efter genstart af mit system løste jeg fejlen.
Jeg tror på grund af sql-biblioteker / pakker opdatering, at fejlen opstod, Så prøv dette, hvis du laver nogle opgradering :)