Eine kurze Diskussion über die maximale Anzahl geöffneter Dateien für MySQL-Systembenutzer

Eine kurze Diskussion über die maximale Anzahl geöffneter Dateien für MySQL-Systembenutzer

Was Sie aus Büchern lernen, ist immer oberflächlich und Sie werden nie wissen, dass dies zu weiteren Ausfallzeiten führt ... Ich werde einen meiner dummen Fehlerbehebungsprozesse aufzeichnen.

Letzte Woche meldete ein gerade gestartetes System, dass es nicht mehr angemeldet werden konnte. Da dieses Problem bei diesem System schon seit Kurzem auftritt und die Entwickler nach dem Problem suchen, haben wir dem nicht viel Aufmerksamkeit geschenkt. Ich habe mich also beim Betriebssystem angemeldet, mich mit mysql -uroot -p bei der Datenbank angemeldet, und dann ist nichts passiert und ich konnte mich nicht anmelden ...

Zur Erklärung: MySQL wird unter dem Benutzer mysql installiert. Zwar werden die Datenbankparameter bei der Installation angepasst, auf Betriebssystemebene werden jedoch keine Anpassungen vorgenommen. Daher ist die maximale Anzahl geöffneter Dateien für den Benutzer mysql auf den Standardwert 1024 begrenzt, der mit ulimit -n abgefragt werden kann. Als ich mich dann mit dem MySQL-Root-Konto bei der Datenbank anmeldete, meldete ich mich auch als MySQL-Systembenutzer an und schaute mir dann die Serverauslastung zu diesem Zeitpunkt an. CPU und Speicher waren alle normal, aber es gab eine große Anzahl von Anwendungen, die eine Verbindung zur Datenbank herstellten.

An diesem Punkt sollte das Problem klar sein. Die Anzahl der vom Systembenutzer geöffneten MySQL-Dateien hat möglicherweise das maximale Limit erreicht, und natürlich können keine weiteren Verbindungen geöffnet werden.

Daran habe ich damals allerdings nicht gedacht. Was mir einfiel, war, nicht den Systembenutzer zu ändern, um sich anzumelden, nicht die Anwendung zu stoppen, sondern die Datenbank neu zu starten. . . Darüber hinaus werden über diese Datenbank mehr als nur dieses eine Unternehmen verwaltet, obwohl es sich bei keinem dieser Unternehmen um ein wichtiges handelt. . .

Also bereitete ich den Neustart der Datenbank vor und führte weiterhin mysqladmin -uroot -p shutdown unter dem MySQL-Benutzer aus. Es besteht kein Zweifel, dass dies definitiv nicht reagiert. Der Grund ist der gleiche wie der vorherige Root-Account, der keine Verbindung zur Datenbank herstellen kann. Nach Strg+C wird der folgende Fehler gemeldet

^Cmysqladmin: Verbindung zum Server bei „localhost“ fehlgeschlagen
Fehler: „Verbindung zum MySQL-Server beim Warten auf erstes Kommunikationspaket verloren, Systemfehler: 4“

Dann habe ich etwas noch Dümmeres getan, obwohl ich befürchtete, dass dadurch Daten verloren gehen könnten, und habe den MySQL-Prozess beendet. . . Starten Sie dann MySQL neu und das System ist verfügbar. Es war wirklich dumm. Nachdem ich damit fertig war, fiel mir sofort ein, dass es viele bessere Möglichkeiten gab, damit umzugehen, aber ich habe mich für die dümmste entschieden.

Als ich mich heute erneut bei der Datenbank anmeldete, stellte ich fest, dass mehrere Parameter von dem abwichen, was ich in die Konfigurationsdatei geschrieben hatte, z. B. max_connections, table_open_cache usw., die alle auf die Standardwerte eingestellt waren. Ich sah mir das letzte Startprotokoll an und es gab tatsächlich Warnungen.

2019-03-15T08:14:03.038750Z 0 [Warnung] Geänderte Grenzwerte: max_open_files: 1024 (angefordert 12010)
2019-03-15T08:14:03.038911Z 0 [Warnung] Geänderte Grenzwerte: max_connections: 214 (angefordert 2000)
2019-03-15T08:14:03.038916Z 0 [Warnung] Geänderte Grenzwerte: table_open_cache: 400 (angefordert 5000)

