Bilgi Bankası
GenelBağlantı ve erişim 12 dk 14.06.2026

Veritabanına bağlanılamıyor: bağlantı hatalarını 10 dakikada ayırma rehberi

Veritabanına bağlanamamak panik yaratır; çünkü hata çoğu zaman tek satırdır ama arkasında DNS, ağ, TLS, parola, IP izin listesi ya da bağlantı havuzu olabilir. Bu yazı, önce panik düğmesini kapatıp hatayı sakin sakin hangi sepete koyacağınızı anlatır.

Bu yazı sana şu durumda yardımcı olur
  • connection refused veya connection timed out
  • no pg_hba.conf entry, access denied, authentication failed
  • TLS handshake failed veya certificate verify failed
  • uygulamada ara ara bağlantı kopması
  • lokalde bağlanıyor ama CI/CD ortamında bağlanmıyor
Yazıyı bitirince

Bağlantı sorununu rastgele denemelerle değil, ağ, kimlik, TLS ve havuz katmanlarına ayırarak çözebileceksiniz. Güvenliği gevşetmeden ilerlemek için hangi kanıta bakmanız gerektiği de netleşecek.

TürkDB açısından ürünleşme notu

Bu bölüm, TürkDB’nin ilgili problemi hangi ürün ilkeleri ve kontrol noktalarıyla ele alacağını anlatır. Kapsam, gerçek iş yükü ve ihtiyaçla birlikte netleşir.

TürkDB burada “her şeyi aç, bir daha dene” refleksini azaltır. Bağlantı bilgisi, IP izin listesi, TLS zorunluluğu, WireGuard yolu ve olay kayıtları aynı yerden görüldüğü için önce erişim yolunu doğrular, sonra uygulama tarafına geçersiniz.

Önce hatanın adını doğru koyun

Bağlantı hatalarında en yorucu şey, herkesin aynı anda farklı bir ihtimali denemesidir. Biri parolayı değiştirir, biri firewall açar, biri uygulamayı yeniden başlatır. Bazen sorun çözülür ama kimse neden çözüldüğünü bilmez.

Daha iyi yol, hatayı uygulama logundaki metne göre sınıflandırmaktır. Zaman aşımı çoğunlukla ağ, DNS veya izin listesi tarafına; authentication failed kullanıcı/parola tarafına; TLS hataları sertifika ve bağlantı parametrelerine; too many connections ise havuz veya istemci davranışına işaret eder.

Üretimde ilk refleks güvenlik ayarlarını kapatmak olmamalıdır. IP izin listesi, TLS ve tenant izolasyonu doğru çalışıyorsa, sorun çoğu zaman istemcinin yanlış uç noktayı, yanlış portu veya eksik tüneli kullanmasıdır.

  • Zaman aşımı: istemci veritabanı uç noktasına ulaşamıyor ya da güvenlik katmanı trafiği engelliyor.
  • Connection refused: uç nokta yanlış portta, servis hazır değil veya bağlantı yolu tünelden geçmiyor olabilir.
  • Authentication failed: kullanıcı, parola, database adı veya authSource hatalıdır.
  • TLS hatası: istemci TLS istemiyor, yanlış CA kullanıyor veya bağlantı dizesi eksik parametre içeriyor.
  • Too many connections: uygulama havuzu kontrolsüz büyümüş veya veritabanı tarafında pooler kullanılmıyor olabilir.

TürkDB kullanıyorsanız önce nerelere bakılır?

TürkDB pilotunda hedeflenen nokta, bağlantı yolunun dağınık olmamasıdır. Cluster durumu, olaylar, izin listesi kayıtları ve bağlantı bilgisi aynı kontrol düzleminden okunabilirse sorun kendiliğinden çözülmez ama yanlış kapıyı çalma riski azalır.

Aşağıdaki komutları bir “sihirli çözüm” gibi değil, durum fotoğrafı almak için düşünün. Fotoğraf netleşince parolaya mı, IP’ye mi, TLS’e mi, uygulama pool’una mı bakacağınız daha anlaşılır hale gelir.

Cluster ve erişim kontrolü

turkdb-cli
turkdb cluster get app-db
turkdb cluster events app-db --limit 20
turkdb cluster allowlist list app-db
turkdb connect app-db --no-tunnel
Bu TürkDB bloğu kavramsal ürün akışını anlatır; mevcut çalışan komut, garanti edilen özellik veya teslim tarihi vaadi olarak okunmamalıdır.

