Veritabanı Bağlantı Hatası: Web Siteniz Neden Aniden Erişilemez Olur?
Her site yöneticisi için en korkutucu anlardan biri, veritabanı bağlantı hatası (Database Connection Error) mesajını görmektir. Bu hata genellikle aniden ortaya çıkar ve tüm siteye erişimi engeller. WordPress'te bu hata genellikle "Error Establishing a Database Connection" mesajıyla birlikte gelir, ancak özel PHP uygulamalarında "PDOException: SQLSTATE[HY000] [2002]" veya "mysqli::connect(): (HY000/2002)" gibi farklı hatalar görebilirsiniz.
İyi haber şu ki, çoğu durumda bu hata giderilebilir ve paniğe gerek yoktur. Bu makalede, veritabanı bağlantı hatasının yedi yaygın nedenini öncelik sırasına göre inceleyecek ve her biri için gerçek komutlarla pratik çözümler sunacağız. Bu sıralama, pratik deneyime ve her sorunun olasılığına göre tasarlanmıştır.
ServerNet gibi profesyonel web barındırma hizmetleri kullanıyorsanız, bu hatayı gidermek için genellikle izleme araçları ve teknik destek mevcuttur. Ancak sorun giderme ilkelerini bilmek, sorunu en kısa sürede çözmenize yardımcı olur.
Birinci Neden: Yapılandırma Dosyasında Yanlış Bağlantı Bilgileri
Veritabanı bağlantı hatasının en yaygın nedeni, bağlantı bilgilerindeki hatadır. WordPress'te bu bilgiler wp-config.php dosyasında saklanır. Diğer PHP uygulamalarında genellikle config.php, .env veya database.php gibi dosyalar bu ayarlardan sorumludur.
WordPress'te wp-config.php Dosyasını Kontrol Etme
wp-config.php dosyasını bir metin düzenleyiciyle açın ve şu dört satırı kontrol edin:
define('DB_NAME', 'your_database_name');
define('DB_USER', 'your_database_user');
define('DB_PASSWORD', 'your_database_password');
define('DB_HOST', 'localhost');
Yaygın hatalar:
- DB_HOST: Veritabanı ayrı bir sunucudaysa, değer veritabanı sunucusunun IP'si veya alan adı olmalıdır (örneğin
192.168.1.100veyadb.example.com). Bu durumdalocalhostkullanmak hataya neden olur. - DB_PASSWORD: Parola, PHP dizgisinde doğru yorumlanmayan özel karakterler içerebilir. Parola
'(kesme işareti) içeriyorsa,\'ile kaçış karakteri ekleyin. - DB_NAME: Veritabanı adı, MySQL'de oluşturulan adla tam olarak eşleşmelidir. Linux'ta veritabanı adlarında büyük/küçük harf duyarlılığı vardır.
Sorun giderme ipucu: Site kökünde test-db.php adlı basit bir PHP dosyası oluşturun ve içine aşağıdaki kodu ekleyin:
<?php
$link = mysqli_connect('localhost', 'your_user', 'your_password', 'your_database');
if (!$link) {
die('Hata: ' . mysqli_connect_error());
}
echo 'Bağlantı başarılı';
mysqli_close($link);
?>
Ardından bu dosyayı tarayıcıda açın. Hata gösteriyorsa, sorunun hangi kısımdan kaynaklandığını tam olarak görebilirsiniz.
İkinci Neden: Veritabanının Bozulması veya Silinmesi
Bazen veritabanı çeşitli nedenlerle bozulur veya yanlışlıkla silinir. Bu soruna genellikle farklı hatalar eşlik eder.
Veritabanı ve Tabloların Varlığını Kontrol Etme
SSH veya cPanel üzerinden sunucuya bağlanın ve aşağıdaki komutla MySQL'e girin:
mysql -u root -p
Ardından mevcut veritabanlarını listeleyin:
SHOW DATABASES;
Veritabanınız listede yoksa, yeniden oluşturmanız gerekir. Veritabanı mevcutsa ancak tablolar bozuksa, onarmak için aşağıdaki komutu kullanın:
mysqlcheck -u root -p --auto-repair --all-databases
Yaygın hata: Birçok kullanıcı, veritabanının phpMyAdmin'de görüntülenmesinin sağlıklı olduğu anlamına geldiğini düşünür. Ancak bazen veritabanının iç tabloları (WordPress'te wp_options gibi) bozulur ve bağlantı hatasına neden olur. Kontrol için her zaman mysqlcheck komutunu kullanın.
Üçüncü Neden: Sunucu Kaynak Sınırlamaları (MySQL'in Çökmesi)
Veritabanı bağlantı hatasının gizli nedenlerinden biri, MySQL'in aşırı kaynak tüketimidir. Sunucunun belleği veya CPU'su maksimuma ulaştığında, MySQL hizmeti otomatik olarak durabilir.
MySQL Hizmet Durumunu Kontrol Etme
Linux sunucularda, MySQL durumunu aşağıdaki komutla kontrol edin:
systemctl status mysql
Hizmet etkin değilse, başlatın:
systemctl start mysql
MySQL hata günlüklerini kontrol etmek için aşağıdaki komutu kullanın:
tail -100 /var/log/mysql/error.log
Bu günlükte genellikle kaynak sınırlamasını gösteren "Out of memory" veya "Too many connections" gibi hatalar görülür.
Geçici çözüm: Sunucunuzda yeterli RAM yoksa, MySQL parametrelerini /etc/mysql/my.cnf dosyasında ayarlayabilirsiniz. Örneğin, max_connections değerini azaltın:
[mysqld]
max_connections = 50
innodb_buffer_pool_size = 256M
Değişiklikten sonra hizmeti yeniden başlatın.
Dördüncü Neden: Güvenlik Duvarı veya IP Kısıtlaması
Veritabanı ayrı bir sunucudaysa (örneğin, özel bir veritabanı sunucusu), veritabanı sunucusunun güvenlik duvarı web sunucunuzun IP'sinden gelen bağlantıyı engelliyor olabilir.
Uzaktan Erişimi Kontrol Etme
Web sunucusundan, MySQL portuna (varsayılan 3306) bağlantıyı aşağıdaki komutla test edin:
telnet your-db-server-ip 3306
Bağlantı kurulamazsa, güvenlik duvarı veya ağ ayarlarında sorun var demektir. Veritabanı sunucusunda, iptables kurallarını aşağıdaki komutla kontrol edin:
iptables -L -n | grep 3306
Ayrıca MySQL'de, veritabanı kullanıcısının web sunucusunun IP'sinden bağlanma iznine sahip olması gerekir. MySQL'de aşağıdaki komutla kontrol edin:
SELECT host, user FROM mysql.user WHERE user = 'your_user';
host değeri yalnızca localhost ise, web sunucusunun IP'sine veya % (tüm IP'ler için) olarak değiştirin:
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'your-web-server-ip' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
Yaygın hata: Tüm IP'ler için % kullanmak güvenliği azaltır. Web sunucusunun IP'sini tam olarak belirtmek daha iyidir.
Beşinci Neden: WordPress veya Uygulama Dosyalarının Bozulması
Bazen WordPress veya PHP uygulamasının temel dosyaları bozulur ve veritabanı bağlantı hatasına neden olur. Bu sorun genellikle eksik güncelleme veya hack saldırısından sonra ortaya çıkar.
wp-config.php Dosyasını Sıfırlama
WordPress'te, wp-config.php dosyası bozulmuşsa, temiz bir sürümle değiştirebilirsiniz. Önce mevcut dosyayı yedekleyin:
cp wp-config.php wp-config.php.backup
Ardından örnekten yeni bir dosya oluşturun:
cp wp-config-sample.php wp-config.php
Şimdi yeni dosyaya doğru veritabanı bilgilerini girin.
Diğer PHP uygulamaları için, yapılandırma dosyalarını orijinal sürümle (genellikle git deposunda veya kurulum paketinde) karşılaştırın.
Altıncı Neden: DNS veya Veritabanı Hostname Sorunu
Bağlantı ayarlarında hostname (örneğin db.example.com) kullanıyorsanız, DNS doğru şekilde çözümlenmeyebilir.
DNS Çözümlemesini Test Etme
Web sunucusundan, hostname'i IP'ye dönüştürmek için aşağıdaki komutu kullanın:
nslookup db.example.com
Doğru bir yanıt alamazsanız, /etc/hosts dosyasına manuel bir eşleme ekleyin:
192.168.1.100 db.example.com
Ardından bağlantıyı tekrar test edin.
Yedinci Neden: Uyumsuz PHP veya MySQL Sürümü
Bazen PHP veya MySQL güncellemesinden sonra sürümler birbiriyle uyumlu olmaz. Örneğin, WordPress 5.0, PHP 8.0 ile iyi çalışır, ancak bazı eski eklentiler yeni PHP sürümüyle sorun yaşayabilir.
Sürümleri Kontrol Etme
PHP sürümünü aşağıdaki komutla kontrol edin:
php -v
MySQL sürümünü:
mysql --version
Uygulamanızın bu sürümleri desteklediğinden emin olun. WordPress için en az PHP 7.4 ve MySQL 5.6 gereklidir.
Önemli not: MySQL 8 kullanıyorsanız, eski WordPress eklentileri yeni MySQL kimlik doğrulama yöntemiyle (caching_sha2_password) sorun yaşayabilir. Bu durumda, veritabanı kullanıcısını eski yönteme değiştirin:
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
Nihai Kontrol Sırası (Checklist)
Veritabanı bağlantı hatasını hızlıca gidermek için şu sırayı izleyin:
- Yapılandırma dosyasını (wp-config.php veya eşdeğeri) kontrol edin.
- MySQL hizmet durumunu
systemctl status mysqlile kontrol edin. - Manuel bağlantıyı
mysql -u user -pile test edin. - Veritabanı ve tabloların varlığını
SHOW DATABASES;vemysqlcheckile kontrol edin. - Güvenlik duvarını ve IP erişimini
telnetile test edin. - MySQL hata günlüklerini
/var/log/mysql/error.logdosyasında okuyun. - Gerekirse MySQL hizmetini yeniden başlatın.
Bu adımları izleyerek vakaların %90'ında sorun çözülür. Hata devam ederse, muhtemelen sorun sunucu donanımından veya teknik ekip tarafından incelenmesi gereken daha gelişmiş ayarlardan kaynaklanıyordur.