Takip et

MariaDB Neden Tercih Edilmeli? Temel Veritabanı Kavramlarına Giriş

Ubuntu’da MariaDB Kurulumu ve Güvenliği: Kapsamlı Rehber

Modern uygulamaların bel kemiği olan veritabanları, doğru kurulmadığında ve güvence altına alınmadığında ciddi riskler taşıyabilir. Bu rehber, açık kaynak dünyasının güçlü veritabanı çözümlerinden MariaDB’yi Ubuntu sunucunuzda nasıl adım adım kuracağınızı ve kritik güvenlik önlemlerini nasıl alacağınızı detaylıca anlatıyor.

MariaDB Neden Tercih Edilmeli? Temel Veritabanı Kavramlarına Giriş

Günümüzün dijital dünyasında, web sitelerinden mobil uygulamalara, e-ticaret platformlarından kurumsal sistemlere kadar her şeyin temelinde güçlü ve güvenilir bir veritabanı yatar. Veritabanları, bilgileri düzenli bir şekilde saklayan, yöneten ve erişilebilir kılan sistemlerdir. Bu bağlamda, MariaDB, MySQL’in popüler bir çatalı (fork) olarak ortaya çıkmış, açık kaynak kodlu ve ilişkisel bir veritabanı yönetim sistemidir (RDBMS).

MariaDB’nin tercih edilmesinin ardında yatan birçok güçlü neden bulunmaktadır. Öncelikle, MySQL ile yüksek uyumluluğu sayesinde, mevcut MySQL tabanlı uygulamalarınızı ve sistemlerinizi MariaDB’ye kolayca taşıyabilirsiniz. Bu uyumluluk, geliştiriciler ve sistem yöneticileri için geçiş sürecini oldukça sorunsuz hale getirir. Ancak MariaDB, sadece bir uyumluluk klonu olmanın ötesine geçerek, MySQL’de bulunmayan veya daha gelişmiş özellikler sunar. Örneğin, performansı artırıcı optimizasyonlar, daha gelişmiş depolama motorları (örneğin, Aria ve ColumnStore), ve daha sıkı güvenlik yamaları ile öne çıkar. Açık kaynak felsefesine sıkı sıkıya bağlı kalması, geniş bir topluluk desteği ve sürekli gelişim potansiyeli sunar.

Veritabanı yönetim sistemleri, verilerin tutarlılığını, bütünlüğünü ve güvenliğini sağlamakla görevlidir. İlişkisel veritabanları, verileri tablolar halinde düzenler ve bu tablolar arasındaki ilişkileri tanımlar. Bu yapı, verilerin sorgulanmasını, güncellenmesini ve silinmesini standart bir dil olan SQL (Structured Query Language) aracılığıyla kolaylaştırır. MariaDB de bu prensipler üzerine kurulmuştur ve karmaşık veri manipülasyonları için güçlü SQL yetenekleri sunar. Veritabanı sunucusu, bu veritabanlarını barındıran ve istemci uygulamalarının (web sunucuları, masaüstü uygulamaları vb.) bu verilere erişimini sağlayan yazılımdır. Ubuntu gibi Linux tabanlı sunucular, MariaDB’nin kararlı ve yüksek performanslı bir şekilde çalışması için ideal bir ortam sunar. Bu entegrasyon, özellikle maliyet etkinliği ve esneklik arayan işletmeler ve geliştiriciler için cazip bir kombinasyon oluşturur. Dolayısıyla, MariaDB’yi tercih etmek, hem teknik üstünlükleri hem de açık kaynak avantajlarını bir araya getiren stratejik bir karardır.

Ubuntu Sunucunuzu MariaDB Kurulumuna Nasıl Hazırlarsınız?

MariaDB kurulumuna başlamadan önce, Ubuntu sunucunuzun en iyi şekilde hazırlandığından emin olmak kritik önem taşır. Bu ön hazırlık adımları, hem kurulumun sorunsuz ilerlemesini sağlar hem de sisteminizin genel güvenliğini ve performansını artırır. İlk olarak, sisteminizin güncel olduğundan emin olmalısınız. Güncel paketler, en son güvenlik yamalarını ve hata düzeltmelerini içerir, bu da olası zafiyetleri ortadan kaldırır ve kararlı bir çalışma ortamı sunar. Terminali açarak aşağıdaki komutları çalıştırmanız yeterlidir:


sudo apt update
sudo apt upgrade -y
    

sudo apt update komutu, paket listelerinizi güncellerken, sudo apt upgrade -y komutu ise mevcut tüm paketleri onay gerektirmeden en son sürümlerine yükseltir. Bu işlem, sunucunuzun yazılım tabanını tazeleyerek olası uyumluluk sorunlarının önüne geçer.

Güvenlik, sunucu yönetiminin vazgeçilmez bir parçasıdır. Bu nedenle, MariaDB kurulumuna geçmeden önce temel güvenlik önlemlerini almanız şarttır. En önemli adımlardan biri, bir güvenlik duvarı (firewall) yapılandırmaktır. Ubuntu’da varsayılan olarak gelen UFW (Uncomplicated Firewall), bu konuda size yardımcı olacak kullanıcı dostu bir araçtır. UFW’yi etkinleştirerek, sunucunuza gelen ve giden ağ trafiğini kontrol altına alabilir, yalnızca izin verilen portlar üzerinden bağlantılara izin verebilirsiniz. MariaDB genellikle 3306 numaralı portu kullanır, bu yüzden bu portu açmanız gerekecektir. SSH (Secure Shell) bağlantısı için de 22 numaralı portun açık olması önemlidir.


