"Error establishing a database connection" (Türkçe arayüzde "Veri tabanı bağlantısı kurulurken sorun çıktı") mesajı, WordPress'in içerikleri okumak için veritabanı sunucusuna bağlanamadığını gösterir. WordPress yazılarınızı, ayarlarınızı ve kullanıcılarınızı MySQL veya MariaDB veritabanında tuttuğu için bağlantı kurulamazsa sitenin hiçbir sayfası oluşturulamaz.

Bu hata en sık site taşımasından sonra, veritabanı şifresi değiştirildiğinde, veritabanı sunucusu yanıt vermediğinde veya disk dolduğunda görülür. Aşağıda önce ziyaretçinin bilmesi gerekenleri, sonra site sahibinin wp-config.php bilgilerinden tablo onarımına kadar izleyeceği adımları anlatıyoruz.

Hata mesajı ne söylüyor?

Hata mesajı ne söylüyor? Kullanıcı adı ve şifrenin doğru olduğundan emin misiniz?, Sunucu adını (hostname) doğru yazdığınızdan emin misiniz?, Veritabanı sunucusunun çalıştığından...

WordPress kaynak kodundaki db_connect() fonksiyonu bağlantı kuramadığında şu başlığı gösterir: Error establishing a database connection. Ayrıntılı sürümde, wp-config.php dosyasındaki kullanıcı adı ve şifrenin yanlış olabileceği ya da veritabanı sunucusuyla bağlantı kurulamadığı açıklanır ve üç soru sorulur:

  • Kullanıcı adı ve şifrenin doğru olduğundan emin misiniz?
  • Sunucu adını (hostname) doğru yazdığınızdan emin misiniz?
  • Veritabanı sunucusunun çalıştığından emin misiniz?

Bağlantı kurulup veritabanı seçilemezse farklı bir mesaj çıkar: Cannot select database. Bu, kullanıcı adı ve şifrenin doğru olduğunu ama veritabanının bulunamadığını veya kullanıcının o veritabanına yetkisi olmadığını gösterir. Her iki durumda da WordPress HTTP 500 durum kodu döndürür.

Ziyaretçiyseniz

Bu hata tamamen sunucu tarafındadır; tarayıcınızla, internet bağlantınızla veya önbelleğinizle ilgili değildir. Birkaç dakika sonra tekrar deneyin. Hata kısa süreli bir yoğunluktan veya veritabanı sunucusunun yeniden başlatılmasından kaynaklanıyorsa kendiliğinden düzelebilir. Uzun sürerse site sahibine haber verin.

Site sahibiyseniz 1. adım: wp-config.php bilgilerini kontrol edin

Bu adımda wp-config.php, .htaccess veya veritabanı üzerinde değişiklik yapacaksanız önce yedek alın. Dosyayı kendi bilgisayarınıza indirmek ya da cPanel Dosya Yöneticisi ile bir kopyasını oluşturmak yeterlidir; veritabanı için phpMyAdmin dışa aktarma veya panelinizin yedek aracını kullanın.

WordPress'in hangi veritabanına bağlanacağı site kök dizinindeki wp-config.php dosyasında yazar. Dosyayı cPanel Dosya Yöneticisi veya FTP ile açın ve şu dört satırı bulun:

php
define( 'DB_NAME', 'kullanici_wpdb' );
define( 'DB_USER', 'kullanici_wpuser' );
define( 'DB_PASSWORD', 'guclu-sifre' );
define( 'DB_HOST', 'localhost' );
  • DB_NAME: veritabanının adı. cPanel'de ön ek açıksa ad, cPanel kullanıcı adınız ve alt çizgiyle başlar (örneğin kullanici_wpdb).
  • DB_USER ve DB_PASSWORD: veritabanı kullanıcısı ve şifresi. Bunlar cPanel giriş bilgilerinizle aynı değildir.
  • DB_HOST: WordPress belgelerine göre varsayılan değer localhost ve çoğu zaman değiştirmeniz gerekmez. Farklı port için localhost:3307, soket için localhost:/var/run/mysqld/mysqld.sock biçimi kullanılabilir. Veritabanı ayrı bir sunucudaysa barındırma firmanızın verdiği adresi yazın.

Taşıma sonrası yanlış bilgiler

