İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Özel Ders Başvuru Ücretsiz ön görüşme Ana Sayfa

MySQL “Can’t connect to local MySQL server” Hatası Nasıl Çözülür?

mysql-cant-connect-to-local-mysql-server-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. Bu MySQL soket hatası ne anlama gelir?
  2. Önce MySQL servisinin çalıştığını nasıl kontrol edersin?
  3. localhost ve 127.0.0.1 neden farklı davranır?
  4. Soket yolunu yapılandırmadan nasıl karşılaştırırsın?
  5. Sunucu başlamıyorsa günlük ve kurulum çakışması nasıl incelenir?
  6. Hata ayıklama sırasını nasıl güvenli biçimde uygulamalısın?
  7. Sık Sorulan Sorular

MySQL “Can’t connect to local MySQL server” hatası, istemci programının yerel bilgisayardaki MySQL veya MariaDB sunucusuna ulaşamadığını gösterir. Çözüm için önce sunucu sürecinin çalışıp çalışmadığını kontrol etmeli, ardından bağlantının soket üzerinden mi yoksa TCP portu üzerinden mi kurulmaya çalıştığını incelemelisin.

Bu hata, SQL sorgusu çalıştırıldıktan sonra oluşan bir sorgu hatası değildir. İstemci, kullanıcı adı ve parola doğrulamasına geçmeden önce sunucuya bağlantı kuramadığı için işlem bu aşamada durur.

Bu MySQL soket hatası ne anlama gelir?

ERROR 2002, istemcinin yerel MySQL sunucusuna bağlantı kuramadığını ve özellikle Unix veya Linux sistemlerinde beklenen soket dosyasına ulaşamadığını belirtir. Hata mesajında görünen soket yolu, istemcinin sunucuyla iletişim kurmak için aradığı yerel bağlantı dosyasını gösterir. Sunucu çalışmıyor olabilir, istemci yanlış soket yolunu kullanıyor olabilir veya sunucu farklı bir bağlantı ayarıyla başlatılmış olabilir.

Soket, aynı bilgisayardaki istemci ile sunucu arasında iletişim kuran yerel bir dosya tabanlı bağlantı yöntemidir. Servis, MySQL sunucu sürecinin işletim sistemi tarafından başlatılıp durdurulabilen çalışma birimidir. Port ise TCP/IP bağlantılarında kullanılan numaralı iletişim noktasıdır. Soket yalnızca aynı bilgisayardaki bağlantılarda kullanılabilirken port, yerel veya uzak ağ bağlantılarında kullanılabilir.

MySQL istemcisi Unix ve Linux sistemlerinde localhost için çoğunlukla Unix soketini kullanır. 127.0.0.1 ise TCP/IP üzerinden aynı bilgisayara bağlanmayı belirtir. Windows'ta görülen ERROR 2003 ise genellikle istemcinin belirtilen sunucu ve TCP portuna bağlantı kuramadığını veya bağlantının reddedildiğini anlatır. Bu nedenle ERROR 2002'de soket ve servis durumunu, ERROR 2003'te ise sunucunun TCP bağlantılarını ve port ayarını incelemek gerekir. Ayrıntılar için MySQL bağlantı sorunları belgesine bakabilirsin.

Önce MySQL servisinin çalıştığını nasıl kontrol edersin?

Önce MySQL servisinin çalıştığını nasıl kontrol edersin?

Parola veya kullanıcı ayarlarını değiştirmeden önce MySQL sunucu sürecinin çalışıp çalışmadığını kontrol etmelisin. Sunucu çalışmıyorsa doğru parola girilmiş olsa bile istemci bağlantı kuramaz.

Linux'ta systemd kullanılıyorsa önce doğrudan bağlantı denemesi yap, ardından servisin durumunu kontrol et. Aşağıdaki örnekte Debian tabanlı kurulumlarda sık görülen mysql servis adı kullanılmıştır. Kurulumuna göre servis adı mysqld veya MariaDB için mariadb olabilir.

$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket ...

$ systemctl status mysql

$ sudo systemctl start mysql

$ mysql -u root -p
Enter password:
mysql>

