MySQL, dünyanın en yaygın kullanılan ilişkisel veritabanı yönetim sistemlerinden biridir. Açık kaynaklı yapısı, SQL diline dayalı sorgulama gücü ve web uygulamalarındaki köklü geçmişiyle haber siteleri dahil sayısız projenin veri katmanını taşır. Bu yazıda MySQL'in ne olduğunu, nasıl çalıştığını ve hangi durumlarda doğru seçim olduğunu adım adım ele alıyoruz.

MySQL Nedir?

MySQL, verileri satır ve sütunlardan oluşan tablolarda saklayan bir ilişkisel veritabanı yönetim sistemidir (RDBMS). Verilere erişmek ve onları değiştirmek için standart SQL (Structured Query Language) dilini kullanır. İstemci-sunucu mimarisiyle çalışır: bir sunucu süreci verileri yönetir, uygulamalar ise ağ üzerinden bu sunucuya bağlanarak sorgu gönderir.

Proje ilk olarak İsveç kökenli MySQL AB tarafından geliştirildi. Sonraki yıllarda Sun Microsystems, ardından Oracle Corporation çatısı altına girdi. Bugün MySQL, hem açık kaynaklı bir Community sürümü hem de Oracle tarafından sunulan ticari sürümlerle dağıtılmaktadır.

Kısa Bir Tarihçe

MySQL'in geçmişi 1990'lı yılların ortalarına uzanır. Geliştirilme sürecinde açık kaynak lisanslamayla geniş bir topluluk edindi ve LAMP (Linux, Apache, MySQL, PHP/Perl/Python) yığınının temel bileşenlerinden biri hâline geldi. Bu yığın, erken dönem web'in büyük bölümünü çalıştıran fiilî standarttı ve MySQL'in yaygınlaşmasında belirleyici rol oynadı.

Zaman içinde MySQL, basit içerik sitelerinden büyük ölçekli platformlara kadar geniş bir yelpazede kullanıldı. Sunduğu düşük giriş bariyeri, bol miktarda öğrenme kaynağı ve neredeyse her programlama diline ait olgun sürücüler (driver), onu geliştiriciler için tanıdık bir seçenek hâline getirdi.

Oracle'ın MySQL'i devralmasının ardından, projenin özgür kalmasını isteyen kurucu ekip bir çatal (fork) başlattı; bu çatal bugün ayrı bir proje olan MariaDB olarak gelişmeye devam ediyor. İki proje büyük ölçüde uyumlu olsa da zamanla özellik, depolama motoru ve sürüm numaralandırması düzeyinde ayrışmıştır. Bu nedenle bir projede iki sistemin birebir aynı davranacağını varsaymak yerine, kullanılan sürümün belgelerine bakmak sağlıklıdır.

MySQL Nasıl Çalışır? İstemci-Sunucu Mimarisi

MySQL bir sunucu süreci (genellikle mysqld) olarak çalışır. Uygulamalar ağ soketi veya yerel soket üzerinden bağlanır, kimlik doğrulamasından geçer ve SQL ifadeleri gönderir. Sunucu bu ifadeleri ayrıştırır, bir sorgu planı üretir, veriyi depolama motorundan okur veya yazar ve sonucu istemciye döndürür.

Bu ayrım önemlidir: uygulama kodunuz verinin diskte nasıl saklandığını bilmek zorunda değildir. Yalnızca SQL konuşur; gerisini sunucu halleder. Aynı sunucuya farklı dillerde yazılmış birçok uygulama eşzamanlı bağlanabilir, çünkü MySQL bağlantıları ve eşzamanlılığı kendisi yönetir. Bu model, veri katmanını uygulama katmanından net bir biçimde ayırır ve ölçeklemeyi kolaylaştırır.

  • Bağlantı katmanı: kimlik doğrulama, oturum yönetimi ve güvenlik.
  • SQL katmanı: ayrıştırma, iyileştirici (optimizer), önbellek ve yürütme.
  • Depolama motoru katmanı: verinin diskte nasıl tutulduğunu belirleyen değiştirilebilir katman.
  • Dosya sistemi: tablo verileri, indeksler ve günlük (log) dosyaları.

Depolama Motorları: InnoDB ve MyISAM

Depolama motoru, bir tablonun verisini fiziksel olarak nasıl sakladığını, kilitleme ve işlem (transaction) davranışını belirler. MySQL uzun süredir çok sayıda motoru destekler; günümüzde varsayılan ve en yaygın önerilen motor InnoDB'dir.

ÖzellikInnoDBMyISAM
İşlem (ACID) desteğiVarYok
Kilitleme düzeyiSatır düzeyiTablo düzeyi
Yabancı anahtar (foreign key)DesteklerDesteklemez
Çökme sonrası kurtarmaGünlük tabanlı, güçlüSınırlı
Tipik kullanımÇoğu OLTP iş yüküAğırlıklı okuma, basit senaryolar

Temel SQL Örnekleri

