Website-Suche

Nützliche Tipps zur Behebung häufiger Fehler in MySQL


MySQL ist ein weit verbreitetes relationales Open-Source-Datenbankverwaltungssystem (RDMS) von Oracle. Es war im Laufe der Jahre die Standardwahl für webbasierte Anwendungen und erfreut sich im Vergleich zu anderen Datenbank-Engines immer noch großer Beliebtheit.

Lesen Sie auch: So installieren Sie das neueste MySQL auf RHEL/CentOS und Fedora

MySQL wurde für Webanwendungen entwickelt und optimiert – es ist ein integraler Bestandteil wichtiger webbasierter Anwendungen wie Facebook, Twitter, Wikipedia, YouTube und viele andere.

Wird Ihre Website oder Webanwendung von MySQL betrieben? In diesem ausführlichen Artikel erklären wir, wie Sie Probleme und häufige Fehler im MySQL-Datenbankserver beheben können. Wir beschreiben, wie Sie die Ursachen der Probleme ermitteln und was Sie tun können, um sie zu beheben.

1. Es kann keine Verbindung zum lokalen MySQL-Server hergestellt werden

Einer der häufigsten Client-zu-Server-Verbindungsfehler in MySQL ist „FEHLER 2002 (HY000): Es kann keine Verbindung zum lokalen MySQL-Server über Socket '/var/run/mysqld/mysqld.sock' (2) hergestellt werden > ”.

Dieser Fehler weist darauf hin, dass auf dem Hostsystem kein MySQL-Server (mysqld) läuft oder dass Sie einen falschen Unix-Socket-Dateinamen oder TCP/IP< angegeben haben-Port, wenn Sie versuchen, eine Verbindung zum Server herzustellen.

Stellen Sie sicher, dass der Server ausgeführt wird, indem Sie einen Prozess mit dem Namen mysqld auf Ihrem Datenbankserverhost überprüfen, indem Sie die Befehle ps und grep zusammen verwenden, wie gezeigt.

ps xa | grep mysqld | grep -v mysqld

Wenn die obigen Befehle keine Ausgabe zeigen, läuft der Datenbankserver nicht. Daher kann der Client keine Verbindung herstellen. Um den Server zu starten, führen Sie den folgenden systemctl-Befehl aus.

sudo systemctl start mysql        #Debian/Ubuntu
sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Um den MySQL-Dienststatus zu überprüfen, verwenden Sie den folgenden Befehl.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Aus der Ausgabe des obigen Befehls geht hervor, dass der MySQL-Dienst fehlgeschlagen ist. In einem solchen Fall können Sie versuchen, es neu zu starten und seinen Status noch einmal zu überprüfen.

sudo systemctl restart mysql
sudo systemctl status mysql

Wenn der Server außerdem so läuft, wie der folgende Befehl zeigt, Sie aber immer noch den obigen Fehler sehen, sollten Sie außerdem überprüfen, ob der TCP/IP-Port durch eine Firewall oder einen Portblockierungsdienst blockiert ist .

ps xa | grep mysqld | grep -v mysqld

Um den Port zu finden, den der Server überwacht, verwenden Sie den Befehl netstat wie gezeigt.

sudo netstat -tlpn | grep "mysql"

2. Es kann keine Verbindung zum MySQL-Server hergestellt werden

Ein weiterer häufig auftretender Verbindungsfehler ist „(2003) Can't connect to MySQL server on ‚server‘ (10061)“, was bedeutet, dass die Netzwerkverbindung abgelehnt wurde.

Überprüfen Sie hier zunächst, ob auf dem System ein MySQL-Server läuft, wie oben gezeigt. Stellen Sie außerdem sicher, dass auf dem Server Netzwerkverbindungen aktiviert sind und dass der Netzwerkport, den Sie für die Verbindung verwenden, der auf dem Server konfigurierte ist.

Andere häufige Fehler, die beim Versuch, eine Verbindung zum MySQL-Server herzustellen, wahrscheinlich auftreten, sind:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Diese Fehler weisen darauf hin, dass der Server möglicherweise läuft, Sie jedoch versuchen, eine Verbindung über einen anderen TCP/IP-Port, eine andere Named Pipe oder eine andere Unix-Socket-Datei herzustellen als der, den der Server überwacht.

3. Fehler „Zugriff verweigert“ in MySQL

In MySQL wird ein Benutzerkonto anhand eines Benutzernamens und des oder der Client-Hosts definiert, von denen aus der Benutzer eine Verbindung zum Server herstellen kann. Darüber hinaus kann ein Konto auch über Authentifizierungsdaten wie etwa ein Passwort verfügen.

