MongoDB Connection Error Çözümü: ECONNREFUSED ve Timeout Hataları (2025)

17.12.2025 15:03 Haber

MongoDB'ye bağlanmaya çalışırken "ECONNREFUSED" veya "connection timeout" hatası mı alıyorsunuz? Bu yaygın sorun genellikle basit konfigürasyon hatalarından kaynaklanır. Alesta Web olarak bu rehberde MongoDB connection error çözümlerini adım adım göstereceğiz!

Yaygın MongoDB Bağlantı Hataları (Common Connection Errors)

Alesta Web ekibi olarak en çok karşılaştığımız MongoDB hataları şunlar:

Hata Mesajı 1: ECONNREFUSED

MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
    at connectionFailureError
Error: connect ECONNREFUSED 127.0.0.1:27017

Hata Mesajı 2: Timeout

MongooseServerSelectionError: connect ETIMEDOUT
MongoTimeoutError: Server selection timed out after 30000 ms

Hata Mesajı 3: Authentication Failed

MongoError: Authentication failed
MongoServerError: bad auth : Authentication failed

Bu hataların hepsinin çözümü var. Hadi sırayla bakalım!

Çözüm 1: MongoDB Servisi Kontrolü (Check MongoDB Service)

İlk ve en önemli adım: MongoDB servisi çalışıyor mu?

Linux/Ubuntu'da Kontrol

# Servis durumunu kontrol et
sudo systemctl status mongod

# Eğer çalışmıyorsa başlat
sudo systemctl start mongod

# Otomatik başlatmayı aktifleştir
sudo systemctl enable mongod

Windows'ta Kontrol

# PowerShell'de (Admin olarak)
Get-Service MongoDB

# Servisi başlat
Start-Service MongoDB

# veya Services.msc'den:
1. Windows + R tuşla
2. services.msc yaz
3. MongoDB Server bul
4. Sağ tık > Start

macOS'ta Kontrol

# Homebrew ile kurulduysa
brew services list

# Başlat
brew services start mongodb-community

# veya manuel
mongod --config /usr/local/etc/mongod.conf

Alesta Web İpucu: Çoğu zaman sorun basitçe MongoDB'nin çalışmıyor olması. İlk bu adımı kontrol edin!

✅ Başarılı Çıktı:
● mongod.service - MongoDB Database Server
   Loaded: loaded
   Active: active (running)

Çözüm 2: Connection String Düzeltme (Fix Connection String)

Yanlış connection string çok yaygın bir hata kaynağı.

Doğru Connection String Formatları

// Yerel bağlantı (Local connection)
mongodb://localhost:27017/mydb

// Authentication ile
mongodb://username:password@localhost:27017/mydb

// Replica Set ile
mongodb://localhost:27017,localhost:27018/mydb?replicaSet=rs0

// MongoDB Atlas
mongodb+srv://username:password@cluster.mongodb.net/mydb

Node.js/Mongoose Örneği

// ❌ YANLIŞ - Eksik protokol
mongoose.connect('localhost:27017/mydb');

// ❌ YANLIŞ - Yanlış port
mongoose.connect('mongodb://localhost:27018/mydb');

// ✅ DOĞRU
mongoose.connect('mongodb://localhost:27017/mydb');

// ✅ DOĞRU - Options ile
mongoose.connect('mongodb://localhost:27017/mydb', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});
⚠️ Dikkat / Warning:

MongoDB Atlas kullanıyorsanız mongodb+srv:// protokolünü kullanmalısınız. Normal mongodb:// çalışmaz!

Çözüm 3: Firewall Ayarları (Firewall Configuration)

Firewall MongoDB portunu (27017) engelliyor olabilir.

Ubuntu/Debian - UFW

# Port durumunu kontrol et
sudo ufw status

# MongoDB portunu aç
sudo ufw allow 27017

# Sadece belirli IP'den izin ver (daha güvenli)
sudo ufw allow from 192.168.1.0/24 to any port 27017

CentOS/RHEL - firewalld

# Portu aç
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent

# Firewall'ı yeniden yükle
sudo firewall-cmd --reload

Windows Firewall

# PowerShell (Admin)
New-NetFirewallRule -DisplayName "MongoDB" -Direction Inbound -Protocol TCP -LocalPort 27017 -Action Allow

# veya Windows Defender Firewall'dan:
1. Control Panel > Windows Defender Firewall
2. Advanced Settings
3. Inbound Rules > New Rule
4. Port > TCP > 27017 > Allow

Alesta Web olarak güvenlik önerisi: Production'da sadece gerekli IP'lere izin verin!

Çözüm 4: bindIp Konfigürasyonu (bindIp Configuration)