connect --no-tunnel yalnızca bağlantı bilgisini gösterir; otomatik tünel açmadan uygulamanın kullandığı DSN ile karşılaştırmak için kullanışlıdır.

Yeni ofis veya CI/CD çıkış IP adresini ekleme

allowlist.sh
turkdb cluster allowlist add app-db 203.0.113.0/24 --desc "Ofis ağı"
turkdb cluster allowlist add app-db 198.51.100.42 --desc "CI/CD runner"
Bu TürkDB bloğu kavramsal ürün akışını anlatır; mevcut çalışan komut, garanti edilen özellik veya teslim tarihi vaadi olarak okunmamalıdır.

5 dakikalık karar ağacı

Bağlantı sorununda sırayla ilerlemek önemlidir; aksi halde aynı anda hem ağ hem kullanıcı hem uygulama havuzu değiştirilir ve gerçek neden kaybolur. İlk beş dakikada amaç bazen çözmek değil, problemi doğru sınıfa koymaktır.

Aşağıdaki akış küçük ekiplerde bile tekrar edilebilir bir müdahale rehberi sağlar. Önce servis hazır mı, sonra istemci doğru yerden mi geliyor, sonra kimlik bilgisi doğru mu, en son uygulama havuzu sağlıklı mı diye bakılır.

  • Cluster hazır değilse uygulama koduna bakmayın; önce olay ve hazır olma durumunu çözün.
  • İzin listesi eşleşmiyorsa parolayı değiştirmeyin; istemci çıkış IP adresini doğrulayın.
  • CLI istemcisi bağlanıyor ama uygulama bağlanmıyorsa bağlantı dizesi veya framework pool ayarını inceleyin.
  • Sadece yoğun saatlerde kopuyorsa ağdan önce bağlantı limiti ve pool tüketimini kontrol edin.
  • TLS hatası varsa sslmode/tls parametresi ve istemcinin CA davranışı doğrulanmalıdır.

Uygulama bağlantı dizesi kontrol listesi

Bağlantı dizesi içinde host, port, database, kullanıcı, TLS modu ve motor-özel parametreler açık olmalıdır. PostgreSQL için sslmode=require, MongoDB için tls=true ve authSource, Redis için rediss:// şeması gibi detaylar çoğu bağlantı hatasını belirler.

Uygulama frameworkleri bazen bağlantı dizesi parametrelerini kendi varsayılanlarıyla ezebilir. Bu nedenle aynı DSN ile resmi CLI istemcisinden bağlanmak, sorunun uygulama kodunda mı ağda mı olduğunu ayırmanın pratik yoludur.

Motorlara göre güvenli bağlantı örnekleri

dsn-examples.env
POSTGRES_DSN="postgresql://app:***@app.pg.ist1.turkdb.io:5432/app?sslmode=require"
MYSQL_DSN="app:***@tcp(app.mysql.ist1.turkdb.io:3306)/app?tls=true"
MONGODB_URI="mongodb://app:***@app.mongo.ist1.turkdb.io:27017/app?tls=true&authSource=admin"
REDIS_URL="rediss://default:***@app.redis.ist1.turkdb.io:6379"
CLICKHOUSE_DSN="clickhouse://app:***@app.ch.ist1.turkdb.io:9440?secure=true"

Sorun çözüldükten sonra tekrar etmesini nasıl önlersiniz?

Bağlantı problemi düzeldikten sonra aynı hatanın tekrar yaşanmaması için iki kayıt bırakılmalıdır: hangi sinyal kök nedeni gösterdi ve hangi değişiklik problemi çözdü. Bu bilgi olmadan ekip bir sonraki olayda yine rastgele deneme yapar.

TürkDB tarafında izin listesi açıklamalarını anlamlı yazmak, cluster olaylarını incelemek ve uygulama pool limitini kod deposunda görünür tutmak operasyonel borcu azaltır.

Uygulama havuz limitini açık tutma örneği

database-pool.env
DB_POOL_MIN=2
DB_POOL_MAX=20
DB_CONNECT_TIMEOUT_MS=5000
DB_IDLE_TIMEOUT_MS=30000

Bu değerler örnektir; hedef, pool davranışının varsayılanlara bırakılmaması ve cluster kapasitesiyle birlikte dokümante edilmesidir.

Devam etmek istersen

Sorunu motor bazında derinleştirin

Benzer belirtiler farklı motorlarda farklı nedenlere dayanır; yayınlanan tüm rehberleri ana sayfadan takip edebilirsiniz.

Tüm makaleler