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.cnf aramak: Homebrew default my.cnf oluş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.0 kurup brew link --force yapmadıysanız mysql komutu 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 önce mysqldump alı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.