macOS'ta Homebrew ile MySQL 8.0 Kurulumu
Selamlar, bu yazımda macOS'ta Homebrew kullanarak MySQL 8.0'ı nasıl kuracağımızı adım adım göreceğiz. Yeni bir Mac açtığınızda ya da disk silip baştan kurulum yaptığınızda her seferinde 'şu komutlar neydi yahu' deyip aradığım için bir kez derli toplu yazayım dedim. Hadi başlayalım.
Aşağı yukarı her geliştirme makinasında bir noktada yerel bir veritabanı lazım oluyor. Docker'a sarmasız bir çözümü seven varsa, en kolay yol Homebrew. Sistem servisi gibi davranıyor, login'de otomatik başlıyor, kapatıp açması tek satır.
MySQL nasıl paketleniyor?
Homebrew, MySQL binary'lerini Apple Silicon makinelerde /opt/homebrew/ altına, eski Intel Mac'lerde ise /usr/local/ altına kuruyor. Veri dizini de buna göre farklı yerde duruyor (Apple Silicon için /opt/homebrew/var/mysql, Intel için /usr/local/var/mysql). Bu detay önemli, çünkü ileride my.cnf aramaya kalktığınızda hangi yola bakacağınızı bilmek lazım.
brew services ile de MySQL'i bir launch agent olarak kaydediyorsunuz. Yani siz oturum açar açmaz mysqld arka planda yükseliyor.
Ön gereksinimler
- macOS 12 veya üstü
- Homebrew kurulu (kurulu değilse brew.sh'taki tek satırlık komutla halledebilirsiniz)
- Xcode Command Line Tools (
xcode-select --install)
Bunlar tamamsa gerisi çok hızlı akıyor.
Kurulum
Önce Homebrew'u güncelleyelim, sonra MySQL'i kuralım:
brew update
brew install mysql
Bir not: brew install mysql her zaman 'son kararlı' sürümü kuruyor. Bu, MySQL 9 ya da daha üstü olabilir. Spesifik olarak 8.0 istiyorsanız versiyonlu formül kullanmanız gerekiyor:
brew install mysql@8.0
brew link mysql@8.0 --force
Versiyonlu formül kuruyorsanız bundan sonra brew services start mysql yerine brew services start mysql@8.0 yazmanız gerek; benim ekiplerle çalışırken yaptığım tercih bu, herkesin makinesinde aynı minor sürüm dönsün diye.
Servisi başlatmak
Login'de otomatik başla diyorsanız:
brew services start mysql
Sadece o oturum için açmak istiyorsanız mysql.server start da iş görüyor. Çalışıp çalışmadığını kontrol etmek için:
brew services list
Çıktı şöyle bir şey olmalı:
Name Status User File
mysql started kullanici ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Güvenli kurulum
MySQL ilk kurulduktan sonra mysql_secure_installation çalıştırmadan asla kullanmayın. Burada root parolası atıyor, anonim kullanıcıları siliyor, test veritabanını kaldırıyor. Yerel makinede bile bu adımı atlıyor olmak ileride alışkanlığa dönüşüyor ve bir gün production'a deploy ettiğinizde işiniz patlıyor.
mysql_secure_installation
Sıra ile parola politikası, anonim user'ları kaldırma, root'un uzaktan erişimini kapatma gibi sorular geliyor. Hepsine 'Y' demek genelde doğru cevap.
Bağlanmak
Artık bağlanabiliriz:
mysql -u root -p
Çalıştığını doğrulamak için:
SELECT VERSION();
Geliştirme kullanıcısı oluşturmak
Bence en çok atlanan kısım şu: yerelde herkes root ile bağlanıyor, sonra aynı connection string'i unutup başka bir yere kopyalıyor. Buna karşı her proje için ayrı bir kullanıcı açmak iyi bir alışkanlık.
CREATE DATABASE myapp;
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'StrongPass!2024';
GRANT ALL PRIVILEGES ON myapp.* TO 'devuser'@'localhost';
FLUSH PRIVILEGES;
Servisi durdurmak ve yeniden başlatmak
brew services stop mysql
brew services restart mysql
Sık karşılaşılan tuzaklar
- Yanlış path'te
my.cnfaramak: Homebrew defaultmy.cnfoluşturmuyor. Apple Silicon'da/opt/homebrew/etc/my.cnf, Intel'de/usr/local/etc/my.cnf. İnternette bulduğunuz Linux örnekleri/etc/my.cnf'i işaret ediyor, kanmayın. - Versiyonlu formülü link'lemeyi unutmak:
mysql@8.0kurupbrew link --forceyapmadıysanızmysqlkomutu PATH'te bulunmuyor. brew upgradeöncesi yedek almamak: Major sürüm atlaması data dizininde dönüşüm tetikleyebiliyor. Yerelde bile olsa önemli şemalarınız varsa öncemysqldumpalın.- Anonim kullanıcıları bırakmak:
mysql_secure_installation'ı atlayınca olası sorunlardan biri; yerelde de bu adımı geçmeyin.
Kapanış
Aslında macOS'ta MySQL kurulumu üç komuta inmiş durumda: brew install mysql, brew services start mysql, mysql_secure_installation. Bence önemli olan bu üç komut değil, sonrasında ayrı bir devuser yaratıp root'la çalışma alışkanlığından vazgeçmek. Umarım faydalı olur, görüşmek üzere.
