MySQL Too Many Connections Hatası Nasıl Çözülür

Son gözden geçirme: Eylül 2026 · MariaDB 10.11 ve MySQL 8.0 resmî dokümanına göre

Hızlı çözüm

ERROR 1040 (HY000): Too many connections — MySQL too many connections hatası, veritabanı sunucusundaki eş zamanlı bağlantı sayısının max_connections sınırına dayandığını gösterir. Önce bağlantıları neyin tuttuğunu bulun, sınırı ancak sonra ve belleğe göre yükseltin.

  1. Paylaşımlı hostingdeyseniz uygulamanızdaki kalıcı bağlantıları kapatın ve destek talebi açın; sunucu ayarı sizde değildir.
  2. VPS/VDS’te sudo mysql ile girip SHOW FULL PROCESSLIST; çalıştırın.
  3. Sleep durumunda bekleyen bağlantılar çoksa wait_timeout değerini düşürün.
  4. Gerçek yük artmışsa max_connections değerini bellek hesabıyla yükseltin.
Panel cPanel (paylaşımlı, yalnız uygulama tarafı) · VPS/VDS’te panel yok
Sistem MariaDB 10.11 / MySQL 8.0, Ubuntu 22.04/24.04, AlmaLinux 8/9
Yetki Paylaşımlıda cPanel kullanıcısı · VPS/VDS’te root ya da sudo
Narhost ürünü VPS Sunucu, VDS Sunucu

Başlamadan önce

  • Hatanın tam metnini ve saatini not edin; PHP uygulamalarında SQLSTATE[08004] [1040] Too many connections biçiminde görünür.
  • VPS/VDS’te yapılandırma dosyasını değiştirmeden önce yedeğini alın.
  • Sunucunun toplam RAM miktarını free -h ile öğrenin; sınır hesabı buna göre yapılacak.

MySQL Too Many Connections Hatası Neden Olur

Her istemci bağlantısı sunucuda bir iş parçacığı ve kendi arabellekleri demektir. Sınır dolunca yeni bağlantılar reddedilir, site “Error establishing a database connection” benzeri bir sayfa gösterir. MariaDB’de varsayılan sınır 151’dir ve SUPER ya da CONNECTION ADMIN yetkili kullanıcı için bir bağlantı ayrılır; bu yüzden hata sırasında bile root ile içeri girebilirsiniz. Ayrıntı MariaDB sistem değişkenleri dokümanında.

Sık görülen nedenler: sorgusu bitmiş ama kapatılmamış bağlantılar (Sleep), PHP’de kalıcı bağlantı (pconnect) kullanan eklentiler, üst üste binen cron görevleri, kilitlenen bir tablo yüzünden birikip bekleyen sorgular ve bot trafiği. Sınırı yükseltmek bu durumların çoğunda sorunu yalnız erteler.

Adım Adım Çözüm

Yöntem 1 — Paylaşımlı hosting

  1. Uygulamanın bağlantı davranışını düzeltin. Veritabanı ayarlarında kalıcı bağlantıyı kapatın, eklentileri tek tek devre dışı bırakarak hatayı tetikleyeni bulun.

    Beklenen sonuç: trafik zirvesinde hata seyrekleşir.

  2. Kaynak sınırlarına bakın. Eş zamanlı işlem sayısı dolduğunda bağlantılar da birikir; CloudLinux LVE sınırlarını cPanel’den kontrol edin.

    Beklenen sonuç: EP ya da CPU grafiğinde hatanın saatine denk gelen bir sınır aşımı görürseniz neden budur.

  3. Destek talebi açın. Sunucu genelindeki max_connections değeri müşteri tarafından değiştirilemez; hata metnini ve saatini talebe yazın.