sudo ufw enable
sudo ufw allow OpenSSH
sudo ufw allow 3306/tcp
sudo ufw status
    

Yukarıdaki komutlar sırasıyla UFW’yi etkinleştirir, SSH bağlantılarına izin verir, MariaDB’nin varsayılan portu olan 3306’ya TCP bağlantılarına izin verir ve güvenlik duvarının mevcut durumunu gösterir. Bu adımlar, sunucunuza yetkisiz erişimi büyük ölçüde kısıtlayarak MariaDB veritabanınızın daha güvende olmasını sağlar. Ayrıca, SSH bağlantınızı daha da güvenli hale getirmek için şifre yerine anahtar tabanlı kimlik doğrulama kullanmayı ve varsayılan SSH portunu değiştirmeyi düşünebilirsiniz. Bu hazırlıklar tamamlandığında, MariaDB’nin kurulumuna geçmek için sunucunuz artık hazırdır ve daha güvenli bir temel üzerine inşa edilmiş olacaktır.

MariaDB Kurulumu: Ubuntu Üzerinde Adım Adım Uygulama Rehberi

Ubuntu sunucunuzu hazırladıktan sonra, MariaDB’yi kurma zamanı gelmiştir. Bu süreç oldukça basittir ve Ubuntu’nun paket yönetim sistemi olan APT (Advanced Package Tool) sayesinde hızlıca tamamlanabilir. MariaDB’nin kararlı sürümünü veya belirli bir sürümünü kurmak isteyebilirsiniz. Genellikle Ubuntu depolarında bulunan sürüm, çoğu kullanım durumu için yeterince güncel ve kararlıdır. Ancak, en son özelliklere veya performans iyileştirmelerine ihtiyacınız varsa, MariaDB’nin kendi deposunu eklemeyi düşünebilirsiniz. Bu rehberde, Ubuntu’nun varsayılan depolarını kullanarak kurulumu anlatacağız, ki bu çoğu kullanıcı için en kolay ve önerilen yöntemdir.

MariaDB Sunucusunu Kurma İşlemi Nasıl Gerçekleşir?

MariaDB sunucu paketini kurmak için aşağıdaki komutu kullanın. Bu komut, MariaDB sunucu yazılımını ve bağımlılıklarını sisteminize yükleyecektir:


sudo apt install mariadb-server mariadb-client -y
    

Bu komut çalıştırıldıktan sonra, sisteminiz MariaDB paketlerini indirecek ve otomatik olarak kuracaktır. Kurulum sırasında sizden herhangi bir şifre belirlemeniz istenmeyebilir, çünkü MariaDB’nin yeni sürümlerinde root kullanıcısı varsayılan olarak Unix soket kimlik doğrulamasıyla çalışır. Bu, root kullanıcısının sistemin root kullanıcısı olarak giriş yapıldığında şifreye ihtiyaç duymadığı anlamına gelir.

MariaDB Servisinin Durumunu Nasıl Kontrol Ederiz?

Kurulum tamamlandıktan sonra, MariaDB servisinin düzgün bir şekilde çalışıp çalışmadığını kontrol etmek iyi bir uygulamadır. Bu kontrolü aşağıdaki systemctl komutu ile yapabilirsiniz:


sudo systemctl status mariadb
    

Eğer servis aktif ve çalışır durumda ise, çıktıda “active (running)” ifadesini görmelisiniz. Bu, MariaDB veritabanı sunucunuzun başarıyla başlatıldığı ve bağlantıları kabul etmeye hazır olduğu anlamına gelir. Eğer servis çalışmıyorsa, sudo systemctl start mariadb komutu ile başlatmayı deneyebilirsiniz.

MariaDB Kurulumunu Güvenli Hale Getirme: mysql_secure_installation

MariaDB’yi kurduktan sonra yapılması gereken en önemli adımlardan biri, mysql_secure_installation betiğini çalıştırmaktır. Bu betik, MariaDB sunucunuzun güvenliğini artırmak için bir dizi öneri sunar ve bunları uygulamanıza yardımcı olur. Bu adımlar, yetkisiz erişimi engellemek ve veritabanı ortamınızı daha sağlam hale getirmek için hayati öneme sahiptir.


sudo mysql_secure_installation
    