Son satırdaki mysql> istemi, bağlantının kurulduğunu ve istemcinin SQL komutlarını kabul etmeye hazır olduğunu gösterir. systemctl status servisin mevcut durumunu gösterir, systemctl start ise çalışmayan servisi başlatmayı dener. MySQL belgelerinde servis adının kurulum platformuna göre değişebileceği belirtilir; bu yüzden komutu kendi sistemindeki birim adıyla çalıştırmalısın. MySQL systemd yönetimi bu komutların kullanımını açıklar.

Windows'ta Başlat menüsünden Hizmetler uygulamasını açarak MySQL veya MariaDB ile ilişkili servisin durumunu inceleyebilirsin. XAMPP kullanıyorsan XAMPP Kontrol Paneli'nde MySQL ya da MariaDB olarak görünen veritabanı bileşeninin çalışıp çalışmadığını kontrol et. Birden fazla MySQL, MariaDB veya XAMPP kurulumu varsa hangi sunucunun başlatıldığını ve istemcinin hangi kuruluma ait olduğunu ayrıca karşılaştırmalısın.

localhost ve 127.0.0.1 neden farklı davranır?

localhost ile 127.0.0.1 aynı bilgisayarı gösterse de istemcinin kullandığı bağlantı yöntemi farklı olabilir. Linux ve diğer Unix benzeri sistemlerde localhost çoğunlukla Unix soketi üzerinden bağlantı kurar. 127.0.0.1 ise TCP/IP kullanarak yerel makinenin loopback adresine bağlanır.

Soket, aynı bilgisayardaki istemci ile MySQL sunucusunun dosya sistemi üzerinden haberleşmesini sağlayan yerel bağlantı noktasıdır. TCP bağlantısında ise port, istemcinin hangi ağ hizmetine ulaşacağını belirleyen sayısal uç noktadır. Bu nedenle localhost denemesinde soket yolu, 127.0.0.1 denemesinde ise TCP bağlantısının portu ve sunucunun bu portu dinleyip dinlemediği incelenir. localhost için TCP kullanmak istersen bağlantı protokolünü açıkça belirtebilirsin.

mysql --host=localhost -u kullanici -p
mysql --host=127.0.0.1 --port=3306 -u kullanici -p
mysql --host=localhost --protocol=TCP -u kullanici -p

İlk komut soket bağlantısını, ikinci komut TCP bağlantısını sınar. Üçüncü komut ise localhost adını koruyarak TCP kullanımını zorlar. MySQL belgelerine göre Unix sistemlerinde localhost ile yapılan bağlantıda yalnızca port belirtmek TCP bağlantısına geçmek için yeterli olmayabilir; bunun için 127.0.0.1 veya --protocol=TCP kullanılmalıdır.

  • Yalnızca localhost başarısızsa istemcinin aradığı soket yolunu ve sunucunun oluşturduğu soket yolunu karşılaştır.
  • Yalnızca 127.0.0.1 başarısızsa TCP servisinin çalıştığını, doğru portun kullanıldığını ve sunucunun yerel TCP bağlantılarını kabul ettiğini kontrol et.
  • İki bağlantı da başarısızsa önce MySQL veya MariaDB servis durumunu, ardından hata günlüğünü incele.

Windows ortamında localhost davranışı kullanılan istemciye ve etkin bağlantı yöntemlerine göre named pipe, shared memory veya TCP ile ilişkili olabilir. Bu nedenle Windows'ta teşhis yaparken TCP kullanımını açıkça belirtmek ve portu ayrıca kontrol etmek daha anlaşılır sonuç verir.

Soket yolunu yapılandırmadan nasıl karşılaştırırsın?

Soket yolunu yapılandırmadan nasıl karşılaştırırsın?

Soket yolunu sabit bir varsayım olarak kabul etmek yerine istemcinin ve sunucunun hangi yapılandırma dosyalarını okuduğunu ve her iki tarafta hangi socket değerinin etkin olduğunu karşılaştırmalısın. Kurulum yöntemi, işletim sistemi, MySQL veya MariaDB seçimi ve sürüm, okunacak dosyaları ve yapılandırma bölümlerini değiştirebilir.

Önce ilgili programın yapılandırma arama sırasını gösteren yardım çıktısını al:

mysql --help --verbose
mysqld --verbose --help
mariadb --help --verbose
mariadbd --help --verbose

