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
Похожие статьи
Возможно, вас также заинтересует.
Правило 3-2-1: как никогда не терять данные сервера
Правило резервного копирования 3-2-1 — золотой стандарт стратегии бэкапа сервера. Разбираем правило, автоматизацию и инфраструктуру KavesNET.
Читать далее
Как мигрировать сайт с Plesk на Plesk: гид по Migrator
Перенос сайтов, почты, БД и DNS за один раз с Plesk Migrator. Настройка, тест-миграция и cutover.
Читать далее
FileZilla: миграция файлов между двумя VDS
Перенос сайта со старого на новый VDS: FileZilla по FTP/SFTP, советы по скорости, права и обработка ошибок.
Читать далее