Makale Başlıkları
Kısaca
MySQL kurulumu birkaç komutla biter; gerçek farkı sonrasında yaptığınız ayarlar yaratır. Doğru yapılandırılmış bir InnoDB buffer pool, açık tutulan slow query log ve yerinde indeksler, aynı sunucuda sorgu sürelerini saniyelerden milisaniyelere indirir.
- Güncel uzun destekli sürüm MySQL 8.4 LTS; MySQL 8.0 Nisan 2026’da destek dışı kaldı.
- En büyük performans kazancı
innodb_buffer_pool_sizeayarındadır; adanmış sunucuda RAM’in %60-80’i. query_cacheartık yok; yavaş sorguları slow query log + EXPLAIN + indeks ile çözersiniz.
MySQL, dünyanın en yaygın kullanılan açık kaynaklı ilişkisel veritabanı yönetim sistemidir. WordPress’ten kurumsal uygulamalara kadar sayısız projenin temelinde yer alır. Güncel uzun destekli (LTS) sürümü MySQL 8.4‘tür; bu yazının yazıldığı sırada en son bakım sürümü 8.4.10’dur. Daha da önemlisi, MySQL 8.0 ailesi Nisan 2026 itibarıyla yaşam sonuna (EOL) ulaştı; hâlâ 8.0 çalıştırıyorsanız 8.4 LTS’e geçiş planlamanın tam zamanı.
Bu rehberde MySQL’i bir sunucuya kurmayı, güvenliğini sağlamayı ve performans için gerçekten fark yaratan ayarları sırasıyla anlatıyoruz. Kurulum kolay; ustalık, kurulumdan sonra başlıyor.
MySQL’i tam kontrolle ve yeterli kaynakla çalıştırmak için ayrılmış kaynaklı bir VPS/sunucu idealdir. Paylaşımlı ortamlarda RAM ve disk I/O sınırlı olduğundan, veritabanı yoğun uygulamalar için adanmış kaynak büyük fark yaratır.
MySQL Kurulumu
Aşağıdaki komutlar deponun varsayılan MySQL paketini kurar. Ubuntu ve AlmaLinux/RHEL için ayrı verilmiştir:
# Ubuntu sudo apt update sudo apt install mysql-server sudo systemctl enable --now mysql # AlmaLinux/RHEL sudo dnf install mysql-server sudo systemctl enable --now mysqld # Guvenlik sihirbazi (her ikisinde) sudo mysql_secure_installation
mysql_secure_installation root parolasını belirler, anonim kullanıcıları ve test veritabanını kaldırır, root’un uzaktan girişini kapatır. Kurulumdan hemen sonra mutlaka çalıştırın; üretim sunucusunda bu adımı atlamak en sık yapılan güvenlik hatasıdır.
Belirli bir sürüm (örneğin 8.4 LTS) istiyorsanız, dağıtımın varsayılanı yerine resmi MySQL APT/Yum deposunu ekleyip kurmak, sürüm üzerinde kontrol sağlar. AlmaLinux’ta dnf install mysql-server komutunun gerçek MySQL kurduğuna dikkat edin; bu, MariaDB değildir ve ikisini karıştırmamak gerekir.
İlk Erişim ve Kullanıcı Oluşturma
Ubuntu’da root, varsayılan olarak auth_socket eklentisiyle gelir; yani parola yerine sistem kullanıcısıyla girersiniz:
sudo mysql -u root -- Uygulama icin ayri kullanici (root kullanmayin) CREATE DATABASE uygulama CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; CREATE USER 'uygulama_user'@'localhost' IDENTIFIED BY 'guclu-parola'; GRANT ALL PRIVILEGES ON uygulama.* TO 'uygulama_user'@'localhost'; FLUSH PRIVILEGES;
Her uygulamaya kendi veritabanı ve kendi kullanıcısı verin; root’u uygulama bağlantılarında asla kullanmayın. Karakter seti olarak utf8mb4 kullanın; gerçek UTF-8’i (emoji dahil) bu destekler.
Güvenlik: MySQL 8.4 ile Neler Değişti?
MySQL 8.4, varsayılanları güvenlik lehine sıkılaştırdı. En önemli değişiklik, eski mysql_native_password kimlik doğrulama eklentisinin varsayılan olarak devre dışı olmasıdır. Yeni varsayılan caching_sha2_password‘dur. Eski bir uygulama bağlanamıyorsa, önce sürücüsünü güncelleyin; gerçekten gerekiyorsa eklentiyi açıkça etkinleştirebilirsiniz, ama bu son çare olmalı.
- Zayıf şifreleme algoritmaları kaldırıldı — eski TLS/cipher yapılandırmaları artık desteklenmiyor.
- Root’un uzaktan girişini kapalı tutun; veritabanına yalnızca uygulama sunucusundan veya yerel ağdan erişilsin.
- MySQL’i dış dünyaya açmanız gerekmiyorsa
bind-address = 127.0.0.1ile yalnızca yerel dinleyin.
Performans İçin Kritik Ayarlar
MySQL’in performansını belirleyen en önemli parametre, verinin ve indekslerin önbelleklendiği InnoDB buffer pool‘dur. Bir sorgu, ihtiyaç duyduğu sayfaları buffer pool’da bulursa RAM hızında, bulamazsa diskten okur — aradaki fark on kattan fazladır. Adanmış bir veritabanı sunucusunda fiziksel RAM’in %60-80’i önerilir:
[mysqld] innodb_buffer_pool_size = 4G # RAM in ~%70 i (ornek 6 GB lik sunucu) innodb_redo_log_capacity = 2G # yeni redo log parametresi (8.0.30+) max_connections = 200 tmp_table_size = 64M max_heap_table_size = 64M slow_query_log = 1 long_query_time = 1 # Alternatif: tek satirla otomatik hesaplama (adanmis sunucu) # innodb_dedicated_server = ON
Yapılandırma dosyası Ubuntu’da /etc/mysql/mysql.conf.d/mysqld.cnf, AlmaLinux’ta /etc/my.cnf konumundadır. Değişiklikten sonra sudo systemctl restart mysql (veya mysqld) ile yeniden başlatın.
Tek tek ayar yapmak istemiyorsanız innodb_dedicated_server = ON tek başına çok iş görür: MySQL, buffer pool’u ve redo log kapasitesini sunucunun RAM’ine göre otomatik hesaplar. Sunucu yalnızca MySQL çalıştırıyorsa bu en pratik başlangıçtır.
Disk I/O ve SSD/NVMe Ayarları
InnoDB, arka planda “kirli” sayfaları diske yazarken innodb_io_capacity değerine bakar; bu değer InnoDB’ye diskinizin ne kadar hızlı olduğunu söyler. Varsayılan (200), modern SSD’ler için fazla düşüktür ve yazma birikmesine yol açabilir. Depolama tipine göre kabaca:
| Depolama | innodb_io_capacity | innodb_io_capacity_max |
|---|---|---|
| Klasik HDD | 200 | 400 |
| SATA SSD | 2000 | 4000 |
| NVMe SSD | 4000 | 8000 |
Alastyr sunucuları NVMe ve all-flash depolama (Dell EMC Unity 650F) üzerinde çalışır; bu sınıf disklerde I/O kapasitesini yüksek tutmak, yazma yoğun iş yüklerinde belirgin kazanç sağlar.
Önemli: Query Cache Kaldırıldı
Eski rehberlerde sık geçen query_cache_size ve query_cache_type parametreleri MySQL 8.0.3 ile tamamen kaldırıldı. Bunları my.cnf‘e eklerseniz MySQL başlamaz (unknown variable hatası). İnternette bulduğunuz eski örnekleri körü körüne kopyalarken bu en sık takılınan noktadır.
Sorgu önbellekleme ihtiyacı için artık uygulama düzeyinde önbellek (Redis/Memcached) veya ProxySQL gibi araçlar kullanılır. Çoğu durumda ise doğru indeksler ve yeterli buffer pool, query cache’in çözmeye çalıştığı sorunu zaten ortadan kaldırır.
Yavaş Sorguları Bulmak ve Düzeltmek
Performans optimizasyonunun kalbi, “neyin yavaş olduğunu tahmin etmek” değil ölçmektir. Bunun için iki araç vazgeçilmezdir: slow query log ve EXPLAIN.
1. Slow Query Log’u Açın
Yukarıdaki yapılandırmada slow_query_log = 1 ve long_query_time = 1 ayarladık; bu, 1 saniyeden uzun süren her sorguyu kaydeder. Birikmiş log’u mysqldumpslow ile özetleyip en çok zaman yiyen sorguları görebilirsiniz:
# En cok toplam sure harcayan sorgular sudo mysqldumpslow -s t /var/log/mysql/mysql-slow.log | head -20
2. EXPLAIN ile Sorguyu Analiz Edin
Yavaş bir sorgu bulduğunuzda başına EXPLAIN ekleyin. Çıktıdaki type sütununda ALL görüyorsanız MySQL tüm tabloyu tarıyordur (full table scan) — bu, yavaşlığın bir numaralı sebebidir. rows sütunu, taranan tahmini satır sayısını gösterir; bu sayı tablonuzun büyük bir kısmıysa indekse ihtiyacınız var demektir.
EXPLAIN SELECT * FROM siparisler WHERE musteri_id = 42;
3. Doğru İndeksi Ekleyin
WHERE, JOIN ve ORDER BY içinde sık kullandığınız sütunlara indeks ekleyin:
CREATE INDEX idx_musteri ON siparisler (musteri_id);
Birden fazla sütuna göre filtreliyorsanız bileşik (composite) indeks kurun ve sütun sırasının önemli olduğunu unutmayın. Öte yandan her sütuna indeks atmayın: gereksiz indeksler yazma işlemlerini yavaşlatır ve disk yer. İyi haber, MySQL 8.4’te indeks oluşturma varsayılan olarak paralel çalışır; bu, büyük tablolarda ALTER sürelerini belirgin biçimde kısaltır.
Bakım ve İzleme
- Yedekleme: Düzenli
mysqldumpveya fiziksel yedek (Percona XtraBackup) planlayın. Yedeği geri yükleyerek test edin; denenmemiş yedek, yedek sayılmaz. - İstatistikler: MySQL 8.4, optimize edici hatalarına yol açan eski histogram istatistiklerini otomatik güncelleyebilir; yine de büyük veri değişikliklerinden sonra
ANALYZE TABLEfaydalıdır. - İzleme:
SHOW ENGINE INNODB STATUSveperformance_schemaile buffer pool isabet oranını, kilitleri ve bekleyen işlemleri izleyin.
Özet: Öncelik Sırası
| Öncelik | Ne yapılır | Etki |
|---|---|---|
| 1 | innodb_buffer_pool_size‘ı RAM’e göre ayarla |
En büyük genel kazanç |
| 2 | Slow query log + EXPLAIN ile yavaş sorguları bul | Hedefli, kalıcı çözüm |
| 3 | Eksik indeksleri ekle | Tek tek sorgularda dramatik hız |
| 4 | SSD/NVMe için innodb_io_capacity |
Yazma yoğun yüklerde rahatlama |
| 5 | mysql_secure_installation + 8.4’e güncelleme |
Güvenlik ve uzun destek |
Sıkça Sorulan Sorular
MySQL ücretsiz mi?
Topluluk sürümü (MySQL Community) açık kaynaklı ve ücretsizdir; çoğu web projesinin kullandığı sürüm budur. Oracle’ın ayrıca ek özellik ve destek sunan ticari Enterprise sürümü vardır, ama tipik bir site veya uygulama için Community yeterlidir.
Hangi MySQL sürümünü kurmalıyım?
Yeni kurulumlarda MySQL 8.4 LTS en sağlam tercihtir; uzun süreli destek alır ve güvenlik varsayılanları daha sıkıdır. MySQL 8.0, Nisan 2026’da destek dışı kaldığından yeni projelerde tercih edilmemelidir.
En önemli performans ayarı hangisi?
innodb_buffer_pool_size. Adanmış bir veritabanı sunucusunda RAM’in %60-80’i önerilir. Tek bir ayarla en büyük genel performans kazancını burada elde edersiniz; veri ve indeksler RAM’de kaldıkça disk erişimi azalır.
Query cache neden artık yok?
query_cache_size ve query_cache_type MySQL 8.0.3’te tamamen kaldırıldı. Bu parametreleri my.cnf‘e eklerseniz MySQL başlamaz. Önbellekleme için artık doğru indeksler, yeterli buffer pool ve gerekirse Redis gibi uygulama düzeyi önbellek kullanılır.
İlk erişim nasıl yapılır?
Ubuntu’da kurulumdan hemen sonra sudo mysql -u root ile girersiniz; root varsayılan olarak auth_socket ile gelir. Ardından uygulamalarınız için ayrı kullanıcı ve veritabanı oluşturun, root’u günlük bağlantılarda kullanmayın.
Slow query log nasıl açılır?
my.cnf dosyasına slow_query_log = 1 ve örneğin long_query_time = 1 ekleyip MySQL’i yeniden başlatın. Bu, 1 saniyeden uzun süren sorguları kaydeder. Sonra mysqldumpslow ile en yavaş sorguları bulup EXPLAIN ile analiz edebilirsiniz.
İndeks eklemek her zaman iyi midir?
Hayır. İndeksler okuma sorgularını hızlandırır ama yazma (INSERT/UPDATE) işlemlerini yavaşlatır ve yer kaplar. WHERE, JOIN ve ORDER BY‘da gerçekten kullanılan sütunlara indeks ekleyin; kullanılmayan indeksleri ise düzenli olarak temizleyin.
MariaDB mi MySQL mi kurmalıyım?
İkisi ortak kökten gelir ve çoğu uygulama her ikisiyle de çalışır. Yeni özellikler, varsayılan ayarlar ve eklentiler bakımından farklılaşmışlardır; mevcut uygulamanızın hangisini desteklediğine ve ekibinizin aşinalığına göre seçin. AlmaLinux’ta mysql-server paketi gerçek MySQL kurar, MariaDB değil.
Sunucumun RAM’i az, yine de hızlandırabilir miyim?
Evet. Önce yavaş sorguları slow query log ile bulup eksik indeksleri ekleyin; çoğu zaman en büyük kazanç budur. Ardından buffer pool’u elinizdeki RAM’in elverdiği ölçüde büyütün. Sürekli kaynak sıkıntısı yaşıyorsanız, ayrılmış kaynaklı bir VPS/sunucu‘ya geçmek kalıcı çözümdür.
Veritabanı İçin Güçlü Sunucu
MySQL iş yükleriniz için bol RAM’li, NVMe SSD’li, İzmir’deki kendi veri merkezimizde barınan ayrılmış kaynaklı VPS çözümleri. 7/24 destek ve günlük yedekleme dahil.