MySQL ile çalışmak, tabloları tanımlamak ve verileri sorgulamak için SQL yazmak demektir. Aşağıdaki örnek, basit bir haber tablosu oluşturur ve birkaç temel işlem gösterir.

sql
-- Bir veritabanı ve tablo oluşturma
CREATE DATABASE haber_sitesi
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE haber_sitesi;

CREATE TABLE haberler (
  id        BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  baslik    VARCHAR(200) NOT NULL,
  govde     MEDIUMTEXT,
  yayin_tarihi DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  goruntulenme INT UNSIGNED NOT NULL DEFAULT 0
) ENGINE=InnoDB;
sql
-- Veri ekleme ve sorgulama
INSERT INTO haberler (baslik, govde)
VALUES ('Ornek Baslik', 'Haber govdesi burada.');

-- Son 10 haberi tarihe gore getir
SELECT id, baslik, yayin_tarihi
FROM haberler
ORDER BY yayin_tarihi DESC
LIMIT 10;

-- Bir sutunda indeks olusturarak aramayi hizlandir
CREATE INDEX idx_yayin ON haberler (yayin_tarihi);

Veri Tipleri ve Şema Tasarımı

İlişkisel bir veritabanında her sütunun bir veri tipi vardır ve bu tip, hem depolamayı hem de sorgu davranışını etkiler. MySQL sayısal, metinsel, tarih-zaman ve ikili (binary) veri tipleri için geniş bir yelpaze sunar. Doğru tip seçimi hem disk kullanımını azaltır hem de karşılaştırma ve sıralama işlemlerini hızlandırır.

KategoriÖrnek TiplerTipik Kullanım
Tam sayıTINYINT, INT, BIGINTKimlikler, sayaçlar, miktarlar
OndalıkDECIMAL, FLOAT, DOUBLEPara (DECIMAL), bilimsel değerler
MetinVARCHAR, TEXTBaşlıklar, açıklamalar, gövde metni
Tarih/ZamanDATE, DATETIME, TIMESTAMPYayın tarihi, kayıt zamanı
DiğerJSON, ENUM, BLOBYapılandırılmış alanlar, ikili veri

Şema tasarımında normalizasyon, tekrarlayan verileri ayrı tablolara ayırarak tutarlılığı artırır. MySQL ayrıca JSON veri tipiyle yarı yapılandırılmış veriyi de saklayabilir; bu, katı bir şemaya sığmayan alanlar için esneklik sağlar.

İndeksler ve Performans

İndeksler, veritabanının belirli satırları tüm tabloyu taramadan bulmasını sağlayan veri yapılarıdır. InnoDB, birincil anahtarı bir kümelenmiş indeks (clustered index) olarak saklar; ikincil indeksler ise bu birincil anahtara işaret eder. Doğru indeks tasarımı, sorgu performansındaki en belirleyici etkenlerden biridir.

Bir sorgunun yavaş çalışmasının en sık nedeni, filtreleme veya sıralama yapılan sütunda uygun bir indeksin bulunmamasıdır. Ancak indeks eklemek her zaman ücretsiz değildir: her yazma işleminde ilgili indekslerin de güncellenmesi gerekir. Bu nedenle indeks stratejisi, okuma ve yazma dengesine göre kurulur.

  • Sık filtrelenen ve sıralanan sütunlara indeks eklemek okuma sorgularını hızlandırır.
  • Aşırı indeks ise yazma işlemlerini yavaşlatır ve disk kullanımını artırır.
  • EXPLAIN ifadesi, bir sorgunun hangi indeksleri kullandığını görmenizi sağlar.
sql
-- Bir sorgunun yurutme planini incele
EXPLAIN SELECT id, baslik
FROM haberler
WHERE yayin_tarihi >= '2026-01-01'
ORDER BY yayin_tarihi DESC;

Replikasyon ve Yüksek Erişilebilirlik

MySQL, bir sunucudaki değişikliklerin bir veya daha fazla kopyaya aktarılmasını sağlayan replikasyon yeteneklerine sahiptir. Klasik yaklaşımda bir birincil (primary) sunucu yazma işlemlerini alır, ikincil (replica) sunucular ise değişiklikleri ikili günlük (binary log) üzerinden takip eder.

  • Okuma ölçekleme: okuma trafiğini birden çok kopyaya dağıtma.
  • Yedeklilik: birincil sunucu arızalanırsa bir kopyanın devralması.
  • Coğrafi dağıtım: farklı bölgelerde veri kopyaları tutma.

Replikasyon, tek başına bir yedekleme yöntemi değildir; bir kopyada yanlışlıkla silinen veri, replikasyon yoluyla diğer kopyalara da yansıyabilir. Bu nedenle replikasyon, düzenli yedeklerin yerini almaz, onları tamamlar. İyi tasarlanmış bir kurulumda replikasyon yüksek erişilebilirlik sağlarken, ayrı yedekler felaket kurtarma senaryolarını güvence altına alır.

Kullanıcı Yönetimi ve Güvenlik

MySQL, ayrıntılı bir yetkilendirme sistemine sahiptir. Kullanıcılar oluşturulur, her kullanıcıya belirli veritabanları ve tablolar üzerinde belirli ayrıcalıklar (privilege) verilir. En az ayrıcalık ilkesi (least privilege) gereği, bir uygulamaya yalnızca ihtiyaç duyduğu izinleri vermek güvenliğin temelidir.

sql
-- Uygulamaya ozel kisitli bir kullanici olustur
CREATE USER 'uygulama'@'10.0.0.%' IDENTIFIED BY 'guclu-bir-parola';

-- Sadece ilgili veritabaninda okuma/yazma izni ver
GRANT SELECT, INSERT, UPDATE, DELETE
  ON haber_sitesi.*
  TO 'uygulama'@'10.0.0.%';

FLUSH PRIVILEGES;
  • Bağlantıları TLS/SSL ile şifreleyerek ağ üzerindeki veriyi koruyun.
  • root gibi ayrıcalıklı hesapları uygulama bağlantılarında kullanmayın.
  • Parolaları güçlü tutun ve mümkünse ağ erişimini güvenilir kaynaklarla sınırlayın.
  • Düzenli güncellemelerle bilinen güvenlik açıklarını kapatın.

Yedekleme ve Geri Yükleme

Hiçbir veritabanı stratejisi, güvenilir yedekler olmadan tamamlanmış sayılmaz. MySQL, mantıksal (logical) ve fiziksel (physical) olmak üzere iki temel yedekleme yaklaşımı sunar. Mantıksal yedekler veriyi SQL ifadeleri olarak dışa aktarırken, fiziksel yedekler veri dosyalarının kendisini kopyalar.

bash
# Mantiksal yedek almak (mysqldump)
mysqldump -u root -p haber_sitesi > yedek.sql

# Yedegi geri yuklemek
mysql -u root -p haber_sitesi < yedek.sql

Lisanslama: Açık Kaynak ve Ticari

MySQL ikili lisanslama (dual licensing) modeliyle sunulur. Topluluk sürümü özgür/açık kaynak lisansı altında dağıtılırken, Oracle ayrıca ek özellikler ve destek içeren ticari sürümler sunar. Ürününüzü nasıl dağıttığınıza bağlı olarak, hangi lisansın uygun olduğunu değerlendirmek gerekir.

MySQL, MariaDB ve Diğer Alternatifler

MySQL tek başına değildir; ilişkisel veritabanı dünyasında birçok seçenek bulunur. En yakın akrabası, MySQL'den türeyen ve büyük ölçüde uyumlu olan MariaDB'dir. Daha zengin standart SQL desteği ve gelişmiş özellikler arayanlar sıklıkla PostgreSQL'i değerlendirir. Kurumsal ölçekte ise Oracle Database gibi ticari sistemler tercih edilebilir.

Doğru seçim; iş yükünüze, ekibinizin deneyimine, lisans tercihlerinize ve ölçekleme ihtiyacınıza bağlıdır. Farklı motorların güçlü yönlerini karşılaştırmak için ana rehberimize göz atabilirsiniz.

Ne Zaman MySQL Tercih Edilir?

MySQL, özellikle web tabanlı, okuma ağırlıklı ve olgun ekosistem desteği beklenen projelerde güçlü bir varsayılandır. İçerik yönetim sistemleri, e-ticaret ve haber siteleri gibi uygulamalarda uzun yıllardır kanıtlanmış bir seçenektir. Popüler içerik yönetim platformlarının çoğu MySQL ile birlikte gelir; bu da hosting sağlayıcılarında hazır destek ve geniş bir eklenti ekosistemi anlamına gelir.

Yeni bir projeye başlarken ekibinizin tanıdık olduğu, kolay bulunan uzmanlığa sahip ve dağıtımı basit bir sistem seçmek çoğu zaman en pragmatik karardır. MySQL bu ölçütlerin hepsini karşıladığı için, aksini gerektiren özel bir neden olmadıkça sağlam bir başlangıç noktasıdır.

  • Yaygın hosting ve bulut desteği ile kolay kurulum.
  • Geniş topluluk, bol belge ve araç ekosistemi.
  • InnoDB ile işlem güvenliği ve satır düzeyi kilitleme.
  • Basitten orta-büyük ölçeğe kadar esnek büyüme.

Özet

MySQL; açık kaynaklı, olgun ve yaygın bir ilişkisel veritabanıdır. İstemci-sunucu mimarisi, değiştirilebilir depolama motorları, güçlü indeksleme ve replikasyon yetenekleriyle web projelerinin belkemiğini oluşturur. InnoDB motoru sayesinde işlem güvenliği sunar; MariaDB, PostgreSQL ve Oracle gibi alternatiflerle birlikte değerlendirildiğinde çoğu senaryo için sağlam bir temel sağlar.