Yapmanız gereken ilk şey şu sorguyu çalıştırmaktır:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
Bu, SUPER ayrıcalığına sahip tüm kullanıcıları listeler . Uygulama ile ilişkili DB işlemesi yapan çoğu kullanıcı bu ayrıcalığı gerektirmez. Göre MySQL Dokümantasyon , SÜPER ayrıcalığa sahip olanlar aşağıdakileri yapabilirsiniz:
- Çoğaltma koordinatlarını denetlemek için CHANGE MASTER TO komutunu çalıştırın
- KILL veya
mysqladmin kill
diğer hesaplara ait evreleri öldürmek
- İkili günlükleri sistematik olarak silmek için İKİLİ GÜNLÜKLERİNİ BOŞALTIN
- Genel sistem değişkenlerini değiştirmek için SET GLOBAL kullanarak yapılandırma değişiklikleri yapın
- mysqladmin hata ayıklama komutu
- günlüğe kaydetmeyi etkinleştirme veya devre dışı bırakma
- * read_only * sistem değişkeni etkinleştirilmiş olsa bile güncelleme yapma
- bağımlı sunucularda çoğaltmayı başlatma ve durdurma
- saklanan programların ve görünümlerin DEFINER özniteliğindeki herhangi bir hesabın belirtilmesi
- BURADA SORUNUNUZ İÇİN EN ÖNEMLİ OLARAK :: max_connections sistem değişkeni tarafından kontrol edilen bağlantı sınırına ulaşılsa bile (bir kez) bağlanmanızı sağlar .
Root @ localhost olarak giriş yapmanız ve SUPER ayrıcalığını aşağıdaki gibi iptal etmeniz gerekir:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
Bunu yaptıktan sonra, tüm kullanıcılar mysql bağlantılarını ne zaman taşarsa, sadece root@localhost
giriş yapabilirsiniz. Sonuçta, eğer herkes ve büyükannesi SUPER ayrıcalığına sahip olsaydı, bu root@localhost
herkesin önünde bağlantı kurmayı engelleyecektir. Max_connections 200'de ise ve mysqld'i yeniden başlatmak zorunda kalmadan 300'e yükseltmeniz gerekiyorsa, max_connections'ı bu komutla dinamik olarak artırabilirsiniz :
mysql> SET GLOBAL max_connections = 300;
Bu, anında daha fazla bağlantıya izin verecektir, ancak sadece kapristeki sayıyı keyfi olarak artırmayın. MySQL'in artışı karşılamak için yeterli RAM'e sahip olduğundan emin olmalısınız.
CAVEAT: max_connections değerini dinamik olarak 300 olarak değiştirirseniz, lütfen /etc/my.cnf içine koyun
[mysqld]
max_connections=300
MySQL DB Sunucunuzda mysqltuner.pl dosyasını çalıştırabilirsiniz. Elinizde yoksa aşağıdakileri çalıştırın:
cd
wget mysqltuner.pl
perl mysqltuner.pl
Performans Metrikleri altındaki 3. satırda
-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)
İş parçacığı başına 5.4M bakın? Bu, max_connections ile çarpılır. Bu örnekte, bu maksimum yaklaşık 10.8G RAM olacaktır. Bu nedenle, max_connections'ı her başlattığınızda, mysqltuner.pl dosyasını çalıştırmalı ve işletim sistemine çok fazla bellek için bastığınızı kontrol etmelisiniz.
Her durumda, SUPER ayrıcalıklarına sahip olanları sınırlamak, bu kullanıcılara DB Connections ile sel mysqld'ini azaltma fırsatı verir.