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.
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.
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.
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.
# 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 --version
# Çıktı: mysql Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)
# 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 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
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).
# 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ş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ş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';
-- 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;
Varsayılan olarak MySQL/MariaDB sadece localhost'tan bağlantı kabul eder. Uzak erişim için:
# 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
systemctl restart mysql
# veya
systemctl restart mariadb
# 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.
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
systemctl restart mysql
# Değişkenleri kontrol et
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
# 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
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.
Yeni projeler için MariaDB önerilir. MySQL ile tam uyumludur, genellikle daha iyi performans sunar ve tamamen açık kaynaklıdır. Mevcut MySQL uygulamalarınız MariaDB'de değişiklik gerektirmeden çalışır. Ancak Oracle'ın MySQL özelliklerine (Group Replication, MySQL Shell gibi) ihtiyaç duyuyorsanız MySQL tercih edin.
MySQL'i güvenli modda başlatın: systemctl stop mysql, ardından mysqld_safe --skip-grant-tables & komutunu çalıştırın. mysql -u root ile bağlanıp ALTER USER 'root'@'localhost' IDENTIFIED BY 'YeniSifre'; komutunu çalıştırın. Son olarak FLUSH PRIVILEGES; yapıp servisi normal şekilde yeniden başlatın.
Üç şeyi kontrol edin: 1) bind-address ayarının 0.0.0.0 olduğunu doğrulayın, 2) Kullanıcının '%' veya ilgili IP ile oluşturulduğunu kontrol edin (SHOW GRANTS FOR 'user'@'%'), 3) Firewall'da 3306 portunun açık olduğunu doğrulayın (ufw status veya iptables -L).
Sunucunuzun toplam RAM'inin %70-80'i olarak ayarlayın. Örneğin 4GB RAM için 2-3GB, 8GB RAM için 5-6GB uygundur. Sunucu sadece veritabanı için kullanılıyorsa %80'e kadar çıkabilirsiniz. Değişiklik sonrası servisi yeniden başlatmayı unutmayın.
Teknik olarak mümkün olsa da önerilmez. Her ikisi de varsayılan olarak 3306 portunu kullanır ve çakışma yaşanır. Birini farklı bir porta taşıyabilirsiniz, ancak bu karmaşıklık yaratır. Genellikle birini seçip onu kullanmak daha iyi bir yaklaşımdır.
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, temel komutlar, persistence ayarları, Redis vs Memcached karşılaştırması ve uygulama entegrasyonu. Adım adım cache katmanı 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.