MySQL’de max_user_connections Parametresi: Kapsamlı Rehber
MySQL veritabanı yönetiminde kullanıcı başına bağlantı sayısını kontrol etmek, sistem kaynaklarının verimli kullanılması ve performans optimizasyonu açısından kritik öneme sahiptir. Bu makalede max_user_connections parametresinin ne olduğunu, nasıl kontrol edileceğini ve nasıl ayarlanacağını detaylı olarak inceleyeceğiz.
max_user_connections Nedir?
max_user_connections, MySQL’de belirli bir kullanıcının aynı anda açabileceği maksimum bağlantı sayısını belirleyen bir sistem değişkenidir. Bu parametre:
- Varsayılan olarak 0 değerine sahiptir (sınırsız bağlantı anlamına gelir)
- Hem global hem de kullanıcı bazında ayarlanabilir
- Veritabanı kaynaklarının adil dağılımını sağlar
- DDoS saldırılarına ve yanlışlıkla oluşan bağlantı sızıntılarına karşı koruma sağlar
Mevcut Değeri Kontrol Etme
1. Global Ayarı Kontrol Etme
Global max_user_connections değerini görmek için:
|
1 |
SHOW VARIABLES LIKE 'max_user_connections'; |
veya
|
1 |
SELECT @@global.max_user_connections; |
2. Belirli Bir Kullanıcının Ayarını Kontrol Etme
Bir kullanıcıya özel tanımlanmış limit varsa, bunu görmek için:
|
1 2 3 |
SELECT user, host, max_user_connections FROM mysql.user WHERE user = 'kullanici_adi'; |
3. Aktif Bağlantıları Görüntüleme
Hangi kullanıcıların kaç bağlantısı olduğunu görmek için:
|
1 2 3 |
SELECT user, COUNT(*) as baglanti_sayisi FROM information_schema.processlist GROUP BY user; |
max_user_connections Değerini Ayarlama
Yöntem 1: Global Olarak Ayarlama
Geçici Ayarlama (sunucu yeniden başlatılınca sıfırlanır):
|
1 |
SET GLOBAL max_user_connections = 50; |
Kalıcı Ayarlama: MySQL yapılandırma dosyasını düzenleyin (my.cnf veya my.ini):
|
1 2 |
[mysqld] max_user_connections = 50 |
Değişiklikleri uygulamak için MySQL’i yeniden başlatın:
|
1 |
sudo systemctl restart mysql |
veya
|
1 |
sudo service mysql restart |
Yöntem 2: Kullanıcı Bazında Ayarlama
Belirli bir kullanıcı için özel limit tanımlamak daha esnek bir yaklaşımdır:
Yeni kullanıcı oluştururken:
|
1 2 3 |
CREATE USER 'kullanici'@'localhost' IDENTIFIED BY 'sifre' WITH MAX_USER_CONNECTIONS 10; |
Mevcut kullanıcı için güncelleme:
|
1 2 |
ALTER USER 'kullanici'@'localhost' WITH MAX_USER_CONNECTIONS 10; |
Limiti kaldırma (sınırsız bağlantı):
|
1 2 |
ALTER USER 'kullanici'@'localhost' WITH MAX_USER_CONNECTIONS 0; |
Yöntem 3: GRANT Komutuyla Ayarlama
|
1 2 |
GRANT USAGE ON *.* TO 'kullanici'@'localhost' WITH MAX_USER_CONNECTIONS 15; |
Önemli Noktalar ve Best Practice’ler
Öncelik Sırası: Kullanıcı bazında tanımlanan limit, global ayardan önceliklidir. Eğer kullanıcı için özel bir değer tanımlanmışsa (0’dan farklı), global ayar göz ardı edilir.
Uygun Değer Seçimi: Değer seçerken göz önünde bulundurulması gerekenler:
- Uygulama mimariniz (connection pooling kullanıyor musunuz?)
- Eşzamanlı kullanıcı sayısı
- Sunucu kaynaklarınız (RAM, CPU)
max_connectionsglobal parametresi (tüm bağlantılar için üst limit)
Monitoring: Düzenli olarak aktif bağlantıları izleyin ve gerektiğinde limitleri ayarlayın.
Connection Pooling: Uygulama seviyesinde connection pooling kullanıyorsanız, pool boyutunuz ile max_user_connections değerinizin uyumlu olmasına dikkat edin.
Pratik Örnekler
Örnek 1: Web Uygulaması Kullanıcısı
|
1 2 3 |
-- Her web sunucusu için maksimum 20 bağlantı ALTER USER 'webapp_user'@'%' WITH MAX_USER_CONNECTIONS 20; |
Örnek 2: Raporlama Kullanıcısı
|
1 2 3 |
-- Raporlama için sınırlı bağlantı ALTER USER 'report_user'@'localhost' WITH MAX_USER_CONNECTIONS 5; |
Örnek 3: Admin Kullanıcısı
|
1 2 3 |
-- Admin için sınırsız bağlantı ALTER USER 'admin'@'localhost' WITH MAX_USER_CONNECTIONS 0; |
Sorun Giderme
Kullanıcı bağlantı limitine ulaştığında şu hatayı alırsınız:
|
1 |
ERROR 1203 (42000): User 'kullanici' has exceeded the 'max_user_connections' resource (current value: X) |
Bu durumda:
- Aktif bağlantıları kontrol edin
- Gereksiz bağlantıları kapatın veya limiti artırın
- Uygulama kodunuzda bağlantı sızıntısı olup olmadığını kontrol edin
max_user_connections parametresi, MySQL veritabanınızın güvenliğini ve performansını optimize etmek için güçlü bir araçtır. Kullanıcı bazında esnek limitler tanımlayarak hem sistem kaynaklarınızı verimli kullanabilir hem de potansiyel sorunlara karşı proaktif önlemler alabilirsiniz.
Bir yanıt yazın