Bu komutu çalıştırdığınızda, aşağıdaki gibi bir dizi soruyla karşılaşacaksınız:

  1. “Enter current password for root (enter for none):” MariaDB’nin yeni sürümlerinde root kullanıcısı için varsayılan olarak bir şifre olmayabilir. Bu durumda sadece Enter tuşuna basarak devam edebilirsiniz.
  2. “Switch to unix_socket authentication? [Y/n]” Unix soket kimlik doğrulaması, root kullanıcısının sistemin root kullanıcısı olarak giriş yapıldığında şifreye ihtiyaç duymadan veritabanına erişmesine olanak tanır. Genellikle bu seçeneği kabul etmek (Y) güvenlidir.
  3. “Change the root password? [Y/n]” Bu adımda, MariaDB’nin root kullanıcısı için güçlü bir şifre belirlemeniz şiddetle tavsiye edilir. Özellikle uzak bağlantılara izin vermeyi planlıyorsanız bu çok önemlidir. “Y” tuşuna basarak yeni bir şifre belirleyin.
  4. “Remove anonymous users? [Y/n]” Anonim kullanıcılar, test amaçlı oluşturulmuş ve genellikle güvenlik zafiyeti oluşturan kullanıcılardır. Bunları kaldırmak (Y) her zaman iyi bir fikirdir.
  5. “Disallow root login remotely? [Y/n]” Root kullanıcısının yalnızca yerel olarak (sunucu üzerinden) erişebilmesi, uzaktan yetkisiz erişim riskini azaltır. “Y” seçeneğini tercih ederek uzaktan root girişini devre dışı bırakın.
  6. “Remove test database and access to it? [Y/n]” Test veritabanı ve ona erişim hakları, varsayılan olarak gelir ve üretim ortamlarında gereksizdir. Bunları kaldırmak (Y) güvenlik açısından olumlu bir adımdır.
  7. “Reload privilege tables now? [Y/n]” Önceki değişikliklerin etkili olması için yetki tablolarının yeniden yüklenmesi gerekir. “Y” tuşuna basarak bu işlemi onaylayın.

Bu adımları tamamladığınızda, MariaDB kurulumunuz temel düzeyde güvenli hale getirilmiş olacaktır. Artık veritabanınıza bağlanabilir ve kendi veritabanlarınızı ve kullanıcılarınızı oluşturmaya başlayabilirsiniz. Bu, MariaDB ile çalışmaya başlamak için sağlam bir temel oluşturur.

MariaDB Güvenliğini Sağlama: En İyi Uygulamalar ve İleri Düzey Önlemler Nelerdir?

MariaDB’nin kurulumunu tamamlamak ve mysql_secure_installation betiğini çalıştırmak, güvenlik yolculuğunuzun yalnızca ilk adımıdır. Veritabanınızın sürekli olarak güvende kalmasını sağlamak için bir dizi ek önlem ve en iyi uygulamayı hayata geçirmeniz gerekmektedir. Bu bölümde, MariaDB güvenliğini bir üst seviyeye taşıyacak kritik stratejileri ve ileri düzey önlemleri detaylandıracağız.

Kullanıcı Yönetimi ve Yetkilendirme: En Az Yetki Prensibi

Veritabanı güvenliğinin temel taşlarından biri, kullanıcı yönetimidir. Her uygulama veya kullanıcı için ayrı bir veritabanı kullanıcısı oluşturmalı ve bu kullanıcılara yalnızca ihtiyaç duydukları minimum yetkileri vermelisiniz. “En az yetki” prensibi, bir kullanıcının veya uygulamanın yalnızca görevini yerine getirmesi için gerekli olan verilere ve işlemlere erişim iznine sahip olması gerektiği anlamına gelir. Örneğin, bir web uygulaması sadece belirli bir veritabanındaki tablolara okuma ve yazma iznine sahip olmalı, ancak veritabanı oluşturma veya kullanıcı yönetimi gibi ayrıcalıklara sahip olmamalıdır.

Yeni bir veritabanı ve kullanıcı oluşturmak için aşağıdaki komutları kullanabilirsiniz:


sudo mysql -u root -p

-- MySQL shell'indeyken:
CREATE DATABASE my_application_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'GucluSifrenizBurada!';
GRANT SELECT, INSERT, UPDATE, DELETE ON my_application_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
    

Yukarıdaki örnekte, my_application_db adında bir veritabanı oluşturulmuş, app_user adında ve sadece yerel bağlantılara izin veren bir kullanıcı tanımlanmış ve bu kullanıcıya my_application_db üzerindeki temel CRUD (Oluşturma, Okuma, Güncelleme, Silme) yetkileri verilmiştir. Şifrenizi daima karmaşık ve tahmin edilemez tutun.

Ağ Bağlantısı Güvenliği: bind-address ve Güvenlik Duvarı Kuralları

MariaDB sunucunuzun hangi ağ arayüzlerinden bağlantı kabul edeceğini kontrol etmek, güvenlik açısından çok önemlidir. Varsayılan olarak, MariaDB tüm arayüzlerden bağlantı kabul edebilir. Ancak, veritabanınızın yalnızca belirli IP adreslerinden veya yerel sunucudan erişilebilir olmasını sağlamak, saldırı yüzeyini önemli ölçüde azaltır. Bunu /etc/mysql/mariadb.conf.d/50-server.cnf (veya benzeri) dosyasındaki bind-address ayarı ile yapabilirsiniz.


sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    

Dosyayı açtıktan sonra, [mysqld] bölümünün altına veya mevcutsa bu ayarı aşağıdaki gibi düzenleyin:


[mysqld]
...
bind-address = 127.0.0.1
...
    

