MariaDB, günümüzde bir web uygulamasının, WordPress sitesinin ya da özel bir yazılımın arkasında en sık gördüğünüz açık kaynak veritabanı sunucularından biridir. MySQL'in özgür bir çatalı olarak doğmuş, zamanla kendi başına olgun ve hızlı bir sisteme dönüşmüştür. Depolama motorlarındaki iyileştirmeler, geniş uyumluluk ve tamamen açık lisans yapısıyla hem küçük bir kişisel blogun hem de yoğun trafik alan bir e-ticaret sitesinin altında rahatça çalışır. Yıllardır sunucu yöneten biri olarak şunu söyleyebilirim: MariaDB'yi düzgün kurmak kadar, kurulumdan hemen sonra doğru şekilde sertleştirmek de en az o kadar önemlidir çünkü varsayılan haliyle bir veritabanı sunucusu her zaman güvenli değildir.
Bu rehberde MariaDB'yi Ubuntu ve Debian tabanlı bir sunucuya sıfırdan kurmayı, kurulumun hemen ardından çalıştırmanız gereken mysql_secure_installation betiğiyle sunucuyu adım adım sertleştirmeyi, kendi veritabanınızı ve ona özel bir kullanıcı oluşturup yetkilendirmeyi, gerektiğinde uzaktan erişimi bind-address ayarıyla nasıl güvenli biçimde açacağınızı ve temel güvenlik önlemlerini uygulamalı örneklerle göreceksiniz. Ayrıca MariaDB'nin MySQL ile ilişkisine ve hosting panellerindeki uyumuna değineceğiz. Örnek komutları kendi sunucunuzda birebir çalıştırabilir, kullanıcı adlarını ve IP aralıklarını kendi ortamınıza göre uyarlayabilirsiniz.
MariaDB Nedir ve MySQL ile İlişkisi#
MariaDB, verilerinizi tablolar halinde saklayan, SQL diliyle sorgulanan ve işlem (transaction) güvenliği sunan ilişkisel bir veritabanı yönetim sistemidir. 2009 yılında MySQL'in özgün yaratıcıları tarafından, MySQL'in ticari bir şirkete geçmesinin ardından onun tamamen açık kalacak bir çatalı olarak başlatılmıştır. Bu köken sayesinde MariaDB ile MySQL, komut sözdizimi, istemci araçları ve dosya yapısı açısından büyük ölçüde uyumludur. mysql komutunu, mysqldump yedekleme aracını ve tanıdık CREATE DATABASE ifadelerini MariaDB üzerinde de aynı şekilde kullanırsınız.
Bu uyumluluk pratikte şu anlama gelir: MySQL için yazılmış bir uygulama, çoğu durumda hiçbir değişiklik yapmadan MariaDB üzerinde çalışır. WordPress, Joomla, Magento gibi popüler yazılımlar MariaDB'yi resmî olarak destekler. Aşağıdaki tablo iki sistemin pratikteki konumunu özetliyor. MySQL tarafının kendine has araçlarını ve günlük yönetim komutlarını merak ediyorsanız MySQL veritabanı yönetimi rehberimiz iyi bir başlangıç olur.
| Özellik | MariaDB | MySQL |
|---|---|---|
| Lisans | Tamamen açık (GPL) | Açık çekirdek + ticari sürümler |
| Geliştirici | Topluluk odaklı (MariaDB Vakfı) | Oracle |
| Uyumluluk | MySQL ile büyük ölçüde uyumlu | Referans standart |
| Depolama motorları | InnoDB, Aria, MyRocks, ColumnStore | InnoDB, MyISAM |
| Varsayılan kimlik doğrulama | unix_socket (root için) | caching_sha2_password |
| Tipik kullanım | Web/CMS, hosting panelleri | Kurumsal, web |
Kısacası MariaDB ile MySQL arasında seçim yaparken çoğu web projesi için MariaDB, açık lisansı ve hosting dünyasındaki yaygınlığıyla pratik bir tercihtir. Zaten cPanel, Plesk ve DirectAdmin gibi kontrol panellerinin büyük bölümü bugün varsayılan veritabanı sunucusu olarak MariaDB kullanır.
Kurulum Öncesi Hazırlık#
Kuruluma geçmeden önce sunucunuza sudo yetkili bir kullanıcıyla SSH üzerinden bağlanın ve paket listelerini güncelleyin. Güncel bir sistem hem bilinen güvenlik açıklarını kapatır hem de olası paket çakışmalarını baştan önler. Ubuntu ve Debian, paket yönetimini apt ile yapar; bu konuda ayrıntı isterseniz apt paket yönetimi rehberimize göz atabilirsiniz.
sudo apt update && sudo apt upgrade -y
MariaDB varsayılan olarak 3306 numaralı TCP portunu dinler. Kuruluma başlamadan önce sunucunuzun kaynaklarını kabaca gözden geçirmenizde fayda var; küçük bir WordPress sitesi için 1 GB RAM çoğu zaman yeterliyken, yoğun bir uygulama için daha fazlasını planlamalısınız. Veritabanı sunucusunu mümkünse web sunucusundan ayrı bir makinede tutmak, hem güvenlik hem de performans açısından iyi bir alışkanlıktır. Kendi yönetiminizde bir sunucuya ihtiyacınız varsa VDS sunucu veya sanal sunucu seçenekleri bu iş için oldukça uygundur; tüm sunucu ailesini sunucu çözümleri sayfamızda karşılaştırabilirsiniz.
Ubuntu ve Debian'da MariaDB Kurulumu#
Ubuntu ve Debian'ın resmî depolarında MariaDB paketli olarak gelir ve çoğu senaryo için bu sürüm fazlasıyla yeterlidir. Tek komutla sunucuyu ve yardımcı istemci araçlarını kurabilirsiniz. mariadb-server paketi sunucunun kendisini, mariadb-client ise komut satırı istemcisini içerir.
sudo apt install mariadb-server mariadb-client -y
Kurulum bittiğinde servis otomatik olarak başlatılır ve sistem açılışına eklenir. Durumu doğrulamak için servisi kontrol edin:
systemctl status mariadb
Çıktıda active (running) ifadesini görmelisiniz. Eğer servis çalışmıyorsa aşağıdaki komutlarla başlatabilir ve açılışta otomatik başlaması için etkinleştirebilirsiniz. Servis yönetimi konusunda daha derine inmek isterseniz systemd servis yönetimi rehberimiz işinizi görecektir.
sudo systemctl start mariadb
sudo systemctl enable mariadb
Kurulu sürümü ve istemcinin sunucuya bağlanıp bağlanmadığını da hızlıca teyit edebilirsiniz. Aşağıdaki komut hem sürüm bilgisini gösterir hem de bağlantının çalıştığını kanıtlar.
mariadb --version
sudo mariadb -e "SELECT VERSION();"
AlmaLinux, Rocky Linux gibi RHEL tabanlı dağıtımlarda paket yöneticisi dnf olduğu için kurulum komutu sudo dnf install mariadb-server biçiminde olur; geri kalan sertleştirme ve yapılandırma adımları neredeyse birebir aynıdır. RHEL tarafında paket yönetimi için dnf paket yönetimi rehberimize bakabilirsiniz.
mysql_secure_installation ile Sertleştirme#
Kurulum tamamlandığında MariaDB çalışır durumdadır ama henüz güvenli değildir. İşte bu noktada devreye giren mysql_secure_installation betiği, birkaç kritik ayarı tek seferde yapmanızı sağlayan en önemli adımdır. Bu betiği kurulumdan hemen sonra, sunucuyu internete açmadan önce çalıştırmanızı şiddetle öneririm. Betik MariaDB ile de gelir ve MySQL'deki adıyla aynıdır.
sudo mysql_secure_installation
Betiği çalıştırdığınızda size sırayla birkaç soru yöneltilir. Aşağıda her adımı ve önerdiğim yanıtı bulacaksınız. Modern MariaDB sürümlerinde root kullanıcısı varsayılan olarak unix_socket kimlik doğrulaması kullandığı için ilk soruda mevcut parola boş bırakılabilir; sistem sizi sudo ile zaten doğrulamıştır.
- Enter current password for root: Yeni kurulumda parola olmadığı için doğrudan Enter'a basın.
- Switch to unix_socket authentication?
unix_socketzaten aktifsen, değilse tercihe göreydiyebilirsiniz. - Set root password? Parola tabanlı erişim istiyorsanız
ydeyip güçlü bir parola belirleyin. - Remove anonymous users? Kesinlikle
y. Anonim kullanıcılar herhangi birinin parolasız bağlanmasına izin verir. - Disallow root login remotely? Kesinlikle
y. root'un uzaktan bağlanması ciddi bir risktir. - Remove test database?
y. Varsayılantestveritabanı herkese açıktır ve gerekli değildir. - Reload privilege tables now?
y. Değişikliklerin hemen devreye girmesini sağlar.
Bu altı adım küçük görünse de bir veritabanı sunucusunun en sık istismar edilen zayıf noktalarını kapatır. Anonim kullanıcının kaldırılması ve root'un uzaktan girişinin engellenmesi, otomatik tarama botlarının denediği ilk açıkları ortadan kaldırır. Belirlediğiniz root parolasını güçlü seçin; parola politikası konusunda güçlü parola politikası rehberimiz iyi bir kaynaktır.
Veritabanı ve Kullanıcı Oluşturma#
Sertleştirmenin ardından sıra ilk veritabanınızı ve ona özel bir kullanıcıyı oluşturmaya geldi. Buradaki en önemli prensip şudur: her uygulama için ayrı bir veritabanı ve o veritabanına yalnızca gerektiği kadar yetkisi olan ayrı bir kullanıcı oluşturun. Asla uygulamalarınızı root ile veritabanına bağlamayın. Böylece bir uygulama ele geçirilse bile saldırgan yalnızca o veritabanına erişebilir, tüm sunucuya değil.
Önce MariaDB kabuğuna bağlanın. Yeni kurulumda root için unix_socket kullanıldığından sudo ile parola sormadan girersiniz.
sudo mariadb
Kabuğa girdikten sonra veritabanını ve kullanıcıyı oluşturun. Aşağıdaki örnekte uygulama_db adında bir veritabanı, uygulama_user adında bir kullanıcı oluşturuyor ve bu kullanıcıya yalnızca bu veritabanı üzerinde tam yetki veriyoruz. Karakter setini utf8mb4 seçmek, Türkçe karakterler ve emoji dahil her türlü metni sorunsuz saklamanız için önemlidir.
CREATE DATABASE uygulama_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'uygulama_user'@'localhost' IDENTIFIED BY 'GucluBirParola_123!';
GRANT ALL PRIVILEGES ON uygulama_db.* TO 'uygulama_user'@'localhost';
FLUSH PRIVILEGES;
Burada dikkat edilmesi gereken birkaç nokta var. Kullanıcı tanımındaki 'localhost' kısmı, bu kullanıcının yalnızca sunucunun kendi üzerinden bağlanabileceğini söyler; web uygulaması aynı sunucudaysa doğru seçim budur. GRANT ALL PRIVILEGES ON uygulama_db.* ifadesi ise yetkiyi yalnızca o veritabanıyla sınırlar, diğer veritabanlarına dokunamaz. Yetki türlerini daha ince ayarlamak isterseniz ALL PRIVILEGES yerine yalnızca SELECT, INSERT, UPDATE, DELETE gibi gerekli olanları verebilirsiniz. Yetki yönetiminin ayrıntılarını MySQL kullanıcı yetkileri rehberimizde bulabilirsiniz.
Oluşturduğunuz kullanıcının yetkilerini doğrulamak için şu komutu çalıştırabilir, ardından exit; yazarak kabuktan çıkabilirsiniz.
SHOW GRANTS FOR 'uygulama_user'@'localhost';
EXIT;
Artık uygulamanızın yapılandırma dosyasında (örneğin WordPress'in wp-config.php dosyasında) veritabanı adı olarak uygulama_db, kullanıcı adı olarak uygulama_user ve belirlediğiniz parolayı kullanabilirsiniz. Bağlantıyı komut satırından test etmek için şu komutu deneyin.
mariadb -u uygulama_user -p uygulama_db
bind-address ile Uzaktan Erişim Ayarı#
Varsayılan olarak MariaDB yalnızca 127.0.0.1 adresini, yani sunucunun kendisini dinler. Bu, web sunucusu ile veritabanı aynı makinede olduğunda en güvenli ve tavsiye edilen yapılandırmadır. Ancak uygulama sunucusu ile veritabanı sunucusunu ayırdığınız bir mimaride, veritabanının uzaktan gelen bağlantıları kabul etmesi gerekir. Bu ayar bind-address yönergesiyle yapılır.
İlgili yapılandırma dosyası genellikle /etc/mysql/mariadb.conf.d/50-server.cnf konumundadır. Dosyayı bir metin düzenleyiciyle açın; düzenleyici kullanımı için nano ve vim rehberimize bakabilirsiniz.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Dosyada bind-address satırını bulun. Varsayılan değeri 127.0.0.1 olacaktır. Sunucunun tüm ağ arayüzlerini dinlemesi için bu değeri 0.0.0.0 yapabilirsiniz; ancak daha güvenli olanı, yalnızca belirli bir iç IP adresini yazmaktır.
[mysqld]
bind-address = 0.0.0.0
Değişikliği kaydettikten sonra servisi yeniden başlatın ki ayar devreye girsin.
sudo systemctl restart mariadb
Uzaktan erişimi açtığınızda mutlaka iki ek adım atmalısınız. Birincisi, uzaktan bağlanacak kullanıcıyı doğru host ile tanımlamak. 'uygulama_user'@'localhost' uzaktan bağlanamaz; bunun yerine bağlanacak istemcinin IP adresini belirtmelisiniz. Aşağıdaki örnekte 10.0.0.5 adresindeki uygulama sunucusuna izin veriyoruz.
CREATE USER 'uygulama_user'@'10.0.0.5' IDENTIFIED BY 'GucluBirParola_123!';
GRANT ALL PRIVILEGES ON uygulama_db.* TO 'uygulama_user'@'10.0.0.5';
FLUSH PRIVILEGES;
İkinci ve hayati adım güvenlik duvarını doğru yapılandırmaktır. 3306 portunu tüm internete açmak büyük bir hatadır; bu port yalnızca güvendiğiniz uygulama sunucusunun IP adresine açılmalıdır. Ubuntu'da ufw ile yalnızca belirli bir kaynağa izin verebilirsiniz.
sudo ufw allow from 10.0.0.5 to any port 3306
Güvenlik duvarı kuralları konusunda derinleşmek isterseniz ufw güvenlik duvarı ve iptables temelleri rehberlerimiz kapsamlı bir başlangıç sunar. Unutmayın: uzaktan erişim ne kadar dikkatli açılırsa açılsın, mümkün olduğunda veritabanını internete hiç açmamak en güvenli yaklaşımdır. Sunucular arası trafiği özel bir ağ (private network) üzerinden yürütmek çok daha sağlıklıdır.
Temel Güvenlik Önlemleri ve Bakım#
mysql_secure_installation iyi bir başlangıçtır ama tek başına yeterli değildir. Uzun vadede güvenli bir veritabanı sunucusu için birkaç alışkanlığı da benimsemeniz gerekir. İlki, düzenli yedekleme. Bir veritabanının en değerli tarafı içindeki veridir ve tek bir donanım arızası ya da hatalı bir sorgu her şeyi silebilir. mysqldump ile mantıksal yedek almak en yaygın yöntemdir.
mysqldump -u root uygulama_db > /yedek/uygulama_db_$(date +%F).sql
Bu komutu bir zamanlanmış görev haline getirerek her gece otomatik yedek alabilirsiniz; cron görevleri rehberimiz bunu adım adım anlatıyor. Yedekleri sunucunun dışında bir yerde tutmak da kritik önemdedir. Bu konuda yedekleme çözümleri sayfamıza göz atabilir, uzak yedekleme için rsync ile yedekleme yöntemini inceleyebilirsiniz.
İkinci önemli alışkanlık güncel kalmaktır. MariaDB için yayınlanan güvenlik yamalarını düzenli olarak uygulayın. sudo apt update && sudo apt upgrade komutu, depodaki güncel MariaDB sürümünü sisteminize getirir. Üçüncüsü, her kullanıcıya yalnızca ihtiyacı kadar yetki verin (en az yetki ilkesi) ve kullanmadığınız kullanıcıları kaldırın. Aşağıdaki sorgu mevcut kullanıcıları ve bağlanabildikleri host'ları listeler.
SELECT User, Host FROM mysql.user;
Dördüncü olarak, log kayıtlarını takip edin. MariaDB'nin hata günlüğü genellikle /var/log/mysql/error.log konumundadır ve beklenmedik bağlantı denemelerini ya da yavaş sorguları buradan yakalayabilirsiniz. Sunucu geneli güvenlik için sunucu güvenliği temelleri ve fail2ban kurulumu rehberlerimiz, tekrarlayan başarısız giriş denemelerini otomatik engellemenize yardımcı olur. Aşağıdaki tablo, uygulamanız gereken temel önlemleri ve önceliklerini özetliyor.
| Önlem | Amaç | Öncelik |
|---|---|---|
| mysql_secure_installation | Anonim/test erişimini kapatma | Kritik |
| Uygulama başına ayrı kullanıcı | Zarar yüzeyini daraltma | Kritik |
| bind-address sınırlama | Ağ erişimini kısıtlama | Yüksek |
| Güvenlik duvarı (3306) | Yalnızca güvenilir IP | Yüksek |
| Düzenli yedekleme | Veri kaybını önleme | Kritik |
| Güncel tutma | Güvenlik yamaları | Yüksek |
Hosting Panelleri ve MariaDB Uyumu#
Kendi sunucunuzu komut satırından yönetmek her zaman gerekmeyebilir. cPanel, Plesk ve DirectAdmin gibi kontrol panellerinin neredeyse tamamı bugün varsayılan veritabanı sunucusu olarak MariaDB kullanır. Bu panellerde grafik arayüz üzerinden veritabanı ve kullanıcı oluşturmak, yetki atamak, hatta phpMyAdmin ile tabloları düzenlemek yalnızca birkaç tıklama alır. Örneğin cPanel'in "MySQL Veritabanları" bölümü, arka planda tam olarak bu rehberde anlattığımız CREATE DATABASE ve GRANT komutlarını çalıştırır; sadece komut satırı yerine size bir form sunar.
Web arayüzünden veritabanı yönetimi için en yaygın araç phpMyAdmin'dir. Tabloları görüntülemek, veri düzenlemek, içe-dışa aktarım yapmak ve SQL sorgularını çalıştırmak için pratik bir arayüz sunar; ayrıntılar için phpMyAdmin kullanımı rehberimize göz atabilirsiniz. Paylaşımlı hosting alan çoğu kullanıcı MariaDB'yi doğrudan görmez bile; panel bu karmaşayı sizin adınıza yönetir. Yönetimli bir ortam istiyorsanız web hosting ve WordPress hosting paketlerimiz MariaDB'yi hazır ve optimize edilmiş biçimde sunar; bir sitenizi taşımak isterseniz site taşıma hizmetimiz veritabanı aktarımını da kapsar.
Kendi sunucusunu yöneten ama işletim sistemi tarafındaki bakımı bize bırakmak isteyenler için sunucu yönetimi hizmetimiz devreye girer; kurulum, sertleştirme ve düzenli güncelleme gibi işleri sizin yerinize üstleniriz. Böylece siz uygulamanıza odaklanırken veritabanı katmanının güvenli ve güncel kalmasını biz sağlarız.
Sıkça Sorulan Sorular#
MariaDB mi MySQL mi kullanmalıyım?#
Çoğu web projesi için MariaDB pratik bir tercihtir çünkü tamamen açık lisanslıdır ve hosting panellerinde yaygın olarak varsayılan gelir. MariaDB, MySQL ile büyük ölçüde uyumlu olduğu için WordPress dahil pek çok uygulama iki sistemde de sorunsuz çalışır. Eğer belirli bir MySQL kurumsal özelliğine ihtiyacınız yoksa ya da mevcut altyapınız MySQL'e bağlı değilse MariaDB ile başlamak güvenli bir yoldur.
mysql_secure_installation komutunu neden çalıştırmalıyım?#
Bu betik, kurulumdan sonra sunucunuzda kalan en yaygın güvenlik açıklarını tek seferde kapatır. Anonim kullanıcıları kaldırır, root'un uzaktan girişini engeller, gereksiz test veritabanını siler ve isterseniz root parolası belirlemenizi sağlar. Bu adımları atlamak, sunucunuzu otomatik tarama botlarının kolayca hedef alabileceği bir duruma bırakır; bu yüzden kurulumdan hemen sonra, sunucuyu internete açmadan önce çalıştırmanız gerekir.
MariaDB'ye uzaktan nasıl güvenli şekilde bağlanırım?#
Öncelikle bind-address değerini sunucunun iç IP adresine ayarlayın ve kullanıcıyı bağlanacak istemcinin IP adresiyle tanımlayın. Ardından güvenlik duvarında 3306 portunu yalnızca güvendiğiniz IP adresine açın, asla tüm internete değil. Mümkünse sunucular arası trafiği özel bir ağ üzerinden yürütün; en güvenli yaklaşım veritabanını hiç internete açmamaktır.
Neden uygulamalarımı root kullanıcısıyla bağlamamalıyım?#
root kullanıcısı tüm veritabanları üzerinde sınırsız yetkiye sahiptir; uygulamanız ele geçirilirse saldırgan tüm sunucuya erişebilir. Her uygulama için ayrı bir veritabanı ve yalnızca o veritabanına yetkili ayrı bir kullanıcı oluşturmak, olası bir güvenlik ihlalinin etkisini tek bir veritabanıyla sınırlar. Bu en az yetki ilkesi, veritabanı güvenliğinin en temel kurallarından biridir.
MariaDB yedeklerimi nasıl alırım?#
En yaygın yöntem mysqldump aracıyla mantıksal yedek almaktır; tek bir veritabanını ya da tüm sunucuyu bir SQL dosyasına aktarabilirsiniz. Bu yedeği bir cron görevine bağlayarak her gece otomatik hale getirmenizi ve yedeği sunucunun dışında bir yerde saklamanızı öneririm. Yedek almak kadar geri yükleme sürecini de önceden test etmek, gerçek bir felaket anında sürprizle karşılaşmamak için kritik önemdedir.
MariaDB varsayılan olarak hangi portu kullanır?#
MariaDB varsayılan olarak 3306 numaralı TCP portunu dinler. Yerel kurulumlarda yalnızca 127.0.0.1 üzerinden erişilebilir durumdadır ve bu, web sunucusu ile veritabanının aynı makinede olduğu senaryolarda en güvenli yapılandırmadır. Uzaktan erişim gerekmediği sürece bu portu güvenlik duvarında dışarıya kapalı tutmak en doğru uygulamadır.
Kapanış#
MariaDB kurmak birkaç dakikalık bir iş olsa da, onu gerçekten güvenli ve yönetilebilir kılan şey kurulumdan sonra attığınız adımlardır: mysql_secure_installation ile sertleştirme, her uygulama için ayrı kullanıcı, bind-address ve güvenlik duvarıyla sınırlanmış erişim, düzenli yedekleme ve güncel kalma. Bu rehberdeki adımları tek tek uyguladığınızda, hem küçük bir blogun hem de yoğun bir uygulamanın altında yıllarca sorunsuz çalışacak sağlam bir veritabanı sunucusuna sahip olursunuz.
Bu işlerle uğraşmadan hazır ve optimize edilmiş bir ortam istiyorsanız Clou.TR olarak size uygun çözümler sunuyoruz. MariaDB'nin hazır geldiği web hosting ve WordPress hosting paketlerimize göz atabilir, kendi sunucunuzu kurup yönetiminde destek almak için VDS sunucu ve sunucu yönetimi hizmetlerimizi inceleyebilirsiniz. Doğru kurulan bir veritabanı, uygulamanızın en sağlam temelidir.