7/24 Türkçe destek:[email protected]Sistem durumuDestek talebi

Uzak MySQL Bağlantısı: VPS’te Dışarıdan Veritabanı Erişimi

Okuma süresi: 5 dk

Kısa yanıt: Paylaşımlı hosting paketlerimizde uzak MySQL erişimi (Remote MySQL) yoktur; veritabanlarına yalnız aynı sunucudaki siteleriniz bağlanır. Dışarıdan bağlantı için veritabanının root erişimli bir VPS’te çalışması gerekir. VPS’te en güvenli yol SSH tünelidir; portu açmanız gerekiyorsa bind-address ayarını değiştirin, kullanıcıyı yalnız bağlanacak IP adresi için oluşturun ve UFW’de 3306 portunu yalnız o IP’ye açın.

Bu rehber kimin için: Harici araçla veritabanına bağlanan geliştiriciler · Gereken süre: 10 dakika · Seviye: Orta

Paylaşımlı hosting paketlerimizde Uzak MySQL ekranı yoktur ve veritabanlarına dışarıdan bağlantı açılmaz; veritabanı içeriğini cPanel’deki phpMyAdmin ile görüntüleyip düzenlersiniz. Raporlama aracı, masaüstü istemcisi (HeidiSQL, DBeaver, MySQL Workbench) ya da başka bir sunucudaki uygulama veritabanına doğrudan bağlanacaksa veritabanını root erişimli bir VPS’te çalıştırmanız gerekir. VPS’te de MySQL ve MariaDB kurulumdan sonra yalnız sunucunun kendisini (127.0.0.1) dinler; erişimi yalnız belirli IP adreslerine açın, herkese açık erişim (%) güvenlik riski oluşturur.

VPS’te MySQL’i dış bağlantıya hazırlama

Bu ayarlar yalnız 3306 portunu doğrudan açmanız gerekiyorsa gereklidir; masaüstü aracıyla bağlanacaksanız önce aşağıdaki SSH tüneli bölümüne bakın. UFW’yi henüz açmadıysanız önce UFW güvenlik duvarı rehberindeki gibi SSH’a izin verip etkinleştirin.

  1. MySQL kurulu değilse kurun: sudo apt update && sudo apt install -y mysql-server (MariaDB tercih ederseniz mariadb-server).
  2. Yapılandırma dosyasını açın: MySQL’de sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf, MariaDB’de sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  3. bind-address = 127.0.0.1 satırını VPS’in IP adresiyle (ör. bind-address = 203.0.113.10) ya da tüm IPv4 arayüzleri için 0.0.0.0 ile değiştirin.
  4. Servisi yeniden başlatın: sudo systemctl restart mysql (MariaDB’de sudo systemctl restart mariadb).
  5. sudo mysql ile bağlanıp kullanıcıyı yalnız bağlanacak IP için oluşturun: CREATE USER 'rapor'@'198.51.100.25' IDENTIFIED BY 'GucluBirSifre';
  6. Yalnız gereken yetkiyi verin: GRANT SELECT ON uygulamadb.* TO 'rapor'@'198.51.100.25'; yazma gerekiyorsa INSERT, UPDATE ve DELETE ekleyin. CREATE USER ve GRANT ile verilen yetkiler hemen geçerli olur, FLUSH PRIVILEGES gerekmez.

Veritabanı sunucunuzun ayarlarını ekibimize bırakmak isterseniz MySQL/MariaDB ayarları da sunucu yönetimi hizmetinin kapsamındadır.

Bağlantıyı açma

  1. IP adresinizi öğrenin: IP sorgulama aracı, bağlanacağınız bilgisayarın genel IP adresini gösterir; başka bir sunucudan bağlanacaksanız o sunucunun IP adresini kullanın.
  2. Erişim ekleyin: VPS’te güvenlik duvarında 3306 portunu yalnız bu IP’ye açın: sudo ufw allow from 198.51.100.25 to any port 3306 proto tcp. MySQL’in dış bağlantıyı dinlemesi ve IP’ye özel kullanıcı için yukarıdaki bölümdeki ayarları yapın.
  3. İstemciyi ayarlayın: HeidiSQL, DBeaver veya MySQL Workbench’te ana makine alanına VPS’in IP adresini (alan adınız Cloudflare gibi bir vekilin arkasındaysa alan adını değil), port alanına 3306, kullanıcıya IP’ye özel oluşturduğunuz kullanıcıyı yazın; VPS’te kullanıcı adlarında önek yoktur.
  4. Şifreleme: İstemcide SSL/TLS seçeneğini açın. Sunucuda ALTER USER 'rapor'@'198.51.100.25' REQUIRE SSL; komutuyla bu kullanıcının şifresiz bağlantısını reddedebilirsiniz. MySQL 8 TLS’i kurulumdan itibaren destekler; MariaDB’de önce sunucuya bir sertifika tanımlamanız gerekir.
  5. Bağlanın: Bağlantıyı test edin; komut satırından mysql -h 203.0.113.10 -u rapor -p uygulamadb ile de deneyebilirsiniz.
  6. İş bitince kaldırın: Kalıcı ihtiyaç yoksa DROP USER 'rapor'@'198.51.100.25'; ile kullanıcıyı, sudo ufw delete allow from 198.51.100.25 to any port 3306 proto tcp ile güvenlik duvarı kuralını silin.