bind-address = 127.0.0.1 olarak ayarlamak, MariaDB’nin sadece yerel makineden gelen bağlantıları kabul etmesini sağlar. Eğer veritabanınıza başka bir sunucudan (örneğin bir uygulama sunucusu) erişmeniz gerekiyorsa, bind-address değerini o sunucunun IP adresine veya 0.0.0.0 (tüm arayüzler) olarak ayarlamanız ve güvenlik duvarı kurallarınızı buna göre düzenlemeniz gerekir. Ancak 0.0.0.0 kullanırken çok dikkatli olun ve güvenlik duvarınızın çok sıkı olduğundan emin olun.

UFW (Uncomplicated Firewall) kurallarınızı da gözden geçirin. Sadece MariaDB’ye erişmesi gereken belirli IP adreslerinden gelen bağlantılara izin verin. Örneğin, belirli bir uygulama sunucusundan erişim için:


sudo ufw allow from 192.168.1.100 to any port 3306
    

Bu komut, yalnızca 192.168.1.100 IP adresinden gelen 3306 portu üzerindeki bağlantılara izin verir.

Veri Şifrelemesi: TLS/SSL Kullanımı

MariaDB sunucusu ile istemciler arasındaki iletişimin şifrelenmesi, hassas verilerin ağ üzerinden güvenli bir şekilde aktarılmasını sağlar. TLS (Transport Layer Security) veya SSL (Secure Sockets Layer) kullanımı, man-in-the-middle saldırılarına karşı koruma sağlar. MariaDB, kendi içinde TLS/SSL desteği sunar. Bunu etkinleştirmek için sertifika ve anahtar dosyalarına ihtiyacınız olacaktır. Let’s Encrypt gibi hizmetlerden ücretsiz sertifikalar alabilir veya kendi kendinize imzalı sertifikalar oluşturabilirsiniz.

TLS/SSL’i yapılandırmak için /etc/mysql/mariadb.conf.d/50-server.cnf dosyasında aşağıdaki ayarları yapmanız gerekecektir:


[mysqld]
...
ssl-cert=/etc/mysql/certs/server-cert.pem
ssl-key=/etc/mysql/certs/server-key.pem
ssl-ca=/etc/mysql/certs/ca.pem
...
    

Bu dosyaları uygun yollara yerleştirdikten ve MariaDB servisini yeniden başlattıktan sonra, istemci bağlantıları şifreleme kullanmaya zorlanabilir. Bu, özellikle hassas verilerle çalışan uygulamalar için vazgeçilmez bir güvenlik katmanıdır.

Denetim (Auditing) ve Loglama

MariaDB, veritabanı etkinliklerini izlemek için güçlü loglama yetenekleri sunar. Hata logları, genel sorgu logları, ikili loglar (binary logs) ve yavaş sorgu logları, sistem yöneticilerine veritabanının durumu hakkında değerli bilgiler sağlar. Güvenlik açısından, özellikle denetim logları (audit logs) önemlidir. MariaDB’nin bazı sürümleri ve eklentileri denetim eklentileri sunar, bu sayede kimin ne zaman hangi sorguyu çalıştırdığını takip edebilirsiniz. Bu logları düzenli olarak gözden geçirmek, şüpheli etkinlikleri tespit etmek ve olası güvenlik ihlallerine hızla yanıt vermek için kritik öneme sahiptir.


-- Genel sorgu logunu etkinleştirmek için (sadece sorun giderme amaçlı önerilir, performans etkisi vardır)
general_log_file = /var/log/mysql/mysql.log
general_log = 1
    

Bu ayarları my.cnf dosyanıza ekleyebilir ve ardından servisi yeniden başlatabilirsiniz.

Düzenli Yedekleme ve Kurtarma Planları

En iyi güvenlik önlemleri bile %100 garanti vermez. Bu nedenle, verilerinizin düzenli olarak yedeklenmesi ve bir felaket durumunda hızlıca kurtarılabilmesi için sağlam bir planınızın olması hayati önem taşır. Yedeklemeler, hem veritabanının tutarlı bir anlık görüntüsünü almalı hem de bu yedeklerin güvenli bir yerde (tercihen farklı bir sunucu veya bulut depolama) saklanmasını sağlamalıdır. MariaDB için mariadb-dump veya mysqldump gibi araçlar kullanılarak mantıksal yedeklemeler alınabilir. Fiziksel yedeklemeler için ise Percona XtraBackup gibi araçlar tercih edilebilir.


sudo mariadb-dump -u root -p my_application_db > /var/backups/mysql/my_application_db_$(date +%F).sql
    

Bu komut, my_application_db veritabanının bir yedeğini alır ve tarihle etiketlenmiş bir SQL dosyasına kaydeder. Yedeklemelerinizi otomatikleştirmek için cron işleri kullanabilirsiniz. Ayrıca, yedekleri düzenli olarak test ederek kurtarma prosedürünüzün çalıştığından emin olun. Güvenlik, sadece saldırıları önlemekle kalmaz, aynı zamanda bir ihlal durumunda verilerinizi koruma ve geri yükleme yeteneğini de içerir.

Performans Optimizasyonu ve İleri Düzey Ayarlar: Sunucunuzu Nasıl Hızlandırırsınız?

