跳到主要内容
不要错过新客户专属 20% 折扣优惠! 优惠码: KAVESNET20 已复制
MySQL

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.

KavesNET Ekibi 2025年10月9日 4 分钟阅读
MySQL MariaDB veritabanı yönetimi görseli

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_connections artı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

标签 MySQL MariaDB Database Tutorial

相关 文章

您可能也喜欢这些。