Mysql
 sql >> Datenbank >  >> RDS >> Mysql

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

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

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

Wird Ihre Website oder Webanwendung von MySQL unterstützt? ? In diesem ausführlichen Artikel erklären wir, wie Sie Probleme und häufige Fehler in MySQL beheben Datenbankserver. Wir beschreiben, wie die Ursachen der Probleme ermittelt werden und was zu tun ist, um sie zu lösen.

1. Verbindung zum lokalen MySQL-Server nicht möglich

Einer der häufigsten Client-zu-Server-Verbindungsfehler in MySQL ist „ERROR 2002 (HY000):Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) “.

Dieser Fehler weist darauf hin, dass MySQL nicht vorhanden ist server (mysqld) auf dem Hostsystem läuft oder dass Sie einen falschen Unix-Socket-Dateinamen oder TCP/IP angegeben haben port, wenn Sie versuchen, sich mit dem Server zu verbinden.

Stellen Sie sicher, dass der Server läuft, indem Sie einen Prozess namens mysqld überprüfen auf Ihrem Datenbankserver-Host, indem Sie den Befehl ps und den Befehl grep zusammen wie gezeigt verwenden.

$ 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

Zur Überprüfung von MySQL Dienststatus verwenden Sie den folgenden Befehl.

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

Aus der Ausgabe des obigen Befehls wird die Datei MySQL Dienst ist ausgefallen. 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 wie im folgenden Befehl ausgeführt ausgeführt wird, der obige Fehler jedoch weiterhin angezeigt wird, sollten Sie außerdem überprüfen, ob die TCP/IP Der Port wird von einer Firewall oder einem Portblockerdienst blockiert.

$ ps xa | grep mysqld | grep -v mysqld

Um den Port zu finden, auf dem der Server lauscht, verwenden Sie den netstat-Befehl wie gezeigt.

$ sudo netstat -tlpn | grep "mysql"

2. Verbindung zum MySQL-Server nicht möglich

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 ein MySQL vorhanden ist Server, der wie oben gezeigt auf dem System läuft. 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, auf die Sie wahrscheinlich stoßen werden, wenn Sie versuchen, eine Verbindung zum MySQL-Server herzustellen, 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 ausgeführt wird, Sie jedoch versuchen, eine Verbindung über TCP/IP herzustellen Port, Named Pipe oder Unix-Socket-Datei, die sich von derjenigen unterscheidet, die der Server überwacht.

3. Zugriffsverweigerungsfehler in MySQL

In MySQL , wird ein Benutzerkonto durch einen Benutzernamen definiert und der Client-Host oder die Client-Hosts, von denen aus sich der Benutzer mit dem Server verbinden kann. Darüber hinaus kann ein Konto auch Authentifizierungsdaten wie ein Passwort haben.

Obwohl es viele verschiedene Ursachen für „Zugriff verweigert gibt ”-Fehler, bezieht sich eine der häufigsten Ursachen auf die MySQL-Konten, die der Server Client-Programmen beim Herstellen einer Verbindung zulässt. Es zeigt diesen Benutzernamen an Die in der Verbindung angegebene Person hat keine Zugriffsrechte auf die Datenbank.

MySQL ermöglicht die Erstellung von Konten, die es Client-Benutzern ermöglichen, sich mit dem Server zu verbinden und auf vom Server verwaltete Daten zuzugreifen. In diesem Zusammenhang, wenn Sie auf einen Fehler Zugriff verweigert stoßen , überprüfen Sie, ob das Benutzerkonto über das von Ihnen verwendete Client-Programm eine Verbindung zum Server herstellen darf, und möglicherweise den Host, von dem die Verbindung kommt.

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

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

Mit den folgenden Befehlen in der MySQL-Shell können Sie einem bestimmten Benutzer in einer bestimmten Datenbank Privilegien für die entfernte IP-Adresse erteilen.

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

Außerdem Fehler beim Zugriff verweigert kann auch aus Problemen mit der Verbindung zu MySQL resultieren, siehe die zuvor erläuterten Fehler.

4. Verbindung zum MySQL-Server unterbrochen

Dieser Fehler kann aus einem der folgenden Gründe auftreten:schlechte Netzwerkverbindung , Verbindungszeitüberschreitung oder ein Problem mit BLOB Werte, die größer als max_allowed_packet sind . Stellen Sie im Falle eines Netzwerkverbindungsproblems sicher, dass Sie eine gute Netzwerkverbindung haben, insbesondere wenn Sie auf einen entfernten Datenbankserver zugreifen.

