Sorunum, mysql kurulumumda artık root olarak oturum açamamamla başladı. Mysql'i şifreler açık olmadan çalıştırmayı deniyordum... ama ne zaman şu komutu çalıştırsam
# mysqld_safe --skip-grant-tables &
İstemi asla geri alamazdım. Şifreyi kurtarmak için bu talimatları](http://www.cyberciti.biz/tips/recover-mysql-root-password.html) izlemeye çalışıyordum.
Ekran bu şekilde görünüyor:
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
ve şifreyi sıfırlamak için SQL komutlarını yazmaya başlamak için bir istem alamıyorum.
Lt;kbd>CTRL + C tuşlarına basarak öldürdüğümde aşağıdaki mesajı alıyorum:
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!
Komutu tekrar dener ve yeterince uzun süre beklersem, aşağıdaki mesaj dizisini alıyorum:
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#
Ama sonra root olarak giriş yapmaya çalışırsam:
# mysql -u root
Aşağıdaki hata mesajını alıyorum:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Kontrol ettim ve `/var/run/mysqld/mysqld.sock' dosyası mevcut değil. Klasör var ama dosya yok.
Ayrıca, bunun yardımcı olup olmadığını bilmiyorum, ancak find / -name mysqld
çalıştırdım ve sonuç geldi:
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
Linux ve MySQL'de yeniyim, bu yüzden bunun normal olup olmadığını bilmiyorum. Ama belki yardımı olur diye bu bilgiyi ekliyorum.
Sonunda mysql'i kaldırıp yeniden yüklemeye karar verdim.
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
Tüm paketleri yukarıdaki gibi aynı sırayla yeniden yükledikten sonra, phpmyadmin yüklemesi sırasında aynı hatayı aldım:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Bu yüzden kaldırmayı/yeniden yüklemeyi tekrar denedim. Bu sefer, paketleri kaldırdıktan sonra, tüm mysql dosya ve dizinlerini ilgili konumlarında manuel olarak mysql.bad
olarak yeniden adlandırdım.
/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
Sonra mysql-server
ve mysql-client
ı yeniden yüklemeyi denedim. Ama fark ettim ki benden bir şifre istemiyor. Yönetici şifresi sorması gerekmiyor mu?
Sisteminizdeki tüm soket dosyalarını bulmak için çalıştırın:
sudo find / -type s
Mysql sunucu sistemimde /var/lib/mysql/mysql.sock
adresinde açık bir soket vardı
Soketin nerede açıldığını bulduktan sonra, /etc/my.cnf dosyanıza soket dosyasının yolunu içeren satırı ekleyin veya düzenleyin:
socket=/var/lib/mysql/mysql.sock
Bazen komut satırı çalıştırılabilir dosyasını başlatan sistem başlangıç betiği `--socket=path' bayrağını belirtir. Bu bayrak my.cnf konumunu geçersiz kılabilir ve bu da my.cnf dosyasının olması gerektiğini belirttiği yerde bir soket bulunamamasına neden olur. Daha sonra mysql komut satırı istemcisini çalıştırmaya çalıştığınızda, soketi bulmak için my.cnf dosyasını okuyacak, ancak sunucunun oluşturduğu yerden farklı olduğu için bulamayacaktır. Bu nedenle, soketin nerede bulunduğunu önemsemediğiniz sürece, my.cnf dosyasını eşleşecek şekilde değiştirmek işe yarayacaktır.
Ardından, mysqld işlemini durdurun. Bunu nasıl yapacağınız sisteme göre değişecektir.
Eğer linux sisteminde süper kullanıcı iseniz, Mysql kurulumunuzun kullandığı özel yöntemi bilmiyorsanız aşağıdakilerden birini deneyin:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -u root -p shutdown
pkill -9 mysqld
pgrep mysql
veya ps aux | grep mysql | grep -v grep
ile bulun4969
olduğunu varsayarak kill -9 4969
ile sonlandırınBunu yaptıktan sonra `/var/run/mysqld/' içinde bir pid dosyası aramak ve onu silmek isteyebilirsiniz
Soketinizdeki izinlerin mysqld kullanıcısının soketi okuyabileceği/yazabileceği şekilde olduğundan emin olun. Kolay bir test, tam okuma/yazmaya açmak ve hala çalışıp çalışmadığına bakmaktır:
chmod 777 /var/run/mysqld/mysqld.sock
Bu sorunu çözerse, güvenlik ayarlarınıza göre soketin izinlerini ve sahipliğini gerektiği gibi uyarlayabilirsiniz.
Ayrıca, soketin bulunduğu dizinin mysqld işlemini çalıştıran kullanıcı tarafından erişilebilir olması gerekir.
Çözüm çok daha kolay.
mysql.sock
dosyanızın nerede olduğunu (Terminal'de "sudo find / -type s" ile) bulmanız gerekir. Benim durumumda /opt/lampp/var/mysql/mysql.sock
içindeydi.sudo Nautilus
mysql.sock
dosyanızın bulunduğu yere gidinmysqld.sock
olarak yeniden adlandırın, ardından dosyaya sağ tıklayın ve Kesdizinine gidin ve
mysqld` adında bir klasör oluşturun ve içine girin/var/run/mysqld/mysqld.sock
adresinde bir mysqld.sock
dosyanız olacak :)Aynı hatayla karşılaştım ve bunun paketlerin yükseltilmesinden kaynaklandığını buldum, Bu yüzden sistemimi yeniden başlattıktan sonra hatayı çözdüm.
Sanırım sql kütüphaneleri / paketleri güncellemesi nedeniyle bu hata oluştu, Bu yüzden bazı yükseltmeler yapıyorsanız bunu deneyin :)