Daha güvenli alternatif: SSH tüneli (VPS ve VDS)

VPS veya VDS sunucunuzda 3306 portunu açmadan, SSH bağlantısı üzerinden tünel kurarak veritabanına bağlanabilirsiniz. HeidiSQL ve DBeaver’da bağlantı türü olarak “SSH tüneli” seçip SSH bilgilerinizi, veritabanı sunucusu olarak 127.0.0.1 girin. Komut satırından ssh -N -L 3307:127.0.0.1:3306 [email protected] ile tüneli açıp istemcinizi 127.0.0.1 ve 3307 portuna bağlayabilirsiniz. Bu yöntemde bind-address değiştirilmez ve 3306 portu kapalı kalır; veritabanı kullanıcısını 'rapor'@'127.0.0.1' olarak tanımlamanız yeterlidir. Tünel, IP adresi sık değişen bağlantılarda da çalışır. Paylaşımlı hosting paketlerimizde SSH erişimi olmadığından tünel kullanılamaz; ayrıntılar için cPanel SSH erişimi.

Hâlâ çözülmediyse

“Can’t connect to MySQL server” hatası alırsanız önce sunucunun 3306 portunun dışarıdan yanıt verip vermediğini port kontrol ile test edin. Araç bağlantıyı kendi sunucumuzdan dener; UFW’de yalnız kendi IP adresinize izin verdiyseniz portu kapalı göstermesi beklenen durumdur. Sunucuda sudo ss -tlnp komutunun çıktısında 3306 satırının 127.0.0.1 değil VPS IP’si ya da 0.0.0.0 gösterdiğini, sudo ufw status ile kuralın yerinde olduğunu kontrol edin. “Access denied” hatası, kullanıcının başka bir IP için tanımlandığını ya da IP adresinizin değiştiğini gösterir; SELECT user, host FROM mysql.user; ile tanımlı kullanıcılara bakın. Veritabanını ayrı bir sunucuda çalıştırmak isterseniz VPS sunucu paketlerimizi inceleyebilirsiniz.

Sık sorulan sorular

Joker karakter kullanabilir miyim?

Evet. MySQL kullanıcısının host kısmında 'rapor'@'192.0.2.%' gibi bir aralık tanımlayabilirsiniz; UFW’de aynı aralığı 192.0.2.0/24 biçiminde yazarsınız. Aralığı mümkün olduğunca dar tutun.

Uygulamam yavaş çalışıyor.

Uzak bağlantılarda her sorgu ağ gecikmesi ekler; üretim uygulamalarını veritabanına yakın çalıştırın.

Port kontrol açık diyor ama ofisten bağlanamıyorum.

Araç, 3306 portuna dticaret sunucusundan bağlanmayı dener; sizin ağınızı ölçmez. Kurumsal ağlar ve bazı modemler giden 3306 bağlantılarını engelleyebilir. Mobil veri gibi başka bir ağdan deneyecekseniz o ağın genel IP adresini de UFW kuralına ve MySQL kullanıcısının host kısmına eklemeniz gerekir. Kurumsal ağlarda en pratik çözüm SSH tünelidir; bağlantı yalnız SSH portu üzerinden kurulur.

Paylaşımlı hostingte veritabanıma dışarıdan bağlanabilir miyim?

Hayır. Paylaşımlı hosting paketlerimizde Uzak MySQL ekranı ve SSH yoktur; veritabanına yalnız aynı sunucudaki siteleriniz bağlanır. Tabloları görüntülemek, sorgu çalıştırmak ve yedek almak için phpMyAdmin kullanabilirsiniz. Harici bir aracın ya da başka bir sunucunun doğrudan bağlanması gerekiyorsa veritabanını VPS sunucu üzerinde çalıştırın; kurulum ve bakımı ekibimize bırakmak için sunucu yönetimi hizmetini ekleyebilirsiniz.

bind-address için 0.0.0.0 mı yoksa sunucunun IP adresini mi yazmalıyım?

Tek genel IP adresi olan bir VPS’te ikisi de dış bağlantıyı açar; 0.0.0.0 tüm IPv4 arayüzlerini, IP adresi ise yalnız o arayüzü dinler. Erişimi asıl sınırlayan şey IP’ye özel veritabanı kullanıcısı ve UFW kuralıdır; bind-address hangisi olursa olsun bu ikisini mutlaka uygulayın. MySQL 8.0.13 ve sonrasında birden fazla adresi virgülle ayırarak yazabilirsiniz (ör. 127.0.0.1,203.0.113.10).

İlgili rehberler