Siteyi başka bir hosting hesabına veya sunucuya taşıdıysanız eski wp-config.php dosyası eski sunucunun veritabanı adını, kullanıcısını ve şifresini içerir. Yeni sunucuda veritabanı başka bir ön ekle oluşturulmuş olabilir. Yeni hesapta oluşturduğunuz veritabanı bilgilerini birebir yazın. Eski sunucuda DB_HOST farklı bir adresse yeni sunucunuzda genellikle localhost kullanılır; emin değilseniz firmanıza sorun.

Site sahibiyseniz 2. adım: cPanel'de kullanıcı ve yetkileri kontrol edin

Site sahibiyseniz 2. adım: cPanel'de kullanıcı ve yetkileri kontrol edin: Current Databases, Aynı satırdaki Privileged Users sütununda DB_USER kullanıcısı görünüyor mu?...

cPanel'in veritabanı arayüzü (cPanel belgelerinde Manage My Databases adıyla geçer; eski sürümlerde MySQL Databases olarak görünebilir) üzerinden şunları kontrol edin:

  • Current Databases listesinde DB_NAME ile aynı adlı veritabanı var mı?
  • Aynı satırdaki Privileged Users sütununda DB_USER kullanıcısı görünüyor mu? Görünmüyorsa Add User To Database bölümünden kullanıcıyı ve veritabanını seçip Add deyin, ALL PRIVILEGES kutusunu işaretleyip Make Changes ile kaydedin.
  • Şifreden emin değilseniz Current Users tablosunda kullanıcının yanındaki Change Password ile yeni şifre belirleyin ve aynı şifreyi wp-config.php dosyasındaki DB_PASSWORD satırına yazın.

"Cannot select database" mesajı alıyorsanız sorun büyük olasılıkla bu adımdadır: kullanıcı doğru ama veritabanına eklenmemiş ya da veritabanı adı yanlış.

Site sahibiyseniz 3. adım: veritabanı sunucusu çalışıyor mu?

Bilgiler doğruysa ve hata aniden başladıysa veritabanı sunucusu kapalı veya aşırı yüklü olabilir. WordPress belgeleri bu durumda barındırma firmanızla iletişime geçmenizi, veritabanının kotayı aşıp kapatılmış ya da sunucunun çökmüş olabileceğini belirtir. Aynı hesaptaki diğer siteler de aynı hatayı veriyorsa sorun neredeyse kesin sunucu tarafındadır.

Kendi VPS veya sunucunuzu yönetiyorsanız servis durumunu kontrol edin. Dağıtıma göre servis adı mysql veya mariadb olabilir:

bash
sudo systemctl status mariadb
# veya
sudo systemctl status mysql

# Son hata kayıtları
sudo journalctl -u mariadb --since "1 hour ago"

Servis yönetimi hakkında ayrıntı için systemd servis yönetimi yazımıza bakabilirsiniz.

Bağlantı sayısı sınırı (Too many connections)

MySQL belgelerine göre Too many connections hatası, izin verilen tüm bağlantıların başka istemciler tarafından kullanıldığı anlamına gelir. Sınırı max_connections sistem değişkeni belirler. Yoğun trafik, botlar veya bağlantıyı açık bırakan eklentiler sınırı doldurabilir. Paylaşımlı hostingde bu değeri siz değiştiremezsiniz; önbellek eklentisi kullanmak ve kötü bot trafiğini engellemek yükü azaltır. Kendi sunucunuzda ayrıcalıklı bir hesapla SHOW PROCESSLIST; çalıştırarak hangi sorguların bağlantıları tuttuğunu görebilirsiniz.

Disk doldu

Disk veya hesap kotası dolduğunda veritabanı sunucusu yazma yapamaz ve bağlantılar başarısız olabilir. cPanel ana sayfasındaki disk kullanımını kontrol edin; eski yedekler, büyük log dosyaları ve önbellek klasörleri en sık alan kaplayanlardır. Ayrıntılar için disk doldu hatası yazımıza bakın.

Site sahibiyseniz 4. adım: bozuk tabloları onarın

Site sahibiyseniz 4. adım: bozuk tabloları onarın: cPanel, phpMyAdmin, WordPress onarım aracı

Bazen bağlantı kurulur ama bir tablo bozulduğu için WordPress çalışmaz; yönetim panelinde veritabanının onarılması gerektiğine dair bir uyarı görebilirsiniz. Üç yol vardır:

  • cPanel: veritabanı arayüzündeki Check Database ile denetleyin, sorun varsa Repair Database ile onarın.
  • phpMyAdmin: veritabanını seçin, onarılacak tabloları işaretleyin ve alttaki menüden "Repair table" seçin.
  • WordPress onarım aracı: wp-config.php dosyasına aşağıdaki satırı ekleyin ve https://alanadiniz.com/wp-admin/maint/repair.php adresini açın.
