MySQL/MariaDB'ye uzaktan bağlanma ve "Too many connections" hatası

Linux Sunucu (SSH) 61 görüntülenme Markdown

Aynı sunucuda çalışan uygulama veritabanına localhost ile bağlanır; sorun yoktur. Ama bilgisayarınızdan bir yönetim aracıyla ya da başka bir sunucudaki uygulamadan bağlanmak istediğinizde iki sık hata çıkar: bağlantının hiç kurulmaması ve "Too many connections". Bu rehber ikisini ele alır. Temel kurulum için önce MySQL ve MariaDB kurulumu makalesine bakın.

Uzaktan bağlanma: üç katman

Uzaktan bağlantının çalışması için üç şey aynı anda doğru olmalı. Bir tanesi bile yanlışsa hata alırsınız.

1. Veritabanı dışarıdan dinliyor mu?

Varsayılan olarak MySQL/MariaDB yalnızca 127.0.0.1 adresini dinler. Ayar dosyasında (/etc/mysql/mariadb.conf.d/50-server.cnf ya da /etc/mysql/mysql.conf.d/mysqld.cnf) bind-address satırına bakın:

bind-address = 127.0.0.1

Başka sunucudan bağlanılacaksa sunucunun özel ya da genel IP'sini yazın (bind-address = 203.0.113.10) ve servisi yeniden başlatın: sudo systemctl restart mariadb. Doğrulama: sudo ss -tlnp | grep 3306.

2. Kullanıcı o adresten bağlanabilir mi?

MySQL'de kullanıcı adı ile birlikte hangi adresten bağlanabileceği de tanımlıdır. 'ali'@'localhost' yalnızca yerelden bağlanır. Uzaktan için ayrı bir kullanıcı tanımlayın ve yalnızca gereken adresi yazın:

sudo mysql
CREATE USER 'uyg'@'198.51.100.7' IDENTIFIED BY 'GucluBirParola';
GRANT ALL PRIVILEGES ON uygulama.* TO 'uyg'@'198.51.100.7';
FLUSH PRIVILEGES;

'%' (her adres) yazmak kolaydır ama tehlikelidir; kullanmayın. Yalnızca tek bir veritabanı için yetki verin (uygulama.*), tümü için (*.*) değil.

3. Güvenlik duvarı izin veriyor mu?

sudo ufw allow from 198.51.100.7 to any port 3306 proto tcp

3306 portunu herkese açmayın. Sunucuda panelin güvenlik duvarı aracında da kural varsa orada da izin verin: UFW rehberi.

En güvenli yol: SSH tüneli

Veritabanı portunu hiç açmadan, SSH üzerinden bağlanın. Kendi bilgisayarınızda:

ssh -L 3307:127.0.0.1:3306 [email protected]

Tünel açıkken yönetim aracınızı 127.0.0.1 adresi ve 3307 portuyla bağlayın. HeidiSQL, DBeaver, MySQL Workbench gibi araçların çoğunda ayarlarda "SSH tüneli" seçeneği vardır ve komutu sizin yerinize çalıştırır. Bu yöntemde sunucuda hiçbir ayar (bind-address, güvenlik duvarı) değişmez.

"Too many connections" hatası

Hata uygulamanızda ya da sitenizde ERROR 1040 (HY000): Too many connections olarak görünür: veritabanı sunucusu eşzamanlı bağlantı sınırına (max_connections, varsayılan çoğu kurulumda 151) ulaştı. Nedenleri:

  • Bağlantı sızıntısı: Uygulama bağlantıları açıp kapatmıyor. En sık sebep budur; sınırı yükseltmek sorunu ertelemekten öteye gitmez.
  • Yoğun trafik ya da bir bot saldırısı birçok sayfayı aynı anda isteyip veritabanını yoruyor: erişim günlüğüne bakın.
  • Yavaş sorgular bağlantıları uzun süre tutuyor.

Kimin bağlı olduğunu görmek için:

sudo mysql -e "SHOW FULL PROCESSLIST;"
sudo mysql -e "SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';"

Geçici çözüm: sudo mysql -e "SET GLOBAL max_connections = 300;" (yeniden başlayınca kaybolur; kalıcı için ayar dosyasının [mysqld] bölümüne max_connections = 300 yazın). Her bağlantı bellek tüketir; sınırı sunucunun belleğine göre yükseltin. Kalıcı çözüm, sızıntıyı gidermek ve önbellek kullanmaktır: WordPress hızlandırma.

Hosting paketinde bağlantı sınırlarını sunucu tarafı yönetir; sürekli bu hatayı alıyorsanız sitenizin yükünü azaltın: hosting veritabanı.

Sık sorulanlar

Hosting paketindeki veritabanına uzaktan bağlanabilir miyim?

Hosting sunucusunda veritabanı yalnızca yerelden erişilebilir; uzaktan bağlantı açık değildir. Yönetim için phpMyAdmin'i kullanın.

Bağlanıyorum ama "Access denied" alıyorum.

Kullanıcı o adresten bağlanmak için tanımlı değildir ya da parola yanlıştır. SELECT user, host FROM mysql.user; ile kullanıcı ve adres çiftlerini kontrol edin.

MariaDB mi MySQL mi?

Çoğu uygulama ikisiyle de çalışır. MariaDB, MySQL'in topluluk tarafından geliştirilen bir çatalıdır ve Debian/Ubuntu'da varsayılan seçenektir.

İlgili makaleler

Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.