Wenn es sich um eine Verbindungszeitüberschreitung handelt Problem, insbesondere bei MySQL versucht, eine anfängliche Verbindung zum Server herzustellen, erhöhen Sie den Wert von connect_timeout Parameter. Aber im Fall von BLOB-Werten die größer als max_allowed_packet sind müssen Sie einen höheren Wert für max_allowed_packet festlegen in Ihrer /etc/my.cnf Konfigurationsdatei unter [mysqld] oder [client] Abschnitt wie abgebildet.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

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

5. Zu viele MySQL-Verbindungen

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

[mysqld]
max_connections=1000

6. Nicht genügend Arbeitsspeicher MySQL

Falls Sie eine Abfrage mit MySQL ausführen Client-Programm 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 MyODBC verwenden Treiber 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 sich mit einem laufenden MySQL-Server verbindet und Vorschläge macht, wie er für eine höhere Leistung konfiguriert werden kann.

$ 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 von MySQL/MariaDB.

7. MySQL stürzt ständig ab

Wenn Sie auf dieses Problem stoßen, sollten Sie versuchen herauszufinden, ob das Problem darin besteht, dass die MySQL Server stirbt oder ob es der Client mit einem Problem ist. 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 läuft und läuft.

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

Führen Sie alternativ den folgenden mysqladmin-Befehl aus, um die Betriebszeit des MySQL-Servers zu ermitteln.

$ sudo mysqladmin version -p 

Andere Lösungen beinhalten, sind aber nicht beschränkt auf das Stoppen von MySQL server und Debugging aktivieren, dann starten Sie den Dienst erneut. Sie können versuchen, einen Testfall zu erstellen, mit dem das Problem wiederholt werden kann. Ö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:Feststellen, was ein Problem oder einen Fehler verursacht

Obwohl wir uns einige gängige MySQL angesehen haben Probleme und Fehler bereitstellt und auch Möglichkeiten zur Fehlersuche und -lösung bereitstellt, ist das Wichtigste bei der Diagnose eines Fehlers, zu verstehen, was er bedeutet (im Hinblick darauf, was ihn verursacht).

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

  1. Der erste und wichtigste Schritt ist, in die MySQL-Protokolle zu schauen, die im Verzeichnis /var/log/mysql/ gespeichert sind . Sie können Befehlszeilenprogramme 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 journetctl (mit dem -xe flag) Befehl unter systemd, um das Problem zu untersuchen.
  3. Sie können auch Systemprotokolldateien wie /var/log/messages untersuchen o.ä. Gründe für Ihr Problem.
  4. Verwenden Sie Tools wie Mytop, Glows, Top, PS oder HTop, um zu überprüfen, welches Programm die gesamte CPU beansprucht oder den Computer sperrt, oder um zu überprüfen, ob Ihnen der Arbeitsspeicher, der Speicherplatz, die Dateideskriptoren usw. ausgehen andere wichtige Ressource.
  5. Angenommen, das Problem ist ein außer Kontrolle geratener Prozess, können Sie immer versuchen, ihn zu beenden (mit dem Dienstprogramm pkill oder kill), damit MySQL normal funktioniert.
  6. Angenommen, die mysqld Server Probleme verursacht, können Sie den folgenden Befehl ausführen:mysqladmin -u root ping oder mysqladmin -u root processlist um darauf eine Antwort zu erhalten.
  7. Wenn das Problem bei Ihrem Client-Programm liegt, während Sie versuchen, sich mit dem MySQL-Server zu verbinden, überprüfen Sie, warum es nicht einwandfrei funktioniert, und versuchen Sie, zur Fehlerbehebung eine Ausgabe davon zu erhalten.

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

  1. MySQL / MariaDB für Anfänger lernen – Teil 1
  2. Wie man MySQL/MariaDB-Datenbanken mit Netdata auf CentOS 7 überwacht
  3. So übertragen Sie alle MySQL-Datenbanken vom alten auf den neuen Server
  4. Mytop – Ein nützliches Tool zur Überwachung der Leistung von MySQL/MariaDB unter Linux
  5. 12 Best Practices für MySQL/MariaDB-Sicherheit 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, auf die Sie bei der Verwendung von MySQL stoßen können, einschließlich der oben besprochenen und mehr.