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

https://kervanhosting.com/bilgi-bankasi/makale/mysql-mariadb-uzaktan-baglanti-ve-too-many-connections-hatasi

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](https://kervanhosting.com/bilgi-bankasi/makale/mysql-mariadb-veritabani-nasil-kurulur-ve-guvenli-kullanilir) 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](https://kervanhosting.com/bilgi-bankasi/makale/ufw-ile-port-acma-ve-kapatma-ubuntu-guvenlik-duvari).

## 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 kullanici@203.0.113.10
```

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](https://kervanhosting.com/bilgi-bankasi/makale/nginx-erisim-gunlugunu-okuma-en-cok-istek-yapan-ip-ler).
- **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](https://kervanhosting.com/bilgi-bankasi/makale/wordpress-yavas-aciliyor-onbellek-ve-hizlandirma-adimlari).

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ı](https://kervanhosting.com/bilgi-bankasi/makale/hosting-paketimde-veritabani-mysql-ve-phpmyadmin).

## 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**

- [MySQL / MariaDB veritabanı nasıl kurulur ve güvenli kullanılır?](https://kervanhosting.com/bilgi-bankasi/makale/mysql-mariadb-veritabani-nasil-kurulur-ve-guvenli-kullanilir)
- [UFW ile port açma ve kapatma (Ubuntu güvenlik duvarı)](https://kervanhosting.com/bilgi-bankasi/makale/ufw-ile-port-acma-ve-kapatma-ubuntu-guvenlik-duvari)
- [WordPress "Error establishing a database connection" hatası](https://kervanhosting.com/bilgi-bankasi/makale/wordpress-error-establishing-a-database-connection-hatasi)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