Obwohl es viele verschiedene Ursachen für den Fehler „Zugriff verweigert“ gibt, hängt eine der häufigsten Ursachen mit den MySQL-Konten zusammen, die der Server Client-Programmen beim Herstellen einer Verbindung erlaubt. Dies weist darauf hin, dass der in der Verbindung angegebene Benutzername nicht über die Berechtigung zum Zugriff auf die Datenbank verfügt.

MySQL ermöglicht die Erstellung von Konten, die es Client-Benutzern ermöglichen, eine Verbindung zum Server herzustellen und auf die vom Server verwalteten Daten zuzugreifen. Wenn Sie in diesem Zusammenhang auf den Fehler „Zugriff verweigert“ stoßen, überprüfen Sie, ob das Benutzerkonto über das von Ihnen verwendete Clientprogramm und möglicherweise den Host, von dem die Verbindung stammt, eine Verbindung zum Server herstellen darf .

Sie können sehen, welche Privilegien ein bestimmtes Konto hat, indem Sie den Befehl SHOW GRANTS wie gezeigt ausführen.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Mit den folgenden Befehlen in der MySQL-Shell können Sie einem bestimmten Benutzer Berechtigungen für eine bestimmte Datenbank für die Remote-IP-Adresse erteilen.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Darüber hinaus können Zugriffsverweigerungsfehler auch auf Probleme bei der Verbindung zu MySQL zurückzuführen sein, siehe die zuvor erläuterten Fehler.

4. Verbindung zum MySQL-Server verloren

Dieser Fehler kann aus einem der folgenden Gründe auftreten: schlechte Netzwerkkonnektivität, Verbindungszeitüberschreitung oder ein Problem mit BLOB-Werten, die größer als sind max_allowed_packet. Stellen Sie im Falle eines Netzwerkverbindungsproblems sicher, dass Sie über eine gute Netzwerkverbindung verfügen, insbesondere wenn Sie auf einen Remote-Datenbankserver zugreifen.

Wenn es sich um ein Problem mit dem Verbindungszeitlimit handelt, insbesondere wenn MySQL versucht, eine erste Verbindung zum Server herzustellen, erhöhen Sie den Wert des Parameters connect_timeout . Bei BLOB-Werten, die größer als max_allowed_packet sind, müssen Sie in Ihrem /etc. einen höheren Wert für max_allowed_packet festlegen /my.cnf-Konfigurationsdatei im Abschnitt [mysqld] oder [client], wie gezeigt.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Wenn die MySQL-Konfigurationsdatei für Sie nicht zugänglich ist, können Sie diesen Wert mit dem folgenden Befehl in der MySQL-Shell festlegen.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Zu viele MySQL-Verbindungen

Falls bei einem MySQL-Client der Fehler „zu viele Verbindungen“ auftritt, bedeutet dies, dass alle verfügbaren Verbindungen von anderen Clients verwendet werden. Die Anzahl der Verbindungen (Standard ist 151) wird durch die Systemvariable max_connections gesteuert; Sie können das Problem beheben, indem Sie den Wert erhöhen, um mehr Verbindungen in Ihrer /etc/my.cnf-Konfigurationsdatei zuzulassen.

[mysqld]
max_connections=1000

6. Nicht genügend Speicher MySQL

Falls Sie eine Abfrage mit dem MySQL-Clientprogramm ausführen und auf den betreffenden Fehler stoßen, bedeutet dies, dass MySQL nicht über genügend Speicher verfügt, um das gesamte Abfrageergebnis zu speichern.

Der erste Schritt besteht darin, sicherzustellen, dass die Abfrage korrekt ist. Wenn dies der Fall ist, gehen Sie wie folgt vor:

  • Wenn Sie den MySQL-Client direkt verwenden, starten Sie ihn mit --quick switch, um zwischengespeicherte Ergebnisse zu deaktivieren oder
  • Wenn Sie den MyODBC-Treiber verwenden, verfügt die Konfigurationsbenutzeroberfläche (UI) über eine erweiterte Registerkarte für Flags. Aktivieren Sie „Ergebnis nicht zwischenspeichern“.

Ein weiteres großartiges Tool ist MySQL Tuner – ein nützliches Skript, das eine Verbindung zu einem laufenden MySQL-Server herstellt und Vorschläge für die Konfiguration für eine höhere Leistung macht.

sudo apt-get install mysqltuner     #Debian/Ubuntu
sudo yum install mysqltuner         #RHEL/CentOS/Fedora
mysqltuner

Tipps zur MySQL-Optimierung und Leistungsoptimierung finden Sie in unserem Artikel: 15 nützliche Tipps zur Leistungsoptimierung und -optimierung für MySQL/MariaDB.

