Drupal Kurulumu İçin Veritabanı Oluşturma
Drupal kurulumuna başlamadan önce hazırlamamız gereken temel bileşenlerden biri veritabanıdır. İçerikler, kullanıcılar, yapılandırmalar ve Drupal'ın çalışırken ihtiyaç duyduğu pek çok bilgi bu veritabanında saklanır.
Drupal; MySQL, MariaDB, PostgreSQL ve SQLite gibi farklı veritabanlarını destekler. Kullanacağımız sürümün Drupal sürümüyle uyumlu olması gerekir. Örneğin Drupal 11 için MySQL 8.0+, MariaDB 10.6+, PostgreSQL 16+ ve SQLite 3.45+ desteklenmektedir.
Bu yazıda örnek olarak MySQL/MariaDB üzerinden ilerleyeceğiz.
Veritabanı Oluşturmadan Önce Nelere İhtiyacımız Var?
Drupal kurulum ekranında bizden temel olarak şu bilgiler istenir:
- Veritabanı adı
- Veritabanı kullanıcı adı
- Veritabanı şifresi
- Veritabanı sunucusu
- Gerekirse port bilgisi
Örneğin sunucu üzerinde şöyle bir yapı oluşturabiliriz:
Database: drupal_site
User: drupal_user
Host: localhostBurada özellikle Drupal için ayrı bir veritabanı kullanıcısı oluşturmak iyi bir pratiktir. Drupal'ın root gibi tüm veritabanlarına erişebilen bir kullanıcıyla çalışmasına gerek yoktur.
Drupal'ın resmi dokümantasyonu da public sunucularda veritabanının önceden oluşturulmasını ve Drupal'a daha sınırlı yetkilere sahip ayrı bir kullanıcı verilmesini önerir.
MySQL veya MariaDB'ye Bağlanma
Ubuntu gibi bir sunucuda MySQL veya MariaDB kuruluysa önce veritabanı konsoluna bağlanabiliriz:
sudo mysqlRoot kullanıcısında parola ile bağlantı yapılandırılmışsa:
mysql -u root -pkullanabiliriz.
İkinci komuttaki -u root, MySQL'e hangi kullanıcıyla bağlanacağımızı; -p ise parola sorulacağını belirtir.
Bağlantı başarılı olduğunda aşağıdakine benzer bir konsol açılır:
mysql>Artık veritabanı ve kullanıcı oluşturabiliriz.
Drupal İçin Veritabanı Oluşturma
Örnek olarak drupal_site isminde bir veritabanı oluşturalım:
CREATE DATABASE drupal_site
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;Burada yalnızca veritabanını oluşturmuyor, karakter setini de belirliyoruz.
utf8mb4, Unicode karakterleri destekler. Türkçe karakterler, farklı alfabeler ve emoji gibi karakterlerle problem yaşamamak için Drupal veritabanlarında kullanılması gereken karakter setidir.
utf8mb4_unicode_ci ise karakterlerin karşılaştırılması ve sıralanmasında kullanılan collation değeridir. Drupal'ın resmi kurulum dokümantasyonu MySQL/MariaDB veritabanlarında utf8mb4 ile birlikte utf8mb4_unicode_ci veya utf8mb4_general_ci kullanılmasını önerir.
Veritabanının oluştuğunu kontrol etmek istersek:
SHOW DATABASES;komutunu kullanabiliriz.
Listede:
drupal_sitegörünüyorsa bu adım tamamlanmıştır.
Drupal İçin Veritabanı Kullanıcısı Oluşturma
Şimdi yalnızca bu Drupal projesinin kullanacağı bir kullanıcı oluşturalım:
CREATE USER 'drupal_user'@'localhost'
IDENTIFIED BY 'GucluBirSifreBuraya';Burada:
drupal_userkullanıcı adıdır.
localhost ise bu kullanıcının yalnızca aynı sunucu üzerinden bağlantı yapabileceğini belirtir. Drupal ile MySQL aynı sunucudaysa genellikle istediğimiz yapı budur.
Gerçek projede örnekteki gibi basit veya tekrar kullanılan bir parola yerine güçlü ve projeye özel bir parola kullanılmalıdır.
Kullanıcıya Veritabanı Yetkisi Verme
Kullanıcıyı oluşturmuş olmamız henüz drupal_site veritabanına erişebileceği anlamına gelmez. Gerekli yetkileri ayrıca vermemiz gerekir:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES
ON `drupal_site`.*
TO 'drupal_user'@'localhost';Komut biraz uzun görünse de yaptığı iş basittir: drupal_user kullanıcısının yalnızca drupal_site veritabanında ihtiyaç duyduğu işlemleri yapmasına izin verir.
Drupal kurulum sırasında tablo oluşturacağı için CREATE, sonrasında içerik ve yapılandırma verilerini okuyup değiştireceği için de SELECT, INSERT, UPDATE ve DELETE gibi yetkilere ihtiyaç duyar. Drupal'ın resmi kurulum dokümanında da bu izinler belirtilmektedir.
Burada özellikle:
ON `drupal_site`.*kısmına dikkat etmek gerekir. Bu ifade kullanıcının yalnızca bu veritabanında yetkili olduğunu belirtir. Böylece aynı MySQL sunucusunda başka projeler bulunuyorsa Drupal kullanıcısı onların veritabanlarına erişemez.
Bağlantıyı Test Edelim
Drupal kurulumuna geçmeden önce oluşturduğumuz kullanıcıyla gerçekten bağlantı kurulabildiğini kontrol etmek faydalıdır.
Önce MySQL'den çıkalım:
exit;Ardından yeni kullanıcıyla bağlanalım:
mysql -u drupal_user -p drupal_siteParolayı girdikten sonra bağlantı kuruluyorsa veritabanı tarafındaki temel hazırlığımız tamamlanmış demektir.
Basit bir kontrol için:
SHOW TABLES;çalıştırabiliriz.
Drupal'ı henüz kurmadığımız için:
Empty setgörmemiz normaldır. Drupal kurulumu başladığında gerekli tablolar otomatik olarak oluşturulacaktır.
Drupal Kurulum Ekranına Hangi Bilgileri Gireceğiz?
Drupal kurulumu sırasında Set up database ekranına geldiğimizde oluşturduğumuz bilgileri kullanabiliriz.
Örneğimiz için:
Database type: MySQL, MariaDB, Percona Server
Database name: drupal_site
Database username: drupal_user
Database password: ********
Host: localhostDrupal ve veritabanı aynı sunucuda çalışıyorsa host çoğunlukla localhost olur.
Docker, DDEV veya Docksal gibi container tabanlı yapılarda ise durum farklıdır. Burada host olarak localhost yerine veritabanı container'ının service adı kullanılabilir.
Örneğin Docker Compose içerisinde servis:
services:
db:
image: mariadbşeklinde tanımlandıysa veritabanı host'u çoğunlukla:
dbolacaktır. Çünkü Drupal container'ı açısından localhost kendi container'ını ifade eder, veritabanı container'ını değil.
phpMyAdmin veya Hosting Panelinden Oluşturabilir miyiz?
Sunucuya SSH erişimi olmayan durumlarda veritabanını komut satırından oluşturmak zorunda değiliz.
cPanel, Plesk veya phpMyAdmin üzerinden de:
- yeni bir veritabanı,
- yeni bir kullanıcı,
- bu kullanıcı için veritabanı yetkileri
oluşturulabilir.
Burada dikkat edilmesi gereken nokta yine aynıdır: Drupal için ayrı bir kullanıcı oluşturmak ve kullanıcının yalnızca ilgili veritabanına erişmesini sağlamaktır. Drupal'ın resmi kurulum dokümanında cPanel/Plesk ve phpMyAdmin üzerinden veritabanı oluşturma yöntemleri de desteklenen yöntemler arasında gösterilmektedir.
Bazı hosting panelleri veritabanı ve kullanıcı adının başına otomatik olarak hosting hesabının adını ekleyebilir.
Örneğin biz:
drupal_siteoluşturduğumuzu düşünürken gerçek veritabanı adı:
webuser_drupal_siteolabilir. Drupal kurulum ekranına panelde görünen gerçek veritabanı adının yazılması gerekir.
PostgreSQL Kullanıyorsak
Drupal projesinde PostgreSQL tercih ediliyorsa işlem mantığı yine aynıdır: önce kullanıcı, ardından bu kullanıcıya ait veritabanı oluşturulur.
Örneğin:
createuser --pwprompt --encrypted --no-adduser --no-createdb drupal_userardından:
createdb --encoding=UNICODE --owner=drupal_user drupal_sitekullanılabilir.
İlk komut drupal_user kullanıcısını, ikinci komut ise sahibi bu kullanıcı olan drupal_site veritabanını oluşturur.
Güncel Drupal sürümlerinde PostgreSQL kullanılırken pg_trgm extension'ının da ilgili Drupal veritabanında aktif olması gerekir.
Örneğin:
CREATE EXTENSION pg_trgm;Bu komut başka bir veritabanında değil, Drupal'ın kullanacağı veritabanına bağlıyken çalıştırılmalıdır.
Sık Karşılaşılan Hatalar
Drupal kurulumu sırasında:
Failed to connect to your database serverbenzeri bir hata alırsak ilk kontrol etmemiz gerekenler database name, username, password ve host bilgileridir.
Örneğin MySQL container içerisinde çalışıyor ancak Drupal kurulumunda:
Host: localhostyazıyorsak bağlantı kurulamayabilir. Bu durumda Docker service adını kullanmamız gerekebilir.
Bir diğer sık karşılaşılan problem kullanıcının veritabanına erişebilmesi ancak tablo oluşturma yetkisinin bulunmamasıdır. Böyle bir durumda bağlantı başarılı olur fakat Drupal kurulumu sırasında tablo oluşturulamadığı için kurulum devam etmez.
Kullanıcının yetkilerini kontrol etmek için:
SHOW GRANTS FOR 'drupal_user'@'localhost';komutunu kullanabiliriz. Bu komut özellikle bağlantının çalıştığı ancak Drupal kurulumunun veritabanı aşamasında hata verdiği durumlarda oldukça faydalıdır.
Sonuç
Drupal için veritabanı hazırlarken aslında üç temel işlem yapıyoruz: Drupal'a ait bir veritabanı oluşturuyor, bu veritabanı için ayrı bir kullanıcı tanımlıyor ve kullanıcıya ihtiyaç duyduğu yetkileri veriyoruz.
Örneğimizin tamamını özetlersek:
CREATE DATABASE drupal_site
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'drupal_user'@'localhost'
IDENTIFIED BY 'GucluBirSifreBuraya';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES
ON `drupal_site`.*
TO 'drupal_user'@'localhost';Bu bilgiler hazır olduğunda Drupal kurulum ekranında veritabanı bağlantısını tanımlayıp kuruluma devam edebiliriz.
Özellikle production ortamlarında Drupal'a root veritabanı kullanıcısını vermek yerine yalnızca ilgili proje veritabanına erişebilen ayrı bir kullanıcı kullanmak, hem yönetim hem de güvenlik açısından daha doğru bir yapı sağlar.