Ana içeriğe geç
Kategoriye Dön

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.

Okuma süresi: 14 dk Veritabanı
mysqlmariadbveritabanıkurulumsqlubuntudebianlinux

İç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:

ÖzellikMySQLMariaDB
LisansGPL + TicariGPL (tamamen açık)
GeliştiriciOracleMariaDB Foundation
PerformansİyiGenellikle daha hızlı
UyumlulukReferansMySQL ile uyumlu
Yeni özelliklerYavaş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

hljs bash
# 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

hljs bash
mysql --version
# Çıktı: mysql  Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)

MariaDB Kurulumu (Ubuntu/Debian)

hljs bash
# 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)

hljs bash
# 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:

hljs bash
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

hljs bash
# 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

hljs sql
-- 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

hljs sql
-- 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ı

hljs sql
-- 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

hljs bash
# MySQL için
nano /etc/mysql/mysql.conf.d/mysqld.cnf

# MariaDB için
nano /etc/mysql/mariadb.conf.d/50-server.cnf
hljs ini
# 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

hljs bash
systemctl restart mysql
# veya
systemctl restart mariadb

3. Firewall Kuralı Ekle

hljs bash
# 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

hljs bash
nano /etc/mysql/mysql.conf.d/mysqld.cnf
hljs ini
[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

hljs bash
systemctl restart mysql

# Değişkenleri kontrol et
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Servis Yönetimi

hljs bash
# 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.