Offensichtlich berechnet MySQL die maximale Anzahl von Dateien, die die Instanz basierend auf der Parametereinstellung öffnen muss, die die maximale Grenze des aktuellen Systembenutzers überschreitet. Daher wird der Parameter nicht verwendet und der Standardwert wird verwendet. Natürlich steht Ihnen die Datenbank nach dem Start zur Verfügung und Sie können die Parameter auch nach dem Start manuell festlegen.

setze global max_connections=2000;
Setzen Sie den globalen table_open_cache = 5000.

Allerdings tritt wahrscheinlich das zuvor aufgetretene Problem erneut auf, d. h. die Anzahl der Datenbankverbindungen erreicht nicht das Limit „max_connections“, und der Benutzer kann trotzdem keine Verbindung herstellen. Es ist zu beachten, dass MySQL unter normalen Umständen auch dann eine Verbindung für den Root-Benutzer reserviert, wenn die Anzahl der Verbindungen erschöpft ist. Dies bedeutet, dass sich der Root-Benutzer bei der Datenbank anmelden kann, um das Problem anzuzeigen.

Die Lösung ist auch sehr einfach. Erhöhen Sie einfach den Grenzwert des Betriebssystembenutzers mysql und fügen Sie den neuen Grenzwert nach der Konfigurationsdatei /etc/security/limits.conf ein.

mysql-soft-nofile 32768
mysql hartes Nofile 65535

Oben habe ich Ihnen die maximale Anzahl geöffneter Dateien für MySQL-Systembenutzer ausführlich erläutert. Ich hoffe, dass sie Ihnen hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Problem mit der Groß-/Kleinschreibung in der MySQL-Datenbank
  • Python verwendet adbapi, um die asynchrone Speicherung einer MySQL-Datenbank zu implementieren
  • Kann die wiederholbare Leseebene von MySQL Phantomlesevorgänge lösen?
  • Kopieren von Feldern zwischen verschiedenen Tabellen in MySQL
  • Referenz zur MySQL-Optimierungslösung
  • Erklärung der MySQL-Indextypen Normal, Unique und Full Text
  • Zusammenfassung zum Sharding von MySQL-Datenbanken und -Tabellen
  • Der Unterschied zwischen gespeicherten Prozeduren und Transaktionen in MySQL-Datenbanken
  • Detaillierte Erläuterung der MySQL Limit-Leistungsoptimierung und der Paging-Daten-Leistungsoptimierung
  • MySQL zeigt die maximale Anzahl von Verbindungen an und ändert die maximale Anzahl von Verbindungen

<<:  Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann

>>:  Tiefgreifendes Verständnis der Vue-cli4-Routing-Konfiguration

Artikel empfehlen

Lizenzschlüssel für VMware Workstation Pro 16 mit Nutzungs-Tutorial

VMware Workstation ist eine leistungsstarke virtu...

Netzwerkmanagement und Netzwerkisolationsimplementierung von Docker-Containern

1. Docker-Netzwerkverwaltung 1. Docker-Container-...

Mehrere Möglichkeiten zum Senden von HTML-Formularen_PowerNode Java Academy

Methode 1: Absenden über den Absenden-Button <...

Natives JS zur Implementierung eines Klickzahlenspiels

Native JS implementiert das Klickzahlenspiel zu I...

Liste der allgemeinen MySql-Abfragebefehlsoperationen

In MySQL häufig verwendete Abfragebefehle: mysql&...

Code zum Anzeigen des Inhalts eines TXT-Buchs auf einer Webseite

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

HTML-Tabellen-Tag-Tutorial (45): Tabellen-Body-Tag

Mit dem Tag <tbody> wird der Stil des Tabel...

MySQL-Join-Abfrage (Left Join, Right Join, Inner Join)

1. Allgemeine Verbindungen für MySQL INNER JOIN (...

JavaScript zum Erzielen eines Fortschrittsbalkeneffekts

In diesem Artikelbeispiel wird der spezifische Ja...

CentOS 8 offiziell veröffentlicht, basierend auf Red Hat Enterprise Linux 8

Das CentOS-Projekt, ein 100 % kompatibler Neuaufb...