MySQL ile çalışırken "Error 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)" gibi bir hatayla karşılaştığınızda panik yapmayın. Bu, MySQL dünyasında en sık rastlanan sorunlardan biridir ve genellikle birkaç basit adımla çözülür. Hatanın temelinde, MySQL istemcisinin sunucuya bağlanamaması yatar. Bunun birden çok nedeni olabilir: MySQL servisi çalışmıyordur, socket dosyası yanlış yerde veya izinler sorunludur, ya da bağlantı ayarları karışmıştır. Gelin, bu hatayı adım adım nasıl çözeceğinizi anlatalım.
Hatanın Yaygın Nedenleri
Hatanın kaynağını anlamak için önce olası nedenleri sıralayalım:
- MySQL servisi çalışmıyor: Sunucuda mysqld süreci aktif değilse bağlantı kuramazsınız.
- Socket dosyası eksik veya yanlış konumda: Varsayılan olarak MySQL, Unix soketi üzerinden bağlantıyı /var/run/mysqld/mysqld.sock üzerinden yapar. Dosya yoksa veya yolu değişmişse hata alırsınız.
- localhost vs 127.0.0.1 farkı: PHP gibi dillerde localhost yazmak Unix soketi kullanmaya, 127.0.0.1 yazmak ise TCP/IP bağlantısına yönlendirir. Bazen biri çalışırken diğeri çalışmayabilir.
- İzin sorunları: MySQL kullanıcısının socket dosyasına veya /var/run/mysqld dizinine yazma izni yoksa servis başlamaz.
- my.cnf yapılandırma hataları: bind-address, port veya socket yolu yanlış ayarlanmış olabilir.
- Disk alanı doluluğu: MySQL veritabanı dizininde yer kalmamışsa servis çökebilir.
Adım Adım Çözüm
1. MySQL Servis Durumunu Kontrol Edin
Öncelikle MySQL servisinin çalışıp çalışmadığını kontrol edin. Terminale şu komutu yazın:
systemctl status mysqlveya
service mysql statusServis çalışmıyorsa başlatmayı deneyin:
sudo systemctl start mysqlEğer başlatma sırasında hata alıyorsanız, logları inceleyin:
sudo tail -f /var/log/mysql/error.logLoglarda genellikle sorunun kaynağını gösteren net bir mesaj bulunur.
2. Socket Dosyasını Doğrulayın
Socket dosyasının varlığını kontrol edin:
ls -l /var/run/mysqld/mysqld.sockEğer dosya yoksa, MySQL sunucusu başlamamış veya socket yolu değiştirilmiş olabilir. my.cnf dosyasında socket yolunu görmek için:
grep socket /etc/mysql/my.cnfVarsayılan yol /var/run/mysqld/mysqld.sock'tur. Eğer farklı bir yol belirtilmişse, bağlantıda o yolu kullanmanız gerekir.
3. Bağlantı Türünü Değiştirin
Eğer localhost ile bağlanırken hata alıyorsanız, 127.0.0.1 ile deneyin. Çünkü localhost genelde Unix soketi kullanırken, 127.0.0.1 TCP/IP üzerinden bağlanır. Örneğin:
mysql -u root -p -h 127.0.0.1Bu çalışıyorsa, bağlantı yönteminizi değiştirmeniz veya socket dosyasını düzeltmeniz gerekir.
4. my.cnf Ayarlarını Kontrol Edin
Yapılandırma dosyasını açın:
sudo nano /etc/mysql/my.cnfŞu parametrelerin doğru olduğundan emin olun:
- bind-address: Genellikle 127.0.0.1 veya 0.0.0.0 olarak ayarlanır. Eğer sadece localhost bağlantısı istiyorsanız 127.0.0.1 bırakın.
- port: Varsayılan 3306'dır. Değişmediyse sorun yok.
- socket: my.cnf'de belirtilen yol ile gerçek socket dosyasının yolu aynı olmalıdır.
Değişiklik yaptıktan sonra servisi yeniden başlatın:
sudo systemctl restart mysql5. İzinleri ve Dizin Varlığını Kontrol Edin
/var/run/mysqld dizini mevcut değilse oluşturun ve doğru izinleri verin:
sudo mkdir -p /var/run/mysqld sudo chown mysql:mysql /var/run/mysqld sudo chmod 755 /var/run/mysqldArdından servisi yeniden başlatın.
6. Disk Alanını Kontrol Edin
MySQL veritabanı dizininde yeterli alan olup olmadığını kontrol edin:
df -hEğer disk doluysa, gereksiz dosyaları temizleyin veya veritabanını başka bir bölüme taşıyın.
Alternatif Çözümler
Yukarıdaki adımlar işe yaramazsa, MySQL'i tamamen kaldırıp yeniden yüklemeyi düşünebilirsiniz. Ancak öncesinde verilerinizi yedeklemeyi unutmayın. Ayrıca, bazı durumlarda AppArmor veya SELinux gibi güvenlik modülleri MySQL socket'ine erişimi engelleyebilir. Bu durumda ilgili politikaları kontrol etmeniz gerekir.
Unutmayın, Error 2002 genellikle küçük bir yapılandırma hatasından kaynaklanır. Adımları sırasıyla uyguladığınızda sorunu çözmeniz çok uzun sürmez. Eğer hala çözemediyseniz, loglardaki hatayı dikkatlice okuyun ve arama motorlarında bu hatayla ilgili benzer sorunları araştırın. İyi şanslar!