MariaDB kurulumu ve güvenliğinin sağlanmasının ardından, veritabanınızın en iyi performansı göstermesini sağlamak için optimizasyon adımları atmak önemlidir. Performans optimizasyonu, özellikle yüksek trafikli uygulamalar ve büyük veri kümeleriyle çalışırken kritik hale gelir. Doğru yapılandırma, sorgu hızlarını artırabilir, disk I/O’yu azaltabilir ve genel sunucu yanıt süresini iyileştirebilir. Bu bölümde, MariaDB performansını artırmak için kullanabileceğiniz bazı ileri düzey ayarları ve stratejileri inceleyeceğiz.

my.cnf Dosyası ile Yapılandırma Ayarları

MariaDB’nin temel yapılandırma dosyası genellikle /etc/mysql/my.cnf veya /etc/mysql/mariadb.conf.d/50-server.cnf gibi yollarda bulunur. Bu dosya, MariaDB sunucusunun davranışını kontrol eden birçok parametreyi içerir. Sunucunuzun donanım özelliklerine (RAM, CPU, disk tipi) ve iş yükünüze göre bu ayarları optimize etmek, performansı önemli ölçüde artırabilir.

Bazı önemli parametreler ve açıklamaları:

  • innodb_buffer_pool_size: Bu, InnoDB depolama motorunun veri ve indeksleri önbelleğe almak için kullandığı bellek miktarıdır. Bu, en önemli performans ayarlarından biridir. Genellikle sunucu RAM’inin %50-70’i bu değere ayrılır. Örneğin, 8GB RAM’e sahip bir sunucuda 4GB veya 6GB ayırmak mantıklı olabilir.
  • query_cache_size: MySQL’in eski sürümlerinde popüler olan bu önbellek, aynı sorguların sonuçlarını depolar. Ancak MariaDB’nin modern sürümlerinde (10.1 ve sonrası) bu özellik varsayılan olarak devre dışı bırakılmıştır veya kaldırılmıştır çünkü yüksek eşzamanlılık durumlarında performans sorunlarına yol açabilir. Genellikle devre dışı bırakılması önerilir (query_cache_size = 0, query_cache_type = 0).
  • max_connections: Sunucunun aynı anda kabul edebileceği maksimum istemci bağlantısı sayısıdır. Çok düşük ayarlanırsa bağlantı hatalarına yol açabilir, çok yüksek ayarlanırsa sistem kaynaklarını tüketebilir. Uygulamanızın ihtiyaçlarına göre ayarlanmalıdır.
  • thread_cache_size: MariaDB’nin yeniden kullanmak üzere sakladığı iş parçacığı sayısıdır. Yüksek trafikli sunucularda bu değeri artırmak, yeni bağlantılar için iş parçacığı oluşturma maliyetini azaltabilir.
  • key_buffer_size: MyISAM depolama motoru için indeks önbellek boyutudur. Eğer InnoDB kullanıyorsanız, bu değerin çok büyük olmasına gerek yoktur.
  • tmp_table_size ve max_heap_table_size: Bellekte oluşturulan geçici tabloların maksimum boyutunu belirler. Büyük ve karmaşık sorgular çalıştırıyorsanız bu değerleri artırmak, disk yerine bellekte işlem yapılmasına yardımcı olabilir.
  • innodb_flush_log_at_trx_commit: İşlem loglarının diske ne zaman yazılacağını kontrol eder. 1 (varsayılan) en yüksek veri güvenliğini sağlar ancak performansı biraz düşürebilir. 0 veya 2 daha iyi performans sunar ancak elektrik kesintisi gibi durumlarda veri kaybı riski taşır.

Bu ayarları /etc/mysql/mariadb.conf.d/50-server.cnf dosyasında düzenledikten sonra, değişikliklerin etkili olması için MariaDB servisini yeniden başlatmanız gerekir:


sudo systemctl restart mariadb
    

İndeksleme Stratejileri ve Sorgu Optimizasyonu

Veritabanı performansının büyük bir kısmı, sorguların ne kadar verimli çalıştığına bağlıdır. Doğru indeksleme, sorguların tabloları taramak yerine doğrudan ilgili verilere ulaşmasını sağlayarak sorgu sürelerini önemli ölçüde azaltabilir. Sıkça kullanılan sütunlara (özellikle WHERE, JOIN, ORDER BY ve GROUP BY yan tümcelerinde) indeks eklemek, performansı artırmanın en etkili yollarından biridir. Ancak, aşırı indeksleme de yazma işlemlerini yavaşlatabilir, bu yüzden dengeyi bulmak önemlidir.

Sorgularınızı analiz etmek için EXPLAIN komutunu kullanın. Bu komut, MariaDB’nin bir sorguyu nasıl yürüteceğini gösterir ve potansiyel performans darboğazlarını belirlemenize yardımcı olur:


EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
    

Çıktıyı inceleyerek, sorgunun indeksleri kullanıp kullanmadığını, tam tablo taraması yapıp yapmadığını veya gereksiz geçici tablolar oluşturup oluşturmadığını görebilirsiniz. Buna göre indekslerinizi veya sorgularınızı optimize edebilirsiniz.

MariaDB Monitörleme Araçları

