MySQL / MariaDB Veritabanı Yönetimi: Kurulum, Kullanıcı, Yedek
Linux VDS'inde MySQL/MariaDB kurulumu, kullanıcı ve veritabanı oluşturma, dump/import, performans tuning ve uzaktan erişim güvenliği.
WordPress, e-ticaret, kurumsal app — hepsinin altında bir veritabanı var. MySQL veya çatalı MariaDB, dünyada en yaygın kullanılan ilişkisel veritabanları. Bu rehberde Linux VDS’inde kurulum, kullanıcı/DB yönetimi, yedekleme ve sık karşılaşılan performans sorunlarını anlatıyoruz.
MySQL vs MariaDB — hangisi?
- MySQL: Oracle’a ait, ticari + community
- MariaDB: MySQL’in açık kaynak çatalı, %95 uyumlu, performansta bazı yerlerde daha iyi
Çoğu projede interchangeable — hangisi sistemine kurulu olursa o yeterli. WordPress ikisini de destekler. Yeni kurulumda MariaDB öneririz.
1. Kurulum
# Ubuntu/Debian
sudo apt update
sudo apt install mariadb-server -y
# AlmaLinux/RHEL
sudo dnf install mariadb-server -y
sudo systemctl enable --now mariadb
Kurulum sonrası servis durumu:
sudo systemctl status mariadb
2. Güvenlik (her zaman ilk adım)
sudo mysql_secure_installation
Adımlar:
- Set root password: güçlü bir parola
- Remove anonymous users: Yes
- Disallow root login remotely: Yes
- Remove test database: Yes
- Reload privilege tables: Yes
3. Bağlanma
sudo mysql -u root -p
# Parola gir
Çıkmak için: EXIT; ya da Ctrl+D
4. Veritabanı oluşturma
CREATE DATABASE blog_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
utf8mb4 Türkçe + emoji destekler. Eski utf8 3 byte — emoji bozar.
5. Kullanıcı oluşturma + yetkilendirme
-- Kullanıcı oluştur
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY 'GUCLU_PAROLA';
-- Bir DB'ye tüm yetkiler
GRANT ALL PRIVILEGES ON blog_db.* TO 'blog_user'@'localhost';
-- Sadece okuma yetkisi (read-only kullanıcı)
GRANT SELECT ON blog_db.* TO 'reader'@'localhost';
-- Belirli IP'den erişim
CREATE USER 'app_user'@'192.168.1.50' IDENTIFIED BY 'PAROLA';
GRANT ALL ON app_db.* TO 'app_user'@'192.168.1.50';
FLUSH PRIVILEGES;
@'localhost' sadece sunucu içinden erişim, @'%' her yerden (güvensiz, sadece spesifik IP ile kullan).
6. Yetkileri görüntüleme / silme
-- Bir kullanıcının yetkileri
SHOW GRANTS FOR 'blog_user'@'localhost';
-- Yetki çıkarma
REVOKE INSERT, UPDATE ON blog_db.* FROM 'blog_user'@'localhost';
-- Kullanıcı silme
DROP USER 'eski_user'@'localhost';
7. Veritabanı yedekleme (mysqldump)
Tek DB yedek
mysqldump -u root -p blog_db > blog_db.sql
Sıkıştırılmış:
mysqldump -u root -p blog_db | gzip > blog_db_$(date +%Y%m%d).sql.gz
Tüm DB’leri yedek
mysqldump -u root -p --all-databases | gzip > all_dbs.sql.gz
Production için: lock’suz yedek
mysqldump -u root -p --single-transaction --routines --triggers blog_db > blog_db.sql
--single-transaction aktif kullanım sırasında lock yapmadan tutarlı yedek alır (InnoDB tabloları için).
Otomatik yedek için cron’a ekle:
0 3 * * * mysqldump -u root -p'PAROLA' blog_db | gzip > /backup/blog_$(date +\%Y\%m\%d).sql.gz
Cron yazımız detayları, 3-2-1 backup yazımız stratejisi.
8. Restore (yedekten geri yükleme)
# Sıkıştırılmamış
mysql -u root -p blog_db < blog_db.sql
# .gz dosyası
zcat blog_db.sql.gz | mysql -u root -p blog_db
DB önceden yoksa önce CREATE et.
9. Uzaktan erişim (remote MySQL)
Default’ta MySQL sadece localhosttan dinler. Uzaktan erişim için:
/etc/mysql/mariadb.conf.d/50-server.cnf:
bind-address = 0.0.0.0
sudo systemctl restart mariadb
Sonra:
CREATE USER 'remote_user'@'YOUR_IP' IDENTIFIED BY 'GUCLU_PAROLA';
GRANT ALL ON db_name.* TO 'remote_user'@'YOUR_IP';
FLUSH PRIVILEGES;
UFW’da 3306’yı sadece spesifik IP’ye aç:
sudo ufw allow from YOUR_IP to any port 3306
⚠️ Asla bind-address = 0.0.0.0 + GRANT % + UFW açık — internete açık MySQL = brute force hedefi.
10. Performans tuning
/etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
# Buffer pool — RAM'in %50-70'i
innodb_buffer_pool_size = 2G
# Query cache (MariaDB)
query_cache_size = 64M
query_cache_type = 1
# Connection limit
max_connections = 200
# Slow query log (3+ saniye sürenleri logla)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 3
sudo systemctl restart mariadb
11. Yararlı komutlar
-- DB boyutu
SELECT table_schema "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "Size (MB)"
FROM information_schema.tables GROUP BY table_schema;
-- Aktif sorgular
SHOW PROCESSLIST;
-- Slow query log oku
SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;
-- Tablo onarma (corrupted)
REPAIR TABLE tablo_adi;
-- Optimize (defragment)
OPTIMIZE TABLE tablo_adi;
12. phpMyAdmin (GUI tercih ederse)
sudo apt install phpmyadmin -y
Apache config’e bağlı veya manuel /etc/apache2/conf-available/phpmyadmin.conf. Browser’dan http://vds-ip/phpmyadmin → root login.
⚠️ Production’da phpMyAdmin’i internete açma — .htaccess ile IP kısıtla ya da Cloudflare Access kullan.
Sık karşılaşılan hatalar
- “Access denied for user”: yanlış parola, ya da kullanıcı
@'host'eşleşmiyor - “Too many connections”:
max_connectionsartır, idle connection’ları öldür - “Disk full”: log dosyaları büyümüş →
/var/log/mysql/temizle - “InnoDB: Operating system error number 28”: Disk doldu → Linux Disk Genişletme
- “Can’t connect to MySQL server”: Servis kapalı →
sudo systemctl status mariadb - Yavaş sorgular: Slow log’u aç,
EXPLAIN SELECT ...ile sorgu planını incele, INDEX ekle
Sonuç
MySQL/MariaDB temel altyapı parçası — ister WordPress, ister kendi yazılımın olsun. Kurulum 5 dakika; düzenli yedek + güvenlik + tuning ile production-ready.
KavesNET VDS NVMe SSD ile MySQL için ideal — disk I/O DB’lerin can damarı.
İlgili: WordPress Manuel Kurulum · Sunucu Yedekleme
İlgili Yazılar
Bunlar da ilgini çekebilir.
3-2-1 Yedekleme Kuralı: Sunucu Verilerini Asla Kaybetmemenin Yolu
3-2-1 yedekleme kuralı, kurumsal sunucu yedekleme stratejisinin altın standardıdır. Bu yazıda kuralı, otomasyon yöntemlerini ve KavesNET yedek altyapısını anlatıyoruz.
Devamını Oku
Plesk'ten Plesk'e Site Nasıl Taşınır? Migrator Aracı Rehberi
Plesk Migrator ile site, mail, DB ve DNS'i tek seferde yeni sunucuya taşı. Adım adım kurulum, migration test ve cutover.
Devamını Oku
FileZilla ile VDS'ten VDS'e Dosya Taşıma Rehberi
Eski sunucudan yeni VDS'e siteni taşı: FileZilla ile FTP/SFTP, hız ipuçları, izin ayarları ve hata kontrolü.
Devamını Oku