Beim Bereitstellen des Projekts auf Centos ist mir ein seltsames Problem aufgefallen. Die Datenbankverbindung löste immer wieder Ausnahmen aus. Ich habe also zwei Stunden damit verbracht, nach verschiedenen Ursachen für die Datenbankverbindungsanomalien zu suchen, und schließlich war das Problem gelöst. Fassen Sie gleichzeitig die während des Lösungsprozesses gesammelten abnormalen Informationen zusammen, um Ihnen Ideen zu geben, wenn Sie auf ähnliche Probleme stoßen. Ein Muss. Problemphänomen Lassen Sie mich zunächst über das Problem sprechen, auf das ich gestoßen bin. Die im Projekt aufgetretenen Probleme sind sehr merkwürdig. Die Mysql-Datenbank ist auf Centos installiert und das Projekt verwendet Spring Boot. Das Projekt wird lokal gestartet und stellt normal eine Verbindung zur Serverdatenbank her, der lokale Datenbankclient stellt normal eine Verbindung zur Serverdatenbank her und der lokale Serververbindungsclient stellt normal eine Verbindung zur Datenbank her. Die einzige Ausnahme tritt auf, wenn das Projekt auf dem Server bereitgestellt und gestartet wird. Die Ausnahmeinformationen lauten wie folgt (die Ausnahmeinformationen wurden zu diesem Zeitpunkt nicht gespeichert):
Abnormale Ursache Habe fast alle Lösungen im Internet ausprobiert, aber ohne Erfolg. Allmählich kam mir der Verdacht, dass die Ursache beim JDK lag. Die lokal verwendete JDK-Version ist 1.8.0_151, und der Server verwendet 1.8.0.242. Theoretisch gibt es keine Auswirkungen. Also habe ich das JDK auf dem Server deinstalliert, das Installationspaket von der offiziellen Website heruntergeladen und 1.8.0_241 neu installiert. Das Datenbankverbindungsproblem verschwand. Später dachte ich sorgfältig darüber nach und stellte fest, dass es kein Problem mit der Nebenversionsnummer war, sondern ein Problem mit der installierten JDK-Version. Das auf diesem Computer installierte JDK wurde von der offiziellen Oracle-Website heruntergeladen und der Speicher auf dem Server wurde der Einfachheit halber direkt mit dem Befehl yum installiert. OpenJDK ist standardmäßig auf CentOS installiert. Wir wissen, dass JDK und OpenJDK nach JDK7 zu zwei Versionen mit unterschiedlichen Lizenzvereinbarungen gehören, der OpenJDK-Quellcode unvollständig ist und OpenIDK nur das am stärksten optimierte JDK enthält. Nachfolgend teilen wir weitere Gründe mit, die bei der Suche nach den oben genannten Ausnahmen gefunden wurden und zu ähnlichen Ausnahmen sowie deren Lösungen führen. Sockenpfadproblem Das Problemphänomen ist das gleiche wie oben. Außer dass die auf dem Server bereitgestellte Anwendung keine Verbindung zum Server herstellen kann, können andere Methoden eine Verbindung zur Datenbank herstellen. Die Ursache des Problems ist: Der Server verfügt über zwei Festplatten, und in der Mitte wurde der Befehl mv ausgeführt, um den Speicherinhalt der Datenbank zu verschieben, und gleichzeitig wurde das Datenverzeichnis so geändert, dass es auf das neue Verzeichnis verweist. Ergebnis: Die lokale Verbindung über das JAVA-Programm ist fehlgeschlagen und die Ausnahme „org.apache.commons.dbcp.SQLNestedException: PoolableConnectionFactory kann nicht erstellt werden (Fehler der Kommunikationsverbindung)“ wurde ausgelöst. Lösung: Überprüfen Sie nach der Änderung der entsprechenden Datadir-Konfiguration die Konfiguration des Dateipfads mysql.sock. Standardmäßig befindet es sich in /var/lib/mysql/mysql.sock oder /temp/mysql.sock. Ändern Sie dann alle Terminals ([Client], [mysql], [mysqld] usw.), sodass sie denselben Pfad verwenden. Probleme mit der SSL-Verbindung Wenn in einer Meldung die folgenden ungewöhnlichen Informationen enthalten sind:
Möglicherweise liegt ein Problem mit der SSL-Verbindung vor. Ein Freund im Internet stieß nach dem Upgrade auf jdk1.8 auf die obige Ausnahme. Lösung: Entfernen Sie SSLv3. Suchen Sie in der Datei JAVA_HOME/jre/lib/security/java.security die Konfiguration zu jdk.tls.disabledAlgorithns=SSLv3,... und löschen Sie den SSLv3-Teil. Durch das Löschen von SSLv3 werden SSL-Anrufe ermöglicht. In Bezug auf das SSL-Verbindungsproblem gibt es eine andere Situation, in der Mysql eine SSL-Verbindung verwendet. Informationen zur Konfiguration finden Sie in diesem Artikel: https://www.jb51.net/article/100432.htm. Timeout der Datenbankverbindung Diese Situation ist eine gängige Information im Internet, und es gibt eine große Anzahl von Artikeln, aber sie erklären oft nicht das spezifische Szenario: Eine Ausnahme ähnlich der oben genannten tritt während der Verwendung der Anwendung auf. Beachten Sie, dass dies während der Verwendung geschieht, nicht während des Starts. Der Grund für die Ausnahme während der Verwendung liegt darin, dass das Standard-„wait_timeout“ des MySQL-Servers 8 Stunden (28800 Sekunden) beträgt. Das heißt, wenn eine Verbindung länger als 8 Stunden im Leerlauf (inaktiv) ist, trennt MySQL die Verbindung automatisch. Der Verbindungspool geht jedoch davon aus, dass die Verbindung noch gültig ist (da die Gültigkeit der Verbindung nicht überprüft wurde). Wenn die Anwendung die Verwendung der Verbindung beantragt, tritt der obige Fehler auf. Lösung: Ändern Sie die my.ini-Konfiguration, erhöhen Sie die Timeout-Zeit oder fügen Sie der Verbindungs-URL „&autoReconnect=true“ hinzu. Fügen Sie die folgende Konfiguration unter Port=3306 hinzu:
Starten Sie dann MySQL neu. Diese Situation kann auch durch die maxIdleTime-Konfiguration des Datenbankverbindungspools verursacht werden. <!-- Maximale Leerlaufzeit. Wenn sie nicht innerhalb von 60 Sekunden verwendet wird, wird die Verbindung verworfen. Wenn der Wert 0 ist, wird er nie verworfen. Standardmäßig: 0 --> <Eigenschaftsname="maxIdleTime" Wert="0"></Eigenschaft> Da die MySQL-Verbindung geschlossen wird, wenn sie länger als 8 Stunden inaktiv ist, der Verbindungspool die Verbindung jedoch niemals verwirft und die Verbindung als gültig betrachtet (da die Gültigkeit der Verbindung nicht überprüft wird), tritt der obige Fehler auf, wenn die Anwendung die Verwendung der Verbindung beantragt. Lösung: Setzen Sie den Wert auf 20. Andere Ursachen Natürlich gibt es noch viele weitere Gründe für ähnliche Ausnahmen bei MySQL-Verbindungen:
Oben finden Sie eine detaillierte Zusammenfassung der Ausnahmen bei MySQL-Datenbankverbindungen. Weitere Informationen zu Ausnahmen bei MySQL-Datenbankverbindungen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Tutorial zur Installation von MySQL8 auf Centos7
>>: JavaScript zum Erzielen eines einfachen Drag-Effekts
Inhaltsverzeichnis 1. Kurze Einführung 2. Screens...
1. Paradigma Der englische Name des Paradigmas la...
Inhaltsverzeichnis Ereignisse in js Ereignistyp H...
1. Problembeschreibung Heute muss ich die Systemp...
In diesem Artikel wird die Installations- und Kon...
Inhaltsverzeichnis Überblick 1. Funktion Entprell...
Bei der Installation in MySQL 8.0.16 können einig...
1. Concat-Funktion. Häufig verwendete Verbindungs...
Inhaltsverzeichnis Über die MariaDB-Datenbank unt...
Inhaltsverzeichnis 1. Warum Slots verwenden? 1.1 ...
Inhaltsverzeichnis 1. existiert 1.1 Beschreibung ...
Inhaltsverzeichnis Einfache Fabrik Fabrikmethode ...
Wie unten dargestellt: def test_write(selbst): Fe...
Der Code sieht folgendermaßen aus: <!DOCTYPE h...
Als ich kürzlich Webseiten mit PHP schrieb, habe i...