MySQL ve MariaDB Kurulumu: Temel Yönetim Rehberi
MySQL ve MariaDB kurulumu, mysql_secure_installation, veritabanı ve kullanıcı oluşturma, temel SQL komutları, uzak erişim yapılandırması ve performans ayarları. Adım adım rehber.
İçindekiler
MySQL ve MariaDB Kurulumu: Temel Yönetim Rehberi
MySQL ve MariaDB, dünya genelinde en yaygın kullanılan ilişkisel veritabanı yönetim sistemleridir. Web uygulamaları, e-ticaret siteleri ve kurumsal sistemlerin büyük çoğunluğu bu veritabanlarından birini kullanır. Bu rehberde her iki sistemin kurulumunu, temel yapılandırmasını ve yönetimini ele alacağız.
MySQL mi MariaDB mi?
MariaDB, MySQL'in orijinal geliştiricileri tarafından oluşturulan topluluk destekli bir fork'tur. Temel farklar:
| Özellik | MySQL | MariaDB |
|---|---|---|
| Lisans | GPL + Ticari | GPL (tamamen açık) |
| Geliştirici | Oracle | MariaDB Foundation |
| Performans | İyi | Genellikle daha hızlı |
| Uyumluluk | Referans | MySQL ile uyumlu |
| Yeni özellikler | Yavaş | Daha hızlı |
Yeni projeler için MariaDB önerilir. MySQL ile tam uyumludur ve genellikle daha iyi performans sunar. Mevcut MySQL kurulumlarını MariaDB'ye geçirmek oldukça kolaydır.
MySQL Kurulumu (Ubuntu/Debian)
Paket Deposunu Güncelleme ve Kurulum
# Paket listesini güncelle
apt update
# MySQL Server kur
apt install -y mysql-server
# Servis durumunu kontrol et
systemctl status mysql
# Otomatik başlatmayı etkinleştir
systemctl enable mysql
MySQL Sürümünü Doğrulama
mysql --version
# Çıktı: mysql Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)
MariaDB Kurulumu (Ubuntu/Debian)
# Paket listesini güncelle
apt update
# MariaDB Server kur
apt install -y mariadb-server mariadb-client
# Servis durumunu kontrol et
systemctl status mariadb
# Otomatik başlatmayı etkinleştir
systemctl enable mariadb
# Sürümü kontrol et
mysql --version
# Çıktı: mysql Ver 15.1 Distrib 10.x.x-MariaDB
MariaDB Kurulumu (CentOS/AlmaLinux/Rocky Linux)
# MariaDB deposunu ekle
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
# MariaDB kur
dnf install -y MariaDB-server MariaDB-client
# Servisi başlat ve etkinleştir
systemctl start mariadb
systemctl enable mariadb
Güvenlik Yapılandırması: mysql_secure_installation
Kurulumdan sonra mutlaka güvenlik sihirbazını çalıştırın:
mysql_secure_installation
Sihirbaz şu soruları sorar:
Enter current password for root (enter for none): [Enter]
Switch to unix_socket authentication [Y/n]: n
Change the root password? [Y/n]: Y
New password: [Güçlü bir şifre girin]
Re-enter new password: [Şifreyi tekrar girin]
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Root kullanıcısının uzaktan erişimini kapatın. Uzak bağlantılar için ayrı kullanıcı oluşturun. Güçlü şifre kullanın (en az 12 karakter, büyük/küçük harf, rakam ve özel karakter).
MySQL/MariaDB'ye Bağlanma
# Root olarak bağlan
mysql -u root -p
# Belirli bir veritabanına bağlan
mysql -u kullanici -p veritabani_adi
# Uzak sunucuya bağlan
mysql -h 192.168.1.100 -u kullanici -p veritabani_adi
# Port belirterek bağlan
mysql -h sunucu -P 3306 -u kullanici -p
Veritabanı Oluşturma ve Yönetme
-- Veritabanı oluştur
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Tüm veritabanlarını listele
SHOW DATABASES;
-- Veritabanını seç
USE myapp;
-- Veritabanını sil (dikkatli!)
DROP DATABASE eski_veritabani;
-- Veritabanı boyutunu kontrol et
SELECT table_schema AS 'Veritabanı',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Boyut (MB)'
FROM information_schema.tables
GROUP BY table_schema;
Kullanıcı Oluşturma ve Yetkilendirme
-- Kullanıcı oluştur (sadece localhost erişimi)
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'GucluSifre123!';
-- Kullanıcı oluştur (uzak erişim için)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'GucluSifre123!';
-- Belirli IP'den erişim
CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'GucluSifre123!';
-- Veritabanına tam yetki ver
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
-- Sadece okuma yetkisi ver
GRANT SELECT ON myapp.* TO 'readonly'@'localhost';
-- Belirli tabloya yetki ver
GRANT SELECT, INSERT, UPDATE ON myapp.users TO 'appuser'@'localhost';
-- Yetkileri uygula
FLUSH PRIVILEGES;
-- Kullanıcı yetkilerini görüntüle
SHOW GRANTS FOR 'appuser'@'localhost';
-- Kullanıcıyı sil
DROP USER 'eski_kullanici'@'localhost';
Temel SQL Komutları
-- Tablo oluştur
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Veri ekle
INSERT INTO users (username, email) VALUES ('ahmet', 'ahmet@example.com');
-- Veri sorgula
SELECT * FROM users;
SELECT username, email FROM users WHERE id = 1;
-- Veri güncelle
UPDATE users SET email = 'yeni@example.com' WHERE id = 1;
-- Veri sil
DELETE FROM users WHERE id = 5;
-- Tabloları listele
SHOW TABLES;
-- Tablo yapısını görüntüle
DESCRIBE users;
Uzak Erişim Yapılandırması
Varsayılan olarak MySQL/MariaDB sadece localhost'tan bağlantı kabul eder. Uzak erişim için:
1. Yapılandırma Dosyasını Düzenle
# MySQL için
nano /etc/mysql/mysql.conf.d/mysqld.cnf
# MariaDB için
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# bind-address satırını değiştir veya yorum satırı yap
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
2. Servisi Yeniden Başlat
systemctl restart mysql
# veya
systemctl restart mariadb
3. Firewall Kuralı Ekle
# UFW ile
ufw allow 3306/tcp
# iptables ile
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
MySQL portunu (3306) internete açmak güvenlik riski oluşturur. Mümkünse SSH tüneli veya VPN kullanın. Uzak erişim gerekiyorsa belirli IP adreslerine kısıtlayın.
Performans Ayarları
Temel Yapılandırma Optimizasyonu
nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# InnoDB buffer pool (RAM'in %70-80'i)
innodb_buffer_pool_size = 1G
# Bağlantı havuzu
max_connections = 150
# Sorgu önbelleği (MySQL 8.0'da kaldırıldı)
# query_cache_size = 64M
# Geçici tablo boyutu
tmp_table_size = 64M
max_heap_table_size = 64M
# Yavaş sorgu logu
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# Binary log (replikasyon için)
# log_bin = /var/log/mysql/mysql-bin.log
# expire_logs_days = 7
Yapılandırmayı Uygula
systemctl restart mysql
# Değişkenleri kontrol et
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
Servis Yönetimi
# Servisi başlat
systemctl start mysql
# Servisi durdur
systemctl stop mysql
# Servisi yeniden başlat
systemctl restart mysql
# Yapılandırmayı yeniden yükle (restart gerektirmez)
systemctl reload mysql
# Servis durumunu kontrol et
systemctl status mysql
# Logları görüntüle
journalctl -u mysql -f
tail -f /var/log/mysql/error.log
Sonuç
MySQL ve MariaDB, güçlü ve güvenilir veritabanı sistemleridir. Kurulum sonrası güvenlik yapılandırmasını ihmal etmeyin, düzenli yedekleme yapın ve performans ayarlarını sunucunuzun kaynaklarına göre optimize edin. REXE sunucularında her iki sistem de sorunsuz çalışmaktadır.
İlgili Makaleler
PostgreSQL Kurulum ve Temel Yönetim Rehberi
PostgreSQL kurulumu, kullanıcı ve veritabanı oluşturma, temel SQL komutları, uzak bağlantı yapılandırması ve yedekleme. Ubuntu/Debian ve RHEL/CentOS için adım adım rehber.
Redis ve Memcached Kurulumu: Cache Katmanı Rehberi
Redis ve Memcached kurulumu, temel komutlar, persistence ayarları, Redis vs Memcached karşılaştırması ve uygulama entegrasyonu. Adım adım cache katmanı rehberi.
phpMyAdmin Kurulumu ve Güvenli Erişim Rehberi
phpMyAdmin kurulumu, Apache ve Nginx yapılandırması, SSL ile güvenli erişim, kullanıcı yönetimi ve güvenlik sertleştirme adımları. Adım adım rehber.