php
define( 'WP_ALLOW_REPAIR', true );

Bu sayfada Repair Database ve Repair and Optimize Database düğmeleri bulunur. Onarım bitince araç sizden bu satırı wp-config.php dosyasından kaldırmanızı ister.

Bağlantıyı küçük bir PHP dosyasıyla test etme

WordPress dışında bilgilerin doğru olup olmadığını görmek isterseniz site kök dizinine geçici bir dosya koyabilirsiniz. Bu yöntem hatanın WordPress'ten mi yoksa bilgilerden mi kaynaklandığını ayırmanıza yarar:

php
<?php
// db-test.php: test bittikten sonra hemen silin
$baglanti = @mysqli_connect( 'localhost', 'kullanici_wpuser', 'guclu-sifre', 'kullanici_wpdb' );
if ( ! $baglanti ) {
    echo 'Bağlantı başarısız: ' . mysqli_connect_error();
} else {
    echo 'Bağlantı başarılı.';
    mysqli_close( $baglanti );
}

"Access denied" ifadesi kullanıcı adı veya şifre hatasını, bağlantı reddedildi ya da sunucuya ulaşılamadı türü mesajlar DB_HOST veya sunucu sorununu, "Unknown database" ise yanlış veritabanı adını işaret eder.

Nedenler, belirtiler ve çözümler

NedenBelirtiÇözüm
Yanlış DB_USER veya DB_PASSWORDError establishing a database connection; test dosyasında Access deniedcPanel'de şifreyi sıfırlayıp wp-config.php dosyasına aynısını yazın
Yanlış DB_NAME veya yetki eksikCannot select databaseVeritabanı adını kontrol edin, kullanıcıyı veritabanına ALL PRIVILEGES ile ekleyin
Yanlış DB_HOSTTaşıma sonrası başladıÇoğu hostingde localhost; değilse firmanın verdiği adres
Veritabanı sunucusu kapalıAynı sunucudaki tüm siteler etkilenirHosting firmasına bildirin veya servisi yeniden başlatın
Bağlantı sınırı dolduToo many connections; yoğun saatlerde aralıklı hataÖnbellek, bot engelleme, gerekirse max_connections ayarı
Disk doluYazma hataları, aralıklı bağlantı hatasıGereksiz dosyaları silin, kotayı artırın
Bozuk tabloYönetim panelinde onarım uyarısıcPanel Repair Database, phpMyAdmin veya WP_ALLOW_REPAIR

Bütün kontroller temizse ve hata sürüyorsa WordPress belgeleri sitenin ele geçirilmiş olabileceğini de bir olasılık olarak sayar. Bu durumda dosya bütünlüğünü kontrol edin ve barındırma firmanızdan destek alın.

Sık Sorulan Sorular

Hata kendiliğinden gidip geliyor. Bilgilerim yanlış olabilir mi?

Bilgiler yanlış olsaydı hata sürekli olurdu. Gidip gelen hata çoğunlukla veritabanı sunucusunun aşırı yüklendiğini, bağlantı sınırının dolduğunu veya disk sorununu gösterir. Hosting firmanızdan sunucu tarafındaki kayıtlara bakmasını isteyin.

Ön sayfa açılıyor ama /wp-admin hata veriyor. Neden?

Önbellek eklentisi veya sunucu önbelleği ziyaretçilere sayfanın önbellekteki kopyasını gösterebilir; önbelleğe alınmayan yönetim paneli ise veritabanına bağlanmak zorundadır. Yani sorun büyük olasılıkla tüm sitede vardır, önbellek yalnızca gizler.

DB_HOST değerini nereden öğrenirim?

cPanel kullanan paylaşımlı hostinglerde genellikle localhost doğrudur. Veritabanı ayrı bir sunucudaysa bu bilgi barındırma firmanızın belgelerinde veya hoş geldiniz e-postasında yer alır.

WP_ALLOW_REPAIR satırını bırakırsam ne olur?

wp-admin/maint/repair.php sayfası giriş istemediği için herkes onarım ve optimizasyon işlemini başlatabilir. Bu, gereksiz yüke yol açabilir. İşiniz bitince satırı silin.

Yazılım, tarayıcı ve hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen şirketlerle ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: WordPress kritik hata çözümü · Disk doldu hatası · MySQL nedir? · Veritabanı yedekleme stratejileri · wp-config.php sabitleri · 500 Internal Server Error