«connection refused» hatasını görüyorsunuz ve nereden başlayacağınızı bilmiyorsunuz
Yeni kurduğunuz siteniz veritabanı bağlantı hatası veriyor. Ya da WordPress'i yeni kurdunuz ve kurulum sayfası veritabanı kullanıcı adı ve şifresini istiyor. Her iki durumda da tek bir şeye ihtiyacınız var: veritabanı oluşturmak, onun için ayrı bir kullanıcı oluşturmak ve site yapılandırma dosyasına yazmanız gereken dört değeri bilmek.
Bunu yanlış yaparsanız, site açılmaz. Doğru yaparsanız, on dakikanızı alır.
Başlamadan Önce: Neye İhtiyacınız Var
Hosting kontrol paneline (cPanel veya DirectAdmin) erişiminiz olsun. Siteniz linux hosting üzerindeyse, bu araçlar kontrol panelinin içindedir. Özel sunucular için genellikle MySQL'i kendiniz kurup yönetmeniz gerekir, bu biraz farklı bir yol izler.
Önceden üç şeyi hazırlayın:
- Veritabanı adı (örneğin
mysite_db) - Kullanıcı adı (örneğin
mysite_user) - Güçlü bir şifre — en az 16 karakter, büyük/küçük harf, rakam ve sembol içeren
Zayıf şifre, veritabanınızın kapısını otomatik tarayıcılara açar. Bunu ciddiye alın.
cPanel'de Veritabanı Oluşturma
cPanel'de MySQL® Databases bölümünü bulun. Bu seçenek genellikle «Databases» kategorisindedir. Sayfayı açtığınızda iki form görürsünüz: biri veritabanı oluşturmak, diğeri kullanıcı oluşturmak için.
Önce veritabanını oluşturun. Girdiğiniz isim bir öneke eklenir. cPanel'de genellikle hosting kullanıcı adınız veritabanı adının başına eklenir. Örneğin kullanıcı adınız server1 ise ve siz mysite_db girdiyseniz, veritabanının tam adı server1_mysite_db olur.
Bu önemli bir nokta: Site yapılandırma dosyasında, kendi girdiğiniz adı değil, tam adı yazmalısınız. Birçok kişi burada hata yapıp eksik ad yazar.
Kullanıcı Oluşturma ve Yetki Verme
Şimdi aynı sayfada kullanıcı oluşturma formunu doldurun. Kullanıcı adı da önek alır. Oluşturduktan sonra «Add User To Database» formunu görürsünüz. Kullanıcıyı veritabanına ekleyin.
Burada önemli bir soru ortaya çıkıyor: Hangi yetkiyi verelim?
Kısa cevap: ALL PRIVILEGES seçeneğini işaretleyin. Neredeyse tüm içerik yönetim sistemleri (WordPress, Laravel, Joomla) kendi veritabanlarına tam erişim gerektirir. Sınırlı yetki verirseniz, site en garip anlarda hata verir.
Ama bir istisna var. Veritabanını yalnızca okuma amaçlı basit bir uygulama için oluşturuyorsanız (örneğin sadece SELECT yapan bir raporlama paneli), yetkileri sınırlayın. Pratikte, sitelerin %99'u için ALL PRIVILEGES veriyorum.
Yapılandırma Dosyasında İhtiyacınız Olan Dört Değer
Artık veritabanı ve kullanıcı oluşturulduğuna göre, dört değere ihtiyacınız var. Bunları geçici bir dosyaya not edin:
- Tam veritabanı adı — önekle birlikte, örneğin
server1_mysite_db - Tam kullanıcı adı — önekle birlikte, örneğin
server1_mysite_user - Şifre — kullanıcıyı oluştururken girdiğiniz şifre
- Veritabanı sunucusu (host) — genellikle
localhost'tur
Dördüncü değeri birçok kişi unutur. Paylaşımlı hostingde veritabanı, sitenin çalıştığı sunucuyla aynı sunucudadır, bu yüzden localhost doğrudur. Ancak veritabanı ayrı bir sunucudaysa (örneğin ayrı mimariye sahip özel sunucu), veritabanı sunucusunun IP adresini veya host adını yazmalısınız.
WordPress'te Bağlantı
Site kökündeki wp-config.php dosyasını açın. Bu bölümü bulun:
define( 'DB_NAME', 'server1_mysite_db' );
define( 'DB_USER', 'server1_mysite_user' );
define( 'DB_PASSWORD', 'your_strong_password' );
define( 'DB_HOST', 'localhost' );
Değerleri değiştirin ve dosyayı kaydedin. Bu kadar.
Laravel'de Bağlantı
.env dosyasını düzenleyin:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=server1_mysite_db
DB_USERNAME=server1_mysite_user
DB_PASSWORD=your_strong_password
Laravel'de DB_HOST bazen localhost yerine 127.0.0.1 yazılır. İkisi de genellikle çalışır, ancak biri hata verirse diğerini deneyin.
Burada Hata Yapıyorlar: Özel Karakterli Şifre
$, # veya ' içeren bir şifre seçtiniz. Yapılandırma dosyasında bu karakterler yorumlanabilir ve şifreyi bozabilir.
Bunun belirtisi nedir? Şifrenin doğru olduğundan emin olsanız bile «Access denied for user» hatası. Veya WordPress'te, şifreyi tekrar kontrol etseniz de çözülmeyen «Error establishing a database connection» hatası.
Çözüm: Şifreyi değiştirin ve yalnızca harf ve rakam kullanın. Ya da özel karakter kullanmanız gerekiyorsa, PHP'de onu \ ile escape etmelisiniz. En basit yol, özel karakterleri kaldırmaktır. Güvenliği garip karakterlerle değil, şifre uzunluğuyla sağlayın.
Yaygın Hatalar ve Hızlı Sorun Giderme
Site hâlâ açılmıyor mu? Sırayla şunları kontrol edin:
- Veritabanı veya kullanıcı adını tam önekle yazdınız mı? — Bu en yaygın hatadır.
- Kullanıcıyı veritabanına eklediniz mi? — Kullanıcı ve veritabanı oluşturmak yeterli değildir. «Add User To Database» formunda bunları birbirine bağlamalısınız.
- Veritabanı sunucusu (host) doğru mu? —
localhost'u127.0.0.1olarak değiştirmek bazı sorunları çözer. - Port doğru mu? — MySQL varsayılan portu
3306'dır. Hosting sağlayıcınız farklı bir port kullanıyorsa, bunu belirtmelisiniz.
«Unknown database» hatası alırsanız, veritabanı adı yanlıştır. «Access denied» alırsanız, kullanıcı adı veya şifre yanlıştır. «Connection refused» alırsanız, veritabanı sunucu adresi doğru değildir.
Bağlantıdan Sonra: Birkaç Gerekli İş
Bağlantı kuruldu mu? İki iş daha yapın.
İlk olarak, veritabanının yedeğini alın. phpMyAdmin'de Export seçeneğine tıklayın ve SQL dosyasını indirin. Bunu şimdi yapın, site içerikle dolduktan sonra değil.
İkinci olarak, site WordPress ise varsayılan tabloları kontrol edin. WordPress kurulum sırasında wp_ önekli tablolar oluşturur. Önceden benzer tablolara sahip bir veritabanınız varsa, çakışma olabilir.
Bağlantı hızını test etmek ve sitenin genel sağlığından emin olmak için ücretsiz webmaster araçlarını kullanabilirsiniz. Bu araçlar, sitenizin kullanıcılar açısından ne kadar hızlı olduğunu söyler.
Veritabanı Ayrı Bir Sunucudayken
Paylaşımlı hostingde her şey tek sunucudadır ve localhost yeterlidir. Ancak daha büyük mimarilerde veritabanı ayrı bir sunucuda bulunur. Bu durumda:
localhostyerine veritabanı sunucusunun IP adresini yazarsınız.- Veritabanı sunucusunun güvenlik duvarında, web sunucusunun IP'sini
3306portu için açmalısınız. - MySQL'e uzaktan bağlantı genellikle varsayılan olarak devre dışıdır. MySQL yapılandırma dosyasında
bind-addressayarını değiştirmelisiniz.
Bu daha uzmanlık gerektiren bir iştir ve bu konuda bilginiz yoksa sorun değil. Paylaşımlı hostingde her şey hazırdır; sadece adları doğru girmeniz yeterlidir.
Sıkça Sorulan Sorular
Şifre doğru olmasına rağmen neden Access denied hatası alıyorum?
En olası neden, yapılandırma dosyasında yorumlanan özel karakterli bir şifredir. Şifreyi basit harf ve rakamlara değiştirin. Diğer neden, kullanıcının yanlış veritabanına bağlanmış olmasıdır. Kontrol panelinde, kullanıcının yapılandırma dosyasında yazdığınız veritabanına tam olarak bağlı olduğunu kontrol edin.
Veritabanı oluşturma ile kullanıcı oluşturma arasındaki fark nedir?
Veritabanı, verilerin saklandığı yerdir. Kullanıcı, veritabanına erişim izni olan kimliktir. Bir veritabanının birden fazla kullanıcısı olabilir ve bir kullanıcı birden fazla veritabanına erişebilir. Her site için ayrı bir veritabanı ve kullanıcı oluşturmak daha iyidir; böylece sitelerden biri hacklenirse diğerleri güvende kalır.
localhost mu yoksa 127.0.0.1 mi yazmalıyım?
Çoğu durumda ikisi de çalışır. Biri hata verirse diğerini deneyin. Bazı özel ayarlarda localhost Unix soketi kullanırken 127.0.0.1 TCP/IP kullanır. Veritabanı sunucusu yalnızca TCP/IP üzerinden dinliyorsa, 127.0.0.1 çalışır.
Veritabanını oluşturduktan sonra siteyi mi kurmalıyım yoksa önce yapılandırma dosyasını mı düzenlemeliyim?
Önce veritabanını ve kullanıcıyı oluşturun, sonra yapılandırma dosyasını düzenleyin, ardından kuruluma başlayın. Kuruluma önce başlarsanız, sizden veritabanı bilgilerini istediği aşamada her şey hazır olmalıdır. Doğru sıra, zaman kazandırır.