MySQL "Error 2002 (HY000): Can't connect to local MySQL server" Hatası Çözümü

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 mysql

veya

service mysql status

Servis çalışmıyorsa başlatmayı deneyin:

sudo systemctl start mysql

Eğer başlatma sırasında hata alıyorsanız, logları inceleyin:

sudo tail -f /var/log/mysql/error.log

Loglarda 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.sock

Eğ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.cnf

Varsayı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.1

Bu ç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 mysql

5. İ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/mysqld

Ardından servisi yeniden başlatın.

6. Disk Alanını Kontrol Edin

MySQL veritabanı dizininde yeterli alan olup olmadığını kontrol edin:

df -h

Eğ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!

← Tüm yazılar