format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDatabase Connection Refused Hatası Nedir?
- arrow_rightBu Hatanın Yaygın Nedenleri
- arrow_right1. Veritabanı Sunucusunun Çalışmaması
- arrow_right2. Yanlış Port Yapılandırması
- arrow_right3. Firewall ve Güvenlik Duvarı Engellemeleri
- arrow_right4. Bağlantı Sınırlarının Aşılması
- arrow_right5. Kullanıcı İzinleri ve Kimlik Doğrulama
- arrow_rightAdım Adım Çözüm Yöntemleri
- arrow_right1. Veritabanı Servisini Kontrol Edin
- arrow_right2. Port Dinleme Durumunu Kontrol Edin
- arrow_right3. Firewall Kurallarını İnceleyin
- arrow_right4. Bağlantı Testi Yapın
- arrow_rightMySQL/MariaDB Bağlantı Sorunları
- arrow_rightmy.cnf Yapılandırması
- arrow_rightKullanıcı İzinlerini Kontrol Edin
- arrow_rightMax Connections Ayarını Artırın
- arrow_rightPostgreSQL Bağlantı Sorunları
- arrow_rightpg_hba.conf Dosyası
- arrow_rightpostgresql.conf Ayarları
- arrow_rightÖnleme Stratejileri
- arrow_right1. Monitoring ve Alerting
- arrow_right2. Otomatik Yeniden Başlatma
- arrow_right3. Connection Pooling
- arrow_right4. Düzenli Yedekleme
- arrow_right5. Yüksek Erişilebilirlik Çözümleri
- arrow_rightKarşılaştırma: MySQL vs PostgreSQL Bağlantı Sorunları
- arrow_rightSonuç
Sunucularda "Database Connection Refused" Hatalarının Çözümü
"Database Connection Refused" (Veritabanı Bağlantısı Reddedildi) hatası, sunucu yönetiminde en sık karşılaşılan sorunlardan biridir. Bu hata, uygulamanızın veritabanına bağlanamaması durumunda ortaya çıkar ve web sitenizin veya uygulamanızın çalışmamasına neden olur. Araştırmalara göre, veritabanı bağlantı hataları %15 oranında tüm sunucu arızalarına katkıda bulunmaktadır.
Database Connection Refused Hatası Nedir?
Bu hata, istemci (uygulama veya web sunucusu) veritabanı sunucusuna bağlanmayı denediğinde, sunucunun bağlantıyı kabul etmemesi durumunda oluşur. Hata mesajı genellikle "Connection refused" veya "Unable to connect to database" şeklinde görünür. Bu sorun, hem MySQL/MariaDB hem de PostgreSQL gibi popüler veritabanı sistemlerinde karşınıza çıkabilir.
Bağlantının reddedilmesi birkaç farklı senaryoda gerçekleşebilir: veritabanı sunucusu çalışmıyor olabilir, port kapalı olabilir, firewall kuralları bağlantıyı engelliyor olabilir veya kimlik doğrulama başarısız olmuş olabilir.
Bu Hatanın Yaygın Nedenleri
1. Veritabanı Sunucusunun Çalışmaması
En temel neden, veritabanı hizmetinin çalışmamasıdır. MySQL veya PostgreSQL servisinin durmuş olması, bağlantı isteklerinin reddedilmesine neden olur. Sunucu yeniden başlatıldığında veya beklenmedik şekilde kapandığında bu sorun sıklıkla yaşanır.
2. Yanlış Port Yapılandırması
Veritabanı varsayılan olarak 3306 (MySQL) veya 5432 (PostgreSQL) portlarını kullanır. Uygulama yapılandırmasındaki port numarası yanlışsa, bağlantı reddedilir. Port değiştirilmişse, bu değişiklik uygulama tarafında da güncellenmelidir.
3. Firewall ve Güvenlik Duvarı Engellemeleri
Sunucu güvenlik duvarı (iptables, ufw veya firewallD) veritabanı portunu engelliyor olabilir. Yerel bağlantıde çalışan bir uygulama, sunucu dışından erişimde başarısız olabilir. Bu, özellikle yüksek erişilebilirlik (HA) ortamlarında kritik bir sorundur.
4. Bağlantı Sınırlarının Aşılması
Veritabanı sunucusu, eş zamanlı bağlantı sayısı için bir sınır belirler. Maksimum bağlantı sayısına ulaşıldığında, yeni bağlantı talepleri reddedilir. Yoğun trafiğe sahip uygulamalarda bu sorun sıkça görülür.
5. Kullanıcı İzinleri ve Kimlik Doğrulama
Veritabanı kullanıcısının host izinleri yanlış yapılandırılmışsa, bağlantı reddedilir. MySQL'de 'localhost' yerine '%' veya spesifik IP adresi kullanılmalıdır.
Adım Adım Çözüm Yöntemleri
1. Veritabanı Servisini Kontrol Edin
Öncelikle veritabanı servisinin çalışıp çalışmadığını kontrol edin:
systemctl status mysql systemctl status mariadb systemctl status postgresql
Servis çalışmıyorsa şu komutla başlatın:
systemctl start mysql
Otomatik başlatma için:
systemctl enable mysql
2. Port Dinleme Durumunu Kontrol Edin
Veritabanının hangi portu dinlediğini öğrenmek için:
netstat -tlnp | grep mysql ss -tlnp | grep postgres
Çıktıda port numarasını ve dinleme durumunu (LISTEN) görmeniz gerekir. Port görünmüyorsa, MySQL InnoDB yapılandırma rehberimizi inceleyerek ayarları kontrol edin.
3. Firewall Kurallarını İnceleyin
Firewall'un veritabanı portuna izin verdiğinden emin olun:
sudo ufw allow 3306/tcp sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
4. Bağlantı Testi Yapın
Komut satırından doğrudan veritabanına bağlanmayı deneyin:
mysql -u kullaniciadi -p -h localhost psql -U kullaniciadi -h localhost
Bağlantı başarısız olursa, hata mesajı sorunun kaynağını belirlemenize yardımcı olur.
MySQL/MariaDB Bağlantı Sorunları
MySQL ve MariaDB'de "Connection Refused" hatası alıyorsanız, aşağıdaki adımları izleyin:
my.cnf Yapılandırması
MySQL yapılandırma dosyasında (genellikle /etc/mysql/my.cnf veya /etc/my.cnf) bind-address ayarını kontrol edin:
[mysqld] bind-address = 0.0.0.0 # Tüm arayüzlerden bağlantıya izin verir # veya bind-address = 127.0.0.1 # Sadece yerel bağlantı
Dışarıdan bağlantı için 0.0.0.0 veya spesifik IP adresi kullanmalısınız.
Kullanıcı İzinlerini Kontrol Edin
MySQL'de kullanıcı izinlerini görüntüleyin:
SELECT user, host FROM mysql.user WHERE user = 'kullaniciadi';
Uzaktan bağlantı için kullanıcı '%' host iznine sahip olmalıdır:
CREATE USER 'kullaniciadi'@'%' IDENTIFIED BY 'sifre'; GRANT ALL PRIVILEGES ON veritabaniadi.* TO 'kullaniciadi'@'%'; FLUSH PRIVILEGES;
Max Connections Ayarını Artırın
Bağlantı sınırlarını kontrol edin ve artırın:
SHOW VARIABLES LIKE 'max_connections'; SET GLOBAL max_connections = 500;
Bu değişikliği kalıcı yapmak için my.cnf dosyasına ekleyin.
PostgreSQL Bağlantı Sorunları
PostgreSQL için çözüm adımları benzer şekildedir:
pg_hba.conf Dosyası
PostgreSQL'in kimlik doğrulama yapılandırması /etc/postgresql/version/main/pg_hba.conf dosyasındadır:
host all all 0.0.0.0/0 md5 host all all ::/0 md5
Bu ayar, tüm IP adreslerinden gelen bağlantılara izin verir. Daha güvenli bir yapılandırma için spesifik IP aralıkları belirtin.
postgresql.conf Ayarları
PostgreSQL yapılandırma dosyasında (postgresql.conf) dinleme adresini ayarlayın:
listen_addresses = '*' port = 5432
Değişikliklerden sonra PostgreSQL servisini yeniden başlatmayı unutmayın:
systemctl restart postgresql
Önleme Stratejileri
Veritabanı bağlantı hatalarını önlemek için proaktif adımlar atmanız önerilir:
1. Monitoring ve Alerting
Veritabanı bağlantı durumunu sürekli izleyen bir izleme sistemi kurun. Bağlantı kesintilerinde anında bildirim alın.
2. Otomatik Yeniden Başlatma
Veritabanı servisi durduğunda otomatik olarak başlayacak şekilde yapılandırın:
systemctl enable mysql systemctl enable postgresql
3. Connection Pooling
Bağlantı havuzlama kullanarak aşırı bağlantı taleplerini yönetin. Bu, Ansible ile sunucu otomasyonu yaparak yapılandırılabilir.
4. Düzenli Yedekleme
Yedekleme stratejileri oluşturarak, veritabanı arızalarında hızlı kurtarma sağlayın.
5. Yüksek Erişilebilirlik Çözümleri
Kritik uygulamalar için yüksek erişilebilirlik (HA) mimarisi kullanın. Bu, tek nokta arızasını ortadan kaldırır.
Karşılaştırma: MySQL vs PostgreSQL Bağlantı Sorunları
| Özellik | MySQL/MariaDB | PostgreSQL |
|---|---|---|
| Varsayılan Port | 3306 | 5432 |
| Kimlik Dosyası | my.cnf | postgresql.conf |
| Kimlik Doğrulama | mysql.user tablosu | pg_hba.conf |
| Bağlantı Limiti | max_connections | max_connections |
| Uzaktan Bağlantı | bind-address ayarı | listen_addresses ayarı |
Sonuç
"Database Connection Refused" hatası, doğru teşhis ve çözüm adımlarıyla kolayca giderilebilir bir sorundur. Öncelikle veritabanı servisinin çalışıp çalışmadığını, ardından port yapılandırmasını, firewall kurallarını ve kullanıcı izinlerini kontrol edin. Sorunun kaynağını belirlemek için hata loglarını inceleyin ve sistemli bir şekilde排除 edin.
Uzun vadeli çözüm için monitoring sistemleri kurun, bağlantı havuzlama kullanın ve yüksek erişilebilirlik mimarileri tercih edin. Bu önlemler, veritabanı bağlantı kesintilerinin iş sürekliliğinizi etkilemesini önleyecektir.
Sunucu altyapınızla ilgili daha fazla bilgi için Serversium platformumuzu ziyaret edebilir veya hakkımızda sayfamızı inceleyebilirsiniz.