Yöntem 2 — VPS/VDS (root)

  1. Mevcut durumu ölçün:
    sudo mysql -e "SHOW VARIABLES LIKE 'max_connections';"
    sudo mysql -e "SHOW GLOBAL STATUS LIKE 'Max_used_connections';"
    sudo mysql -e "SHOW FULL PROCESSLIST;"

    Beklenen sonuç: Max_used_connections sınıra eşitse sınır gerçekten dolmuştur. İşlem listesinde Command sütunu çoğunlukla Sleep ise sorun kapatılmayan bağlantılardır; Query ve uzun Time değerleri ise yavaş sorgulara işaret eder.

  2. Takılan bir sorguyu sonlandırın:
    sudo mysql -e "KILL 1234;"

    Beklenen sonuç: 1234 yerine işlem listesindeki Id değerini yazın; bağlantı kapanır.

  3. Boşta bekleyen bağlantıları kısaltın ve sınırı ayarlayın. Ubuntu’da MariaDB için /etc/mysql/mariadb.conf.d/50-server.cnf, MySQL için /etc/mysql/mysql.conf.d/mysqld.cnf dosyasının [mysqld] bölümüne yazın:
    [mysqld]
    max_connections = 300
    wait_timeout = 300

    Beklenen sonuç: sudo systemctl restart mariadb (MySQL’de mysql) sonrası yeni değerler geçerli olur.

Dikkat

Sınırı bellek hesabı yapmadan yükseltmeyin. Kaba ölçü: innodb_buffer_pool_size + bağlantı sayısı × (sort, join, read arabellekleri + iş parçacığı yığını). Toplam RAM’i aşarsa çekirdek veritabanı sürecini sonlandırır ve hata daha ağır hâle gelir.

MySQL too many connections hatası teşhis şeması — işlem listesini okuma, boşta bekleyen bağlantıları kısaltma, sınırı bellek hesabıyla yükseltme
Önce bağlantıları tutanı bulun, sınırı en son ve belleğe göre artırın.

Doğrulama

Sonuç

SHOW VARIABLES LIKE 'max_connections'; yeni değeri gösteriyor ve yoğun saatlerde Max_used_connections sınırın belirgin biçimde altında kalıyorsa sorun çözülmüştür. SHOW GLOBAL STATUS LIKE 'Threads_connected'; ile anlık bağlantı sayısını da izleyebilirsiniz.

Hâlâ Çözülmediyse

Narhost desteği

Talebe şunları ekleyin: alan adı ya da sunucu IP adresi, hatanın birebir metni ve saati, VPS’teyseniz SHOW FULL PROCESSLIST çıktısı. Paylaşımlı hostingte sunucu tarafını biz inceleriz. Yük sürekli artıyorsa paylaşımlı hostingden VPS’e geçiş yazısı karar vermenize yardım eder.

Destek talebi aç

Sıkça sorulan sorular

MySQL too many connections hatasında root ile de giremezsem ne yapmalıyım?

Ayrılan tek bağlantıyı başka bir yetkili oturum kullanıyor olabilir. Web sunucusunu ya da PHP-FPM’i kısa süreliğine durdurup bağlantıların düşmesini bekleyin, sonra sudo mysql ile girin.

max_connections değerini yeniden başlatmadan değiştirebilir miyim?

Evet, SET GLOBAL max_connections = 300; anında uygulanır ama yeniden başlatmada kaybolur. Kalıcı olması için değeri yapılandırma dosyasına da yazın.

max_user_connections hatası aynı şey mi?

Hayır. O hata sunucu genelindeki değil, tek bir veritabanı kullanıcısına tanınan sınırın dolduğunu gösterir; paylaşımlı hostingte bu sınır için de destek talebi açılır.

Bu makale sorununuzu çözdü mü?

Çözemediniz mi?

Teknik ekibimiz sunucu tarafındaki ayarları sizin için kontrol edebilir. Destek talebinizde alan adınızı ve aldığınız hata metnini paylaşmanız süreci hızlandırır.

Etiketler: mariadb

İlgili çözümler