Ubuntu 22.04'e MySQL kurulumu
Selamlar, bu yazımda Ubuntu 22.04 LTS üzerine MySQL 8.0'ı baştan sona kuracağız. Belki yeni bir VPS aldınız, belki ekibe katılan birine 'şu sunucuya MySQL kurar mısın' dediniz; her halükarda işin pratik tarafı aslında üç komutla bitiyor. Ama 'kurulum bitti' dediğin yerle 'production'a hazır' dediğin yer çoğu zaman aynı yer değil. O yüzden hem komutları yazacağım hem de 'bunu neden yapıyoruz' kısmına değineceğim.
Neden APT'yi tercih ediyoruz?
Ubuntu 22.04 (Jammy Jellyfish) varsayılan APT deposunda MySQL 8.0 ile geliyor. Bu, Oracle'ın resmi mysql-apt-config paketi değil, Canonical'ın paketlediği sürüm. İkisi arasında fark var mı? Pratikte çoğu zaman fark yok, ama bence çoğu kullanım için Ubuntu'nun verdiği yeter. Güncellemeler apt upgrade ile geliyor, sistem kullanıcısı (mysql) ve systemd servisi sizin için ayarlanıyor, yapılandırma dosyası /etc/mysql/mysql.conf.d/mysqld.cnf altında duruyor. MySQL 8.0.36+ bir özelliğe ihtiyacınız varsa Oracle deposuna geçebilirsiniz; aksi halde bu yol daha az dert.
On hazirlik
Başlamadan önce şu üçü hazır olsun:
- Ubuntu 22.04 LTS bir sunucu (yerel sanal makine de olur)
sudoyetkisi olan bir kullanıcı- APT mirror'larına erişim (yani internet)
Paket listesini guncelleyin
Kuruluma başlamadan önce paket indeksini tazeliyoruz. Bu küçük adımı atlayanlar bazen 'eski metadata yüzünden 404 dönen mirror' tuzağına düşer. Bir saniye sürüyor, atlamayalım.
sudo apt update
MySQL server paketini kurun
Asıl iş tek komutta:
sudo apt install -y mysql-server
Bu paket sunucuyu, mysql istemcisini ve ortak kütüphaneleri birlikte indiriyor. Kurulum bittiğinde systemd servisi otomatik başlıyor; yani arka planda zaten mysqld koşuyor olmalı. Doğrulayalım:
sudo systemctl status mysql
Beklenen çıktıdan kritik satır şu:
Active: active (running) since ...
active (running) görüyorsanız servis ayakta. failed görüyorsanız journalctl -u mysql -e ile log'a bakın; çoğunlukla disk dolu ya da /var/lib/mysql izinleri bozuk olur.
Sertlestirme: mysql_secure_installation
Kurulum yapıldı diye tamam değil. Anonim kullanıcılar, test veritabanı, uzak root girişi gibi şeyler hâlâ açık. Bunları kapatmak için MySQL'in kendi script'i var:
sudo mysql_secure_installation
Script bir-iki soru soracak. Ubuntu 22.04'te root başlangıçta auth_socket plugin'i ile doğrulanıyor, yani bu noktada bir root parolası girmenize gerek yok. İlk soru parola politikası ile ilgili: tecrübeyle sabittir ki MEDIUM (seviye 1) çoğu sunucu için yeterli. STRONG'a basıyorsanız ekibinizin parola yönetimine gerçekten hazır olduğundan emin olun, yoksa 'parolayı bir daha kim değiştirecek' krizine giriyorsunuz.
Geri kalan sorulara Y diyebilirsiniz; anonim user'ları kaldır, test veritabanını sil, privilege table'ları yenile.
Ilk girisi yapalim
Root socket authentication kullandığı için sudo ile girmemiz lazım:
sudo mysql
Karşımıza klasik prompt geliyor:
mysql>
Şimdi günlük iş için root kullanmak istemeyiz; uygulamaya kendi kullanıcısını açalım:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword1!';
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
myapp.* kısmı veritabanı adınıza göre değişir; uygulamaya sadece kendi şemasına yetki verin, *.* yazmayın. Bence bu en sık atlanan hata: bir kullanıcıya *.* ALL verirseniz aslında ikinci bir root yaratmış olursunuz.
Onyukleme ve dogrulama
Servisin açılışta otomatik başladığını teyit edin:
sudo systemctl enable mysql
Ve sürümü doğrulayın:
mysql --version
Çıktıda 8.0.x görüyorsanız her şey yolunda.
Uzak baglanti ve guvenlik duvari
Eğer MySQL'e başka bir sunucudan bağlanılacaksa 3306'yı tüm internete açma; sadece güvendiğin alt ağa izin ver:
sudo ufw allow from 192.168.1.0/24 to any port 3306
sudo ufw reload
bind-address'i 0.0.0.0 yapmadan önce iki kez düşünün; çoğu durumda VPN ya da private network arkasında kalmalı.
Sik karsilasilan tuzaklar
*.*ile yetki vermek: Uygulama kullanıcısına tüm veritabanlarına ALL verirseniz ikinci bir root olur. Sadece kendi şemasına yetki verin.bind-address'i0.0.0.0yapip firewall'u unutmak: MySQL'i tüm dünyaya açmış olursunuz. Brute-force botları on dakika içinde sizi bulur.sudo mysql_secure_installation'i atlamak: Anonim kullanıcı ve test veritabanı açık kalır.
Kapanis
Ubuntu 22.04'e MySQL kurmak özünde apt update, apt install mysql-server, mysql_secure_installation üçlüsü. Servis kendiliğinden başlıyor, açılışta otomatik geliyor. Bence asıl iş kurulumdan sonra başlıyor: doğru kullanıcı, dar yetki, kapalı portlar. Umarım faydalı olur, bir sonraki yazıda görüşmek üzere.