Performans optimizasyonu, sürekli bir izleme ve ayarlama sürecidir. MariaDB sunucunuzun sağlığını ve performansını izlemek için çeşitli araçlar kullanabilirsiniz:

  • SHOW STATUS ve SHOW VARIABLES: MariaDB istemcisinden çalıştırabileceğiniz bu komutlar, sunucunun çalışma zamanı istatistiklerini ve yapılandırma değişkenlerini gösterir.
  • MariaDB Monitor (mysqladmin): Komut satırından basit izleme ve yönetim görevleri için kullanılabilir.
  • Prometheus ve Grafana: Daha gelişmiş izleme için MariaDB ihracatçısını kullanarak Prometheus ile metrikleri toplayabilir ve Grafana ile görselleştirebilirsiniz. Bu kombinasyon, zaman içindeki performans eğilimlerini izlemek ve anormallikleri tespit etmek için güçlü bir çözüm sunar.
  • Percona Monitoring and Management (PMM): MariaDB için kapsamlı bir izleme, analiz ve yönetim platformudur.

Bu araçlar sayesinde, CPU kullanımı, bellek tüketimi, disk I/O, aktif bağlantılar, kilitlenme durumları ve yavaş sorgular gibi kritik metrikleri takip edebilir, böylece performans sorunlarını proaktif olarak tespit edip çözebilirsiniz. Performans optimizasyonu, sunucunuzun donanımını en verimli şekilde kullanmanızı sağlayarak, uygulamalarınızın daha hızlı ve daha duyarlı çalışmasına olanak tanır.

Vaka Analizi: Küçük Bir E-Ticaret Sitesi İçin MariaDB Kurulumu ve Güvenliği

Şimdiye kadar MariaDB’nin kurulumu, güvenliği ve performansı hakkında teorik bilgiler edindik. Bu bölümde, öğrendiklerimizi gerçek dünya bir senaryoya uygulayarak pekiştirelim. Küçük bir e-ticaret sitesi olan “HızlıSepet” için MariaDB kurulumu ve güvenlik adımlarını ele alacağız. HızlıSepet, ürün kataloglarını, müşteri bilgilerini, sipariş geçmişlerini ve ödeme işlemlerini depolamak için MariaDB’ye güveniyor.

Senaryo: HızlıSepet E-Ticaret Platformu

HızlıSepet, başlangıç seviyesinde bir e-ticaret sitesidir ve günde ortalama 500-1000 tekil ziyaretçi beklemektedir. Uygulama, PHP tabanlı bir çerçeve (örneğin Laravel) kullanmakta ve Ubuntu 22.04 LTS üzerinde çalışan tek bir sanal sunucuda (VPS) barındırılmaktadır. Bu sunucu hem web sunucusunu (Nginx) hem de MariaDB veritabanını barındıracaktır. Ana hedefler, verilerin güvenliğini sağlamak, performansı optimize etmek ve gelecekteki büyümeye uygun bir altyapı oluşturmaktır.

Adım 1: Ubuntu Sunucusunu Hazırlama ve Temel Güvenlik

HızlıSepet’in sunucusu için ilk olarak genel güvenlik ve güncellemeler yapılır:


sudo apt update && sudo apt upgrade -y
sudo apt install ufw -y
sudo ufw enable
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full' # Web sunucusu için
sudo ufw allow 3306/tcp    # MariaDB için
sudo ufw status
    

Bu adımlarla, sunucu güncellenir ve UFW etkinleştirilerek SSH, Nginx ve MariaDB için gerekli portlar açılır. Bu, dışarıdan gelebilecek yetkisiz erişim denemelerine karşı ilk savunma hattını oluşturur.

Adım 2: MariaDB Kurulumu ve Güvenli Hale Getirme

MariaDB, Ubuntu’nun varsayılan depolarından kurulur:


sudo apt install mariadb-server mariadb-client -y
sudo systemctl status mariadb
    

Ardından, mysql_secure_installation betiği çalıştırılır:


sudo mysql_secure_installation
    

Bu aşamada, MariaDB root kullanıcısı için güçlü bir şifre belirlenir, anonim kullanıcılar kaldırılır, root kullanıcısının uzaktan girişi engellenir ve test veritabanı silinir. HızlıSepet’in hassas müşteri ve sipariş verileri düşünüldüğünde, bu adımlar veri bütünlüğü ve gizliliği için hayati öneme sahiptir.

Adım 3: E-Ticaret Uygulaması İçin Veritabanı ve Kullanıcı Oluşturma

HızlıSepet uygulaması için özel bir veritabanı ve kullanıcı oluşturulur. Bu, “en az yetki” prensibine uygun olarak yapılır.


sudo mysql -u root -p
    

MariaDB istemcisinde:


CREATE DATABASE hizlisepet_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'hizlisepet_user'@'localhost' IDENTIFIED BY 'CokGucluE_TicaretSifresi!';
GRANT SELECT, INSERT, UPDATE, DELETE ON hizlisepet_db.* TO 'hizlisepet_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
    

hizlisepet_user kullanıcısı sadece hizlisepet_db veritabanına yerel olarak erişebilir ve sadece CRUD işlemlerini yapabilir. Bu, uygulamanın veritabanı erişimini kısıtlayarak olası bir güvenlik ihlalinde zararı minimize eder.

Adım 4: Ağ Güvenliği ve Optimizasyon

HızlıSepet’in MariaDB’si sadece yerel web sunucusu tarafından kullanılacağından, bind-address ayarı 127.0.0.1 olarak ayarlanır. Bu, veritabanının dış dünyadan tamamen izole edilmesini sağlar.


sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    

Dosyada aşağıdaki satır bulunur veya eklenir:


[mysqld]
...
bind-address = 127.0.0.1
...
    

Ardından MariaDB servisi yeniden başlatılır:


sudo systemctl restart mariadb
    

Performans için, HızlıSepet’in 8GB RAM’e sahip sunucusunda innodb_buffer_pool_size değeri 4GB olarak ayarlanır. Bu, sık erişilen verilerin bellekte tutularak disk I/O’sunun azaltılmasını sağlar.

Adım 5: Yedekleme Stratejisi

HızlıSepet için düzenli yedeklemeler kritik öneme sahiptir. Her gece otomatik yedekleme için bir cron işi oluşturulur:


sudo crontab -e
    

Aşağıdaki satır eklenir (örneğin gece 02:00’de yedekleme için):


0 2 * * * /usr/bin/mariadb-dump -u hizlisepet_user -p'CokGucluE_TicaretSifresi!' hizlisepet_db > /var/backups/mysql/hizlisepet_db_$(date +\%F).sql
0 2 * * * find /var/backups/mysql -type f -name "*.sql" -mtime +7 -delete # 7 günden eski yedekleri sil
    

Bu yedekler daha sonra sunucu dışındaki güvenli bir bulut depolama alanına (örneğin S3 veya Google Cloud Storage) senkronize edilir. Bu, sunucu arızası durumunda dahi verilerin güvende olmasını sağlar.

Bu vaka analizi, MariaDB’nin bir e-ticaret platformu için nasıl kurulduğunu ve güvence altına alındığını göstermektedir. Her adım, HızlıSepet’in verilerini korumak ve uygulamasının sorunsuz çalışmasını sağlamak için tasarlanmıştır. Bu yaklaşım, benzer küçük ve orta ölçekli uygulamalar için sağlam bir temel oluşturur.

HTML ve CSS Entegrasyonu: Mobil Uyumluluk İçin İpuçları

Bu makalenin HTML yapısı, modern web standartlarına uygun olarak tasarlanmıştır ve mobil uyumluluğu desteklemektedir. Mobil uyumluluk, günümüzde bir web sitesinin başarısı için vazgeçilmez bir unsurdur. Kullanıcıların farklı ekran boyutlarına sahip cihazlardan (akıllı telefonlar, tabletler, dizüstü bilgisayarlar) içeriğe sorunsuz bir şekilde erişebilmesi gerekmektedir. Bu bağlamda, HTML’in semantik kullanımı ve CSS’in esnekliği, mobil uyumlu bir deneyim sunmanın temelini oluşturur.