MongoDB varsayılan olarak sadece localhost'tan bağlantı kabul eder.

mongod.conf Dosyası

# Linux: /etc/mongod.conf
# Windows: C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg
# macOS: /usr/local/etc/mongod.conf

# Varsayılan (sadece localhost)
net:
  port: 27017
  bindIp: 127.0.0.1

# Tüm IP'lerden bağlantı (DİKKAT: Güvenlik riski!)
net:
  port: 27017
  bindIp: 0.0.0.0

# Belirli IP'ler (Önerilen)
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.1.100

Değişiklik Sonrası Restart

# Linux
sudo systemctl restart mongod

# Windows
Restart-Service MongoDB

# macOS
brew services restart mongodb-community
⚠️ Güvenlik Uyarısı / Security Warning:

bindIp: 0.0.0.0 kullanıyorsanız mutlaka authentication aktifleştirin ve firewall kuralları ekleyin. Aksi halde veritabanınız internete açık olur!

Çözüm 5: Timeout Ayarları (Timeout Settings)

Yavaş ağlarda veya uzak sunucularda timeout süresini artırmanız gerekebilir.

Mongoose Timeout Options

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydb', {
  serverSelectionTimeoutMS: 5000,   // Server seçim timeout
  connectTimeoutMS: 10000,          // Bağlantı timeout
  socketTimeoutMS: 45000,           // Socket timeout
  maxPoolSize: 10,                  // Max connection pool
  minPoolSize: 2                    // Min connection pool
});

MongoDB Native Driver

const { MongoClient } = require('mongodb');

const client = new MongoClient('mongodb://localhost:27017', {
  serverSelectionTimeoutMS: 5000,
  connectTimeoutMS: 10000,
  socketTimeoutMS: 45000
});

await client.connect();

Alesta Web İpucu: Production'da timeout değerlerini çok yüksek tutmayın. Hızlı fail etmek bazen daha iyi!

Docker ile MongoDB Bağlantısı (Docker MongoDB Connection)

Docker kullanıyorsanız network ayarlarına dikkat edin!

docker-compose.yml Örneği

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - MONGO_URI=mongodb://mongo:27017/mydb
    depends_on:
      - mongo

  mongo:
    image: mongo:7
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db

volumes:
  mongo-data:

Docker Network Hatası Çözümü

// ❌ YANLIŞ - Docker içinden localhost çalışmaz
mongodb://localhost:27017/mydb

// ✅ DOĞRU - Service adını kullan
mongodb://mongo:27017/mydb

// Host makineden bağlanıyorsanız
mongodb://localhost:27017/mydb  // Bu çalışır
? Bilgi / Info:

Docker container'lar kendi network'lerinde çalışır. Container içinden localhost o container'ın kendisini gösterir, host makineyi değil!

MongoDB Atlas Bağlantısı (MongoDB Atlas Connection)

Cloud-based MongoDB kullanıyorsanız farklı sorunlar olabilir.

1. IP Whitelist Kontrolü

1. MongoDB Atlas Dashboard'a git
2. Network Access'e tıkla
3. IP Address ekle
4. "Add Current IP Address" veya 0.0.0.0/0 (development için)

2. Connection String

// Atlas connection string formatı
mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/mydb?retryWrites=true&w=majority

// Node.js örneği
mongoose.connect(process.env.MONGODB_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  retryWrites: true
});

3. Kullanıcı ve Şifre

Atlas'ta Database Access bölümünden kullanıcı oluşturduğunuzdan emin olun. Cluster admin şifresi database şifresi DEĞİL!

⚠️ Dikkat:

Şifrenizde @, #, % gibi özel karakterler varsa URL encode edin! Örn: pa$$wordpa%24%24word

? Kaynaklar ve Referanslar / Sources and References

Alesta Web olarak tüm çözümleri test ettik.

✅ Sorun Çözüldü! (Problem Solved!)

Artık MongoDB connection error geride kaldı! Alesta Web olarak hazırladığımız bu rehberle bağlantı sorunlarınızı çözebilirsiniz.

Hızlı Özet / Quick Summary:

  • ✅ MongoDB servisi çalışıyor mu kontrol et
  • ✅ Connection string formatını doğrula
  • ✅ Firewall port 27017'yi aç
  • ✅ bindIp ayarını kontrol et
  • ✅ Timeout değerlerini ayarla
  • ✅ Docker'da service name kullan
  • ✅ Atlas'ta IP whitelist ekle

Faydalı Linkler / Useful Links:

© 2025 AlestaWeb - Tüm hakları saklıdır. | MongoDB Connection Error Fix Guide

WM Tools
💫

WebMaster Tools

15 Profesyonel Araç