Moja težava se je začela s tem, da se nisem mogel več prijaviti kot root v svoji namestitvi mysql. Poskušal sem zagnati mysql brez vklopljenih gesel... vendar kadar koli sem zagnal ukaz
# mysqld_safe --skip-grant-tables &
se mi nikoli ni vrnil poziv. Poskušal sem slediti [tem navodilom za obnovitev gesla] (http://www.cyberciti.biz/tips/recover-mysql-root-password.html).
Zaslon je videti takole:
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
in ne dobim poziva za začetek vnosa ukazov SQL za ponastavitev gesla.
Ko ga ugasnem s pritiskom CTRL + C, dobim naslednje sporočilo:
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!
Če ukaz ponovim in ga pustim dovolj dolgo, dobim naslednjo serijo sporočil:
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#
Toda če se nato poskušam prijaviti kot root z ukazom:
# mysql -u root
dobim naslednje sporočilo o napaki:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Preveril sem in datoteka /var/run/mysqld/mysqld.sock
ne obstaja. Mapa obstaja, datoteka pa ne.
Prav tako ne vem, ali to pomaga ali ne, vendar sem pognal find / -name mysqld
in dobil sem:
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
Sem novinec v Linuxu in MySQL, zato ne vem, ali je to normalno ali ne. Vendar sem vključil te informacije samo v primeru, da bi pomagale.
Končno sem se odločil, da odstranim in ponovno namestim mysql.
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
Po ponovni namestitvi vseh paketov v enakem vrstnem redu kot zgoraj sem med namestitvijo phpmyadmina dobil enako napako:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Zato sem ponovno poskusil odstraniti/novo namestiti. Tokrat sem po odstranitvi paketov tudi ročno preimenoval vse datoteke in imenike mysql v mysql.bad
na njihovih lokacijah.
/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
Nato sem poskušal ponovno namestiti paketa mysql-server
in mysql-client
. Vendar sem opazil, da me ne pozove k vpisu gesla. Ali ne bi moralo vprašati za geslo administratorja?
Če želite poiskati vse vtičnice v sistemu, zaženite:
sudo find / -type s
Moj strežniški sistem Mysql je imel odprto vtičnico na naslovu /var/lib/mysql/mysql.sock
Ko ugotovite, kje je odprta vtičnica, dodajte ali uredite vrstico v datoteko /etc/my.cnf s potjo do datoteke vtičnice:
socket=/var/lib/mysql/mysql.sock
Včasih zagonska skripta sistema, ki je zagnala izvršilno datoteko ukazne vrstice, določi zastavico --socket=path
. Ta zastavica lahko prekrije lokacijo v datoteki my.cnf, zaradi česar vtičnica ne bo najdena tam, kjer je navedeno v datoteki my.cnf. Ko boste poskušali zagnati odjemalca ukazne vrstice mysql, bo ta prebral datoteko my.cnf, da bi našel vtičnico, vendar je ne bo našel, ker se razlikuje od mesta, kjer jo je ustvaril strežnik. Če vam ni pomembno, kje se nahaja vtičnica, bi moralo delovati samo spreminjanje my.cnf, da se ujema.
Nato ustavite proces mysqld. Način, kako to storite, se razlikuje glede na sistem.
Če ste super uporabnik v sistemu Linux, poskusite z enim od naslednjih načinov, če ne poznate posebne metode, ki jo uporablja vaša namestitev Mysql:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -u root -p shutdown
pkill -9 mysqld
pgrep mysql
ali ps aux | grep mysql | grep -v grep
4969
, ga zaključite z kill -9 4969
Ko to storite, boste morda želeli poiskati datoteko pid v /var/run/mysqld/
in jo izbrisati
Prepričajte se, da so dovoljenja na vtičnici takšna, da lahko uporabnik mysqld, ki se izvaja kot vtičnica, bere/pisuje vanjo. Enostaven preizkus je, da ga odprete za popolno branje/pisanje in preverite, ali še vedno deluje:
chmod 777 /var/run/mysqld/mysqld.sock
Če to odpravi težavo, lahko po potrebi prilagodite dovoljenja in lastništvo vtičnice glede na varnostne nastavitve.
Prav tako mora biti imenik, v katerem se nahaja vtičnica, dostopen uporabniku, ki izvaja proces mysqld.
Rešitev je veliko lažja.
mysql.sock
. V mojem primeru je bila v datoteki /opt/lampp/var/mysql/mysql.sock
sudo Nautilus
mysqld.sock
, nato desno kliknite na datoteko in jo *izrežite/var/run
in ustvarite mapo z imenom mysqld
ter jo vpišitemysqld.sock
na naslovu /var/run/mysqld/mysqld.sock
:)Soočil sem se z isto napako in ugotovil, da je bila posledica nadgradnje paketov, Torej po ponovnem zagonu sistema sem odpravil napako.
Mislim, da se je napaka pojavila zaradi posodobitve knjižnic sql/paketov, zato poskusite to, če opravljate nadgradnjo :)