Mysql Serveri localhost Dışındaki Bağlantılara Açmak

Bunun için üç şeyi sırayla yapman gerekir: MySQL'in dinlediği adresi değiştirmek, uzaktan bağlanacak bir kullanıcı tanımlamak ve güvenlik duvarında 3306 portunu açmak.
Varsayılan olarak MySQL sadece 127.0.0.1 üzerinden dinler. Yapılandırma dosyası dağıtıma göre değişir:
Sistem Dosya
Ubuntu/Debian (MySQL) /etc/mysql/mysql.conf.d/mysqld.cnf
Ubuntu/Debian (MariaDB) /etc/mysql/mariadb.conf.d/50-server.cnf
CentOS/RHEL/Alma /etc/my.cnf veya /etc/my.cnf.d/server.cnf
Windows C:ProgramDataMySQLMySQL Server 8.0my.ini
 
Mysql Serveri localhost Dışındaki Bağlantılara Açmak

MariaDB üzerinde  (mariadb.cnf ve mariadb.conf.d var). bind-address ayarı burada, mysql klasörünün altındaki mariadb.conf.d içinde:  

/etc/mysql/mariadb.conf.d/50-server.cnf

 

Mysql Serveri localhost Dışındaki Bağlantılara AçmakKaydet ve servisi yeniden başlat (MariaDB'de servis adı mariadb):  
   sudo systemctl restart mariadb
  Kontrol et:
 
   sudo ss -tlnp | grep 3306
 Mysql Serveri localhost Dışındaki Bağlantılara Açmak
 Uzaktan bağlanacak kullanıcı oluştur:

MySQL'de kullanıcı, kullanıcı@adres çifti olarak tanımlanır. root@localhost uzaktan çalışmaz, ayrı kullanıcı gerekir.

 
 Sadece belirli bir IP'den bağlanabilsin (önerilen)
CREATE USER 'uzakkullanici'@'203.0.113.25' IDENTIFIED BY 'GucluBirSifre!';

 Sadece tek bir veritabanına yetki ver
GRANT ALL PRIVILEGES ON veritabani_adi.* TO 'uzakkullanici'@'203.0.113.25';

FLUSH PRIVILEGES;
 

Adres seçenekleri:

  • '203.0.113.25': tek IP
  • '203.0.113.%': o IP bloğu
  • '%': her yerden. Çok riskli, mümkünse kullanma
Var olan bir kullanıcıya erişim eklemek için:  
RENAME USER 'kullanici'@'localhost' TO 'kullanici'@'%';
  Bu ismi değiştirir, localhost bağlantısı gider. Hem localhost hem uzak istiyorsan ikinci bir CREATE USER yap.

Güvenlik duvarında 3306'yı aç

Ubuntu (ufw), sadece belirli IP'ye:

sudo ufw allow from 203.0.113.25 to any port 3306 proto tcp
 

Windows: Windows Defender Güvenlik Duvarı → Gelen Kurallar → Yeni Kural → Bağlantı Noktası → TCP 3306.

Bulut sunucu (AWS, Azure, Hetzner, DigitalOcean vb.) kullanıyorsan ayrıca panelden Security Group / Firewall kuralına 3306'yı eklemelisin.

4. Test

Uzak bilgisayardan:

mysql -h SUNUCU_IP -u uzakkullanici -p

Port açık mı bakmak için:
nc -zv SUNUCU_IP 3306
 

Hata mesajına göre sorun

  • Can't connect ... (110) veya zaman aşımı: Güvenlik duvarı ya da bulut firewall'u engelliyor.
  • Connection refused (111): MySQL hâlâ sadece localhost'u dinliyor, bind-address'i veya servisi kontrol et.
  • Access denied for user: Kullanıcı o IP için tanımlı değil ya da şifre yanlış. SELECT user, host FROM mysql.user; ile kontrol et.
  • Host 'x' is not allowed to connect: Kullanıcının host kısmı bağlanan IP'yle eşleşmiyor.

Güvenlik uyarıları

  • 3306'yı herkese açma. Botlar açık MySQL portlarını sürekli tarar ve şifre denemesi yapar. Mutlaka IP kısıtlaması koy.
  • Uzaktan root kullanma. Her uygulama için ayrı kullanıcı ve sadece gereken yetkiyi ver.
  • SSL zorunlu kıl: CREATE USER ... REQUIRE SSL; ile şifrelenmemiş bağlantıyı engelleyebilirsin.
  • Alternatif olarak SSH tüneli kullanabilirsin. Portu hiç açmadan güvenli bağlanırsın:
ssh -L 3307:127.0.0.1:3306 kullanici@SUNUCU_IP
 

Sonra yerelde 127.0.0.1:3307'ye bağlan.

Eğer sunucu cPanel/Plesk gibi bir panelle yönetiliyorsa, yukarıdakilerin yerine panelde Remote MySQL bölümüne bağlanacak IP'yi eklemen yeterli olur.


Kaynak

Yükleniyor...
Yükleniyor...