Çıktıda okunan dosyaların sırasını ve programın kullandığı seçenek gruplarını bul. Ardından istemci tarafında [client], sunucu tarafında ise kurulumuna uygun [mysqld], [mariadbd] veya [server] bölümlerindeki socket satırlarını karşılaştır. my_print_defaults gibi araçlar, belirli gruplardan etkin seçenekleri görmeyi de sağlar.

İstemci tarafı Sunucu tarafı ve sonraki adım
socket=... değerini gösterir. Sunucunun socket=... değeriyle aynı yolu gösteriyorsa bir sonraki bağlantı testine geç.
Farklı bir soket yolu arıyorsa İki yapılandırmadaki değerleri ve hangi dosyanın son olarak okunduğunu yeniden kontrol et.
Soket değeri görünmüyorsa Komut satırı seçeneklerini, ortam değişkenlerini ve sunucunun başlangıç seçeneklerini incele.

İstemci farklı bir dosyada bulunan yolu okuyor, sunucu ise başka bir dosyada farklı bir soket oluşturuyorsa ERROR 2002 ortaya çıkabilir. Bu durumda güvenlik izinlerini gevşetmek yerine etkin yapılandırma dosyalarını ve iki taraftaki socket değerlerini düzeltmeye odaklanmalısın.

Sunucu başlamıyorsa günlük ve kurulum çakışması nasıl incelenir?

Servis başlatma denemesi başarısız oluyorsa sorun, istemcinin bağlanmaya çalıştığı soketten önce sunucunun neden başlayamadığında aranmalıdır. Hata günlüğü; yapılandırma seçeneği, veri dizini, dosya izinleri, port kullanımı ve aynı veri dizinine erişen ikinci bir sunucu hakkında ayrıntı verir. MySQL'de hata günlüğünün hedefi log_error veya log-error ayarıyla belirlenebilir; dosya yolu kurulum ve yapılandırmaya göre değişebildiği için sabit bir konuma güvenmemelisin.

Linux'ta günlükleri nasıl kontrol edersin?

Önce hangi servis biriminin kullanıldığını kontrol et. Dağıtıma ve kuruluma göre ad Linux'ta mysql, mysqld veya mariadb olabilir. Servisin başarısız durumunu ve aynı başlatma denemesine ait günlükleri şu biçimde inceleyebilirsin:

sudo systemctl status mysql
sudo journalctl -u mysql -b --no-pager

İlk komut servisin durumunu, ikincisi ilgili açılış günlüğünü gösterir. Birim adı farklıysa komutlardaki mysql bölümünü gerçek servis adıyla değiştir. unknown option veya unknown variable yapılandırma seçeneği sorununa, permission denied ve benzeri yazma hataları veri dizini ya da günlük konumuna erişim sorununa işaret eder. address already in use ifadesi ise yapılandırılan portun başka bir süreç tarafından kullanıldığını düşündürür. systemd, başarısız birimin durumunu ve çıkış bilgisini incelemeye sunar.

Windows ve XAMPP günlükleri nereden okunur?

Windows'ta Hizmetler uygulamasında MySQL veya MariaDB hizmetinin hangi adla kurulduğunu kontrol et. Başlatma başarısızlığının ayrıntıları için Olay Görüntüleyicisi içindeki Windows Günlükleri, Uygulama ve Sistem bölümlerine de bakabilirsin. XAMPP kullanıyorsan MySQL satırını XAMPP Kontrol Paneli üzerinden başlatmayı dene ve panelin günlük bağlantısını aç. XAMPP kurulumu, bağımsız Windows hizmetinden farklı bir veri dizini, yapılandırma dosyası ve sunucu çalıştırabilir. XAMPP belgelerinde Windows yapılandırmasının xamppmysqlbinmy.ini altında bulunabileceği ve iki sunucunun aynı portta birlikte başlatılamayacağı belirtilir.

MySQL ve MariaDB kurulum çakışması nasıl anlaşılır?

Aynı bilgisayarda birden fazla MySQL veya MariaDB kurulumu varsa her biri farklı istemci programı, servis adı, yapılandırma dosyası, veri dizini ve soket yolu kullanabilir. Hata günlüğünde veri dosyasını kilitleme, portu açamama veya sunucunun zaten çalıştığını belirten bir mesaj görürsen süreç listesini ve servisleri karşılaştır. Bağlantı kurulduktan sonra SELECT VERSION(); sorgusunu çalıştırarak yanıt veren sunucunun ürün ve sürüm bilgisini görebilirsin.