Bu makalede kullanılan HTML etiketleri (

,

,

,
    ,
      ,
      ,  gibi), içeriğin yapısını açıkça belirtir ve tarayıcılar tarafından kolayca yorumlanabilir. Semantik HTML kullanımı, içeriğin anlamını ve amacını vurgular, bu da arama motorlarının içeriği daha iyi anlamasına ve erişilebilirlik araçlarının (ekran okuyucuları gibi) kullanıcılar için daha iyi bir deneyim sunmasına yardımcı olur. Ayrıca, bu etiketlerin varsayılan tarayıcı stilleri genellikle mobil cihazlarda da iyi görünür. Örneğin, paragraflar kendiliğinden akıcıdır ve ekran genişliğine göre metni sarar; listeler ve başlıklar da benzer şekilde duyarlıdır.
          

      Mobil uyumluluğun bir diğer kritik bileşeni ise CSS (Cascading Style Sheets) kullanımıdır. CSS, içeriğin görsel sunumunu kontrol eder. Mobil uyumlu bir tasarım elde etmek için genellikle "duyarlı tasarım" (responsive design) yaklaşımları kullanılır. Bu yaklaşım, farklı ekran boyutlarına ve çözünürlüklerine dinamik olarak uyum sağlayan tasarımlar oluşturmayı hedefler. Duyarlı tasarımın temelinde ise media query'ler yatar.

      Media query'ler, belirli koşullar (örneğin ekran genişliği, cihaz yönü) karşılandığında farklı CSS kurallarının uygulanmasını sağlar. Bu sayede, aynı HTML yapısı farklı cihazlarda farklı şekillerde görüntülenebilir. Örneğin, küçük ekranlarda menülerin dikey olarak sıralanması veya sütunların alt alta gelmesi sağlanabilir. İşte bir media query örneği:

      
      /* Genel stil tanımlamaları */
      body {
          font-family: Arial, sans-serif;
          line-height: 1.6;
          margin: 0 auto;
          padding: 20px;
          max-width: 1200px;
      }
      
      h2 {
          color: #333;
          font-size: 2em;
      }
      
      /* 768px genişliğinden küçük ekranlar için stiller */
      @media screen and (max-width: 768px) {
          body {
              padding: 10px;
          }
          h2 {
              font-size: 1.5em;
          }
          /* Tabloların küçük ekranlarda yatay kaydırılabilir olmasını sağlama */
          table {
              display: block;
              overflow-x: auto;
              white-space: nowrap; /* İçeriğin satır atlamasını engeller */
          }
          th, td {
              min-width: 120px; /* Her hücre için minimum genişlik */
          }
      }
      
      /* 480px genişliğinden küçük ekranlar için daha küçük fontlar */
      @media screen and (max-width: 480px) {
          h2 {
              font-size: 1.2em;
          }
          p, li {
              font-size: 0.9em;
          }
      }
          

      Yukarıdaki CSS örneği, @media screen and (max-width: 768px) ve @media screen and (max-width: 480px) kuralları ile farklı ekran genişliklerinde yazı tiplerini, dolguları ve özellikle tabloları nasıl farklılaştırabileceğimizi göstermektedir. Tabloların küçük ekranlarda yatay olarak kaydırılabilir hale getirilmesi, içeriğin sıkışmasını önleyerek okunabilirliği artırır. Bu makalede HTML elementlerine doğrudan stil verilmemesi (inline style), CSS'in bu tür dinamik düzenlemeleri merkezi bir yerden yönetmesini kolaylaştırır ve hem açık (light mode) hem de koyu (dark mode) temalarda sorunsuz bir görünüm sağlar. Metin rengi, arka plan rengi ve kenarlık rengi gibi özellikler, tarayıcının veya kullanıcının tercih ettiği temadan miras alınarak (inherit) tutarlı bir görsel deneyim sunar.

      Sonuç ve Sıkça Sorulan Sorular (SSS)

      Bu kapsamlı rehberde, MariaDB'yi Ubuntu sunucunuza nasıl kuracağınızı, veritabanınızı nasıl güvence altına alacağınızı ve performansını nasıl optimize edeceğinizi adım adım inceledik. MariaDB, güçlü, esnek ve açık kaynaklı bir veritabanı çözümü olarak modern uygulamalar için mükemmel bir seçimdir. Ancak, kurulum tek başına yeterli değildir; sürekli güvenlik denetimleri, düzenli yedeklemeler ve performans izleme, veritabanınızın uzun ömürlü ve sorunsuz çalışmasını sağlamak için hayati öneme sahiptir. Unutmayın ki güvenlik, tek seferlik bir işlem değil, sürekli bir süreçtir. Bu rehberdeki adımları uygulayarak, MariaDB veritabanlarınız için sağlam ve güvenli bir temel oluşturmuş olacaksınız. Güvenli bir veritabanı altyapısı, uygulamanızın başarısı ve kullanıcılarınızın verilerinin korunması için kritik bir yatırımdır.

      Sıkça Sorulan Sorular (SSS)

      MariaDB ve MySQL arasındaki temel fark nedir?
      MariaDB, MySQL'in açık kaynaklı bir çatalıdır (fork). Temel olarak aynı kod tabanını paylaşsalar da, MariaDB genellikle daha fazla yeni özellik, performans iyileştirmesi ve depolama motoru (örneğin ColumnStore) sunar. Ayrıca, tamamen açık kaynaklı kalma taahhüdüyle bilinir.
      MariaDB root şifremi unuttum, nasıl sıfırlayabilirim?
      MariaDB servisini durdurup, güvenli modda (şifresiz) başlatarak root şifresini sıfırlayabilirsiniz. İlk olarak, sudo systemctl stop mariadb komutuyla servisi durdurun. Ardından, sudo mysqld_safe --skip-grant-tables & komutuyla güvenli modda başlatın. Daha sonra mysql -u root ile bağlanıp ALTER USER 'root'@'localhost' IDENTIFIED BY 'YeniGucluSifre!'; komutunu çalıştırarak şifreyi sıfırlayabilirsiniz. İşlem bitince MariaDB servisini normal şekilde yeniden başlatmayı unutmayın.
      MariaDB performansını etkileyen en önemli faktörler nelerdir?
      MariaDB performansını etkileyen en önemli faktörler arasında sunucu donanımı (RAM, CPU, SSD kullanımı), veritabanı yapılandırma ayarları (özellikle innodb_buffer_pool_size), veritabanı şeması tasarımı (normalizasyon, indeksleme), sorgu optimizasyonu ve uygulama tarafındaki veritabanı bağlantı yönetimi yer alır.
      MariaDB için uzaktan erişimi nasıl güvenli hale getirebilirim?
      Uzaktan erişimi güvenli hale getirmek için öncelikle güçlü şifreler kullanın ve her kullanıcıya sadece ihtiyaç duyduğu yetkileri verin. bind-address ayarını belirli IP adresleriyle sınırlayın ve güvenlik duvarınızda sadece bu IP'lerden gelen 3306 portu bağlantılarına izin verin. En önemlisi, tüm uzaktan bağlantılar için TLS/SSL şifrelemesi kullanın.
      MariaDB yedeklemeleri ne sıklıkla yapılmalı?
      Yedekleme sıklığı, veri kaybına ne kadar tolerans gösterebileceğinize (RPO - Recovery Point Objective) bağlıdır. Hassas ve sık güncellenen veriler için günlük veya hatta saatlik yedeklemeler önerilir. Daha az kritik veriler için haftalık yedeklemeler yeterli olabilir. Önemli olan, yedekleme planınızın iş sürekliliği gereksinimlerinizi karşıladığından emin olmaktır.

      Yorumlar
      İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
      Yorum Yaz

      Bir yanıt yazın

      E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

      Gönder

      E-posta Bülteni
      Yazılım Topluluğuna Katılın
      En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.