7. MySQL stürzt ständig ab

Wenn Sie auf dieses Problem stoßen, sollten Sie versuchen herauszufinden, ob das Problem darin liegt, dass der MySQL-Server ausfällt, oder ob es sich um den Client handelt, bei dem das Problem auftritt. Beachten Sie, dass viele Serverabstürze durch beschädigte Datendateien oder Indexdateien verursacht werden.

Sie können den Serverstatus überprüfen, um festzustellen, wie lange er bereits aktiv ist.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Alternativ können Sie den folgenden mysqladmin-Befehl ausführen, um die Betriebszeit des MySQL-Servers zu ermitteln.

sudo mysqladmin version -p 

Andere Lösungen umfassen unter anderem das Stoppen des MySQL-Servers, das Aktivieren des Debuggens und das anschließende Starten des Dienstes erneut. Sie können versuchen, einen Testfall zu erstellen, mit dem sich das Problem wiederholen lässt. Öffnen Sie außerdem ein zusätzliches Terminalfenster und führen Sie den folgenden Befehl aus, um MySQL-Prozessstatistiken anzuzeigen, während Sie Ihre anderen Abfragen ausführen:

sudo mysqladmin -i 5 status
OR
sudo mysqladmin -i 5 -r status 

Das Fazit: Ermitteln, was ein Problem oder einen Fehler verursacht

Obwohl wir uns einige häufig auftretende MySQL-Probleme und -Fehler angesehen und auch Möglichkeiten zu deren Behebung und Lösung aufgezeigt haben, ist das Wichtigste bei der Diagnose eines Fehlers, zu verstehen, was er bedeutet (in Bezug auf die Ursache). .

Wie können Sie das also feststellen? Die folgenden Punkte helfen Ihnen dabei, herauszufinden, was genau ein Problem verursacht:

  1. Der erste und wichtigste Schritt besteht darin, sich die MySQL-Protokolle anzusehen, die im Verzeichnis /var/log/mysql/ gespeichert sind. Sie können Befehlszeilen-Dienstprogramme wie tail verwenden, um die Protokolldateien zu lesen.
  2. Wenn der MySQL-Dienst nicht gestartet werden kann, überprüfen Sie seinen Status mit systemctl oder verwenden Sie den Befehl journetctl (mit dem Flag -xe) unter systemd, um das Problem zu untersuchen.
  3. Sie können auch Systemprotokolldateien wie /var/log/messages oder ähnliches auf Gründe für Ihr Problem untersuchen.
  4. Versuchen Sie, Tools wie Mytop, Glances, Top, PS oder HTOP zu verwenden, um zu überprüfen, welches Programm die gesamte CPU beansprucht oder den Computer blockiert, oder um zu überprüfen, ob Ihnen der Arbeitsspeicher, der Festplattenspeicher, die Dateideskriptoren oder eine andere wichtige Ressource ausgeht .
  5. Angenommen, dass es sich bei dem Problem um einen außer Kontrolle geratenen Prozess handelt, können Sie jederzeit versuchen, ihn zu beenden (mit dem Dienstprogramm pkill oder kill), damit MySQL normal funktioniert.
  6. Angenommen, dass der mysqld-Server Probleme verursacht, können Sie den Befehl mysqladmin -u root ping oder mysqladmin -u rootprocesslist ausführen, um welche zu erhalten Antwort daraus.
  7. Wenn das Problem bei Ihrem Client-Programm liegt, während Sie versuchen, eine Verbindung zum MySQL-Server herzustellen, überprüfen Sie, warum es nicht ordnungsgemäß funktioniert, und versuchen Sie, zur Fehlerbehebung eine Ausgabe davon zu erhalten.

Vielleicht möchten Sie auch die folgenden MySQL-bezogenen Artikel lesen:

  1. Lernen Sie MySQL/MariaDB für Anfänger – Teil 1
  2. So überwachen Sie MySQL/MariaDB-Datenbanken mit Netdata unter CentOS 7
  3. So übertragen Sie alle MySQL-Datenbanken vom alten auf den neuen Server
  4. Mytop – Ein nützliches Tool zur Überwachung der MySQL/MariaDB-Leistung unter Linux
  5. 12 MySQL/MariaDB-Sicherheits-Best Practices für Linux

Weitere Informationen finden Sie im MySQL-Referenzhandbuch zu Problemen und häufigen Fehlern. Es listet umfassend häufige Probleme und Fehlermeldungen auf, die bei der Verwendung von MySQL auftreten können, einschließlich der oben besprochenen und weiterer.