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:
|
<<: Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann
>>: Tiefgreifendes Verständnis der Vue-cli4-Routing-Konfiguration
Inhaltsverzeichnis Kartenstaat Kartengetter Karte...
VMware Workstation ist eine leistungsstarke virtu...
nginx Nginx (Engine x) ist ein leistungsstarker H...
Grundlegende Konzepte Absolute Positionierung: Ei...
1. Docker-Netzwerkverwaltung 1. Docker-Container-...
Methode 1: Absenden über den Absenden-Button <...
Native JS implementiert das Klickzahlenspiel zu I...
In MySQL häufig verwendete Abfragebefehle: mysql&...
Ich habe vor Kurzem jemandem bei einem Projekt ge...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
Mit dem Tag <tbody> wird der Stil des Tabel...
1. Allgemeine Verbindungen für MySQL INNER JOIN (...
In diesem Artikelbeispiel wird der spezifische Ja...
Als ich heute mit der Baidu-Seite übte, stellte i...
Das CentOS-Projekt, ein 100 % kompatibler Neuaufb...