Hata ayıklama sırasını nasıl güvenli biçimde uygulamalısın?

Teşhisi aşağıdaki sırayla yürütmek, soket, servis, port ve parola sorunlarını birbirine karıştırmanı önler.

  1. Hata metnini ve bağlantı yöntemini belirle. Mesajda soket yolu, ana bilgisayar, port ve hata kodu bulunur. ERROR 2002 soket tabanlı bağlantıya, ERROR 2003 ise çoğunlukla TCP bağlantısının reddedilmesine işaret eder.
  2. Servisin durumunu kontrol et. Linux'ta systemctl status, Windows'ta Hizmetler, XAMPP'ta Kontrol Paneli kullanılır. Servis çalışıyorsa bir sonraki adıma geç.
  3. Servis kapalıysa başlatmayı dene. Başlatma başarısız olursa aynı komutu tekrar tekrar çalıştırmak yerine hata günlüğüne geç. Günlükteki ilk anlamlı hata, sonraki bağlantı mesajlarından daha değerlidir.
  4. localhost ve 127.0.0.1 denemelerini ayır. Biri soket, diğeri TCP yolunu kullanıyorsa sonuçlar bağlantı yöntemini daraltır.
  5. Soket yolu, veri dizini ve portu karşılaştır. İstemci ayarları ile sunucu ayarlarının aynı kuruluma ait olduğunu kontrol et. MySQL'in klasik bağlantı protokolünde varsayılan port 3306'dır, ancak yapılandırmayla değiştirilebilir.
  6. Bağlantı kurulduktan sonra kullanıcı ve parolayı incele. Sunucuya ulaşılamıyorsa parola değiştirme komutu kimlik doğrulama aşamasına gelemez. Kimlik doğrulamayı kapatmak, soket dosyasını herkese yazılabilir yapmak veya 3306 portunu internete açmak yerine yerel bağlantı yolunu ve yapılandırmayı daralt.

Sık Sorulan Sorular

MySQL soket hatası alırken parolayı değiştirmek neden sorunu çözmeyebilir?

Soket hatası, istemcinin sunucuya ulaşamadığını gösterir; bu aşamada kullanıcı adı ve parola henüz doğrulanmamıştır. Önce servis, soket veya TCP bağlantısı düzeltilmeli, parola sorunu ancak Access denied gibi bir kimlik doğrulama hatası görüldüğünde incelenmelidir.

localhost ile bağlantı başarısızken 127.0.0.1 ile bağlantı kurulabiliyorsa ne kontrol edilmelidir?

Bu durumda TCP bağlantısı çalışırken localhost için kullanılan soket yolu yanlış veya sunucu ve istemci ayarlarında farklı olabilir. Hata mesajındaki soket yolunu, istemci yapılandırmasını ve sunucunun gerçek soket ayarını karşılaştırmalısın.

MySQL ve MariaDB aynı bilgisayarda kuruluysa hangi sunucuya bağlanıldığını nasıl anlarsın?

Önce kullandığın istemcinin dosya yolunu, servis adını, portunu ve yapılandırma dosyasını kontrol et. Bağlantı kurulduğunda SELECT VERSION(); sorgusunu çalıştırarak yanıt veren sunucunun MySQL mi MariaDB mi olduğunu görebilirsin.

ERROR 2002 ile Windows'ta görülen ERROR 2003 arasındaki temel fark nedir?

ERROR 2002 genellikle yerel Unix soketine ulaşılamadığını veya soket yolunun yanlış olduğunu belirtir. ERROR 2003 ise istemcinin belirtilen ana bilgisayar ve TCP portuna bağlanamadığını, bağlantının reddedildiğini gösterir.

Bu sırayı izlediğinde bağlantı yöntemini, sunucu durumunu ve kimlik doğrulamasını ayrı aşamalar olarak inceleyebilirsin. Her aşamada yalnızca o aşamaya ait ayarı değiştirmen, yeni bir çakışma oluşturmadan sorunun kaynağını daraltmana yardımcı olur.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara