MySQL veritabanı yönetimi, her web geliştirici ve sunucu yöneticisi için temel bir beceridir. WordPress'ten e-ticaret sitelerine, forumlardan özel uygulamalara kadar neredeyse her web projesi veritabanı kullanır. Bu rehberde MySQL'in temellerini, performans optimizasyonunu ve yedekleme stratejilerini öğreneceksiniz.
MySQL Nedir?
MySQL, dünyada en yaygın kullanılan açık kaynaklı ilişkisel veritabanı yönetim sistemidir (RDBMS). Veriler tablolarda satır ve sütun olarak saklanır, SQL (Structured Query Language) ile yönetilir.
MySQL vs MariaDB vs PostgreSQL
| Özellik | MySQL | MariaDB | PostgreSQL |
|---|---|---|---|
| Lisans | GPL + Ticari | GPL (tamamen açık) | BSD (en özgür) |
| WordPress Uyumu | Tam | Tam | Sınırlı |
| Performans (Read) | Çok iyi | Çok iyi | İyi |
| Performans (Write) | İyi | İyi | Çok iyi |
| JSON Desteği | 5.7+ | 10.2+ | Kapsamlı |
| cPanel Desteği | Evet | Evet | Hayır |
Temel MySQL Komutları
Bağlantı ve Veritabanı İşlemleri
# MySQL'e bağlan
mysql -u root -p
# Veritabanlarını listele
SHOW DATABASES;
# Yeni veritabanı oluştur
CREATE DATABASE site_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Veritabanını seç
USE site_db;
# Veritabanını sil
DROP DATABASE eski_db;Kullanıcı Yönetimi
# Yeni kullanıcı oluştur
CREATE USER 'site_user'@'localhost' IDENTIFIED BY 'GuvenliSifre123!';
# Yetki ver
GRANT ALL PRIVILEGES ON site_db.* TO 'site_user'@'localhost';
# Yetkileri uygula
FLUSH PRIVILEGES;
# Kullanıcı yetkilerini görüntüle
SHOW GRANTS FOR 'site_user'@'localhost';Tablo İşlemleri
# Tabloları listele
SHOW TABLES;
# Tablo yapısını görüntüle
DESCRIBE kullanicilar;
# Veri sorgulama
SELECT * FROM kullanicilar WHERE durum = 'aktif' LIMIT 10;
# Veri ekleme
INSERT INTO kullanicilar (ad, email) VALUES ('Ahmet', '[email protected]');
# Veri güncelleme
UPDATE kullanicilar SET durum = 'pasif' WHERE id = 5;
# Veri silme
DELETE FROM kullanicilar WHERE durum = 'pasif' AND son_giris < '2025-01-01';MySQL Performans Optimizasyonu
1. my.cnf Ayarları
SSH ile sunucunuza bağlanıp /etc/mysql/my.cnf dosyasını düzenleyin:
[mysqld]
# InnoDB Buffer Pool — toplam RAM'in %60-70'i kadar
innodb_buffer_pool_size = 2G
# Sorgu cache (MySQL 8.0'da kaldırıldı, MariaDB'de aktif)
query_cache_type = 1
query_cache_size = 128M
# Bağlantı limitleri
max_connections = 200
wait_timeout = 300
interactive_timeout = 300
# Slow query log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 22. Index (Dizin) Optimizasyonu
Sorguların hızlı çalışması için doğru index'ler oluşturun:
# Mevcut index'leri kontrol edin
SHOW INDEX FROM siparisler;
# Sık kullanılan sütunlara index ekleyin
CREATE INDEX idx_musteri_tarih ON siparisler (musteri_id, siparis_tarihi);
# EXPLAIN ile sorgu planını inceleyin
EXPLAIN SELECT * FROM siparisler WHERE musteri_id = 42;3. Yavaş Sorgu Analizi
# Yavaş sorgu logunu görüntüle
sudo mysqldumpslow /var/log/mysql/slow.log
# En sık çalışan yavaş 10 sorgu
sudo mysqldumpslow -s c -t 10 /var/log/mysql/slow.logVeritabanı Yedekleme
mysqldump ile Yedekleme
# Tek veritabanı yedeği
mysqldump -u root -p site_db > /yedekler/site_db_$(date +%Y%m%d).sql
# Tüm veritabanları yedeği
mysqldump -u root -p --all-databases > /yedekler/tum_db_$(date +%Y%m%d).sql
# Sıkıştırılmış yedek
mysqldump -u root -p site_db | gzip > /yedekler/site_db_$(date +%Y%m%d).sql.gzOtomatik Yedekleme (Cron Job)
# Her gün gece 3'te otomatik yedek
0 3 * * * mysqldump -u root -pSIFRE site_db | gzip > /yedekler/site_db_$(date +\%Y\%m\%d).sql.gz
# 30 günden eski yedekleri sil
0 4 * * * find /yedekler/ -name "*.sql.gz" -mtime +30 -deleteYedekten Geri Yükleme
# SQL dosyasından geri yükle
mysql -u root -p site_db < /yedekler/site_db_20260301.sql
# Sıkıştırılmış yedekten geri yükle
gunzip < /yedekler/site_db_20260301.sql.gz | mysql -u root -p site_dbcPanel'de MySQL Yönetimi
cPanel kullanan hosting hesaplarında:
- MySQL Databases: Veritabanı ve kullanıcı oluşturma
- phpMyAdmin: Görsel veritabanı yönetim aracı
- Remote MySQL: Dışarıdan veritabanı erişimi açma
- MySQL Sürümü: MultiPHP Manager benzeri, MariaDB sürümü hosting sağlayıcınız tarafından yönetilir
Yaygın MySQL Hataları
| Hata | Neden | Çözüm |
|---|---|---|
| Too many connections | Bağlantı limiti aşıldı | max_connections artırın veya bağlantıları kapatın |
| Table is marked as crashed | Tablo bozulmuş | REPAIR TABLE tablo_adi; |
| Disk quota exceeded | Disk dolu | Binary logları ve eski verileri temizleyin |
| Access denied | Yetki sorunu | GRANT ile yetkileri kontrol edin |
| Lock wait timeout | Uzun süren transaction | Yavaş sorguları optimize edin |
Sonuç
Düzenli yedekleme, index optimizasyonu ve doğru yapılandırma ile MySQL veritabanınız sorunsuz çalışır. Daha fazla kaynak ve performansa ihtiyacınız varsa, Hostopya'nın VDS sunucuları tam root erişim ile istediğiniz MySQL yapılandırmasını yapmanıza olanak tanır.

