Zuerst müssen Sie diese Abfrage ausführen:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
Dadurch werden alle Benutzer aufgelistet , die über die Berechtigung SUPER verfügen . Die meisten Benutzer, die eine anwendungsbezogene DB-Verarbeitung durchführen, benötigen diese Berechtigung nicht. Laut der MySQL-Dokumentation können Personen mit SUPER-Berechtigungen Folgendes tun:
- Führen Sie CHANGE MASTER TO aus, um die Replikationskoordinaten zu steuern
- TÖTEN oder
mysqladmin kill
Threads anderer Konten beenden
- PINGE BINARY LOGS zum systematischen Löschen von Binärprotokollen
- Nehmen Sie Konfigurationsänderungen mit SET GLOBAL vor, um globale Systemvariablen zu ändern
- mysqladmin Debug-Befehl
- Aktivieren oder Deaktivieren der Protokollierung
- Aktualisierungen durchführen, auch wenn die Systemvariable * read_only * aktiviert ist
- Starten und Stoppen der Replikation auf Slave-Servern
- Angabe eines beliebigen Kontos im DEFINER-Attribut gespeicherter Programme und Ansichten
- HIER IST DAS WICHTIGSTE FÜR IHR PROBLEM :: Ermöglicht Ihnen die Verbindung (einmal), auch wenn das von der Systemvariablen max_connections gesteuerte Verbindungslimit erreicht ist.
Sie müssen sich als root @ localhost anmelden und das SUPER-Privileg wie folgt widerrufen:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
Sobald Sie dies getan haben, root@localhost
können sich nur Benutzer anmelden , wenn alle Benutzer MySQL-Verbindungen überfluten . Wenn jeder und seine Großmutter das SUPER-Privileg hätten, würde dies schließlich verhindern, dass sie sich root@localhost
jemals vor allen anderen verbinden. Wenn max_connections bei 200 liegt und Sie es auf 300 erhöhen müssen, ohne mysqld neu starten zu müssen, können Sie die max_connections mit diesem Befehl dynamisch erhöhen :
mysql> SET GLOBAL max_connections = 300;
Dadurch werden sofort mehr Verbindungen wirksam, aber erhöhen Sie die Anzahl nicht einfach willkürlich aus einer Laune heraus. Sie müssen sicherstellen, dass MySQL über genügend RAM verfügt, um die Erhöhung zu berücksichtigen.
CAVEAT: Wenn Sie max_connections dynamisch auf 300 ändern, geben Sie es bitte in /etc/my.cnf ein
[mysqld]
max_connections=300
Sie können mysqltuner.pl auf Ihrem MySQL DB Server ausführen. Wenn Sie es nicht haben, führen Sie Folgendes aus:
cd
wget mysqltuner.pl
perl mysqltuner.pl
Die 3. Zeile unter Leistungsmetriken enthält dies
-------- 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)
Sehen Sie die 5,4 Millionen pro Thread? Das wird mit max_connections multipliziert. In diesem Beispiel wären das maximal etwa 10,8 GB RAM. Daher sollten Sie jedes Mal, wenn Sie max_connections aufrufen, mysqltuner.pl ausführen und prüfen, ob Sie das Betriebssystem für zu viel Speicher drücken.
In jedem Fall bietet die Einschränkung, wer über SUPER-Berechtigungen verfügt, diesen Benutzern die Möglichkeit, das Überfluten von mysqld mit DB Connections zu verringern.