So zeigen Sie MySQL-Links an und löschen abnormale Links

So zeigen Sie MySQL-Links an und löschen abnormale Links

Vorwort:

Während des Betriebs und der Wartung der Datenbank achten wir häufig auf den Verbindungsstatus der Datenbank, z. B. wie viele Links insgesamt vorhanden sind, wie viele aktive Links vorhanden sind, ob die Ausführung von Links zu lange dauert usw. Verschiedene Datenbankanomalien können sich auch indirekt im Linkstatus widerspiegeln. Insbesondere wenn die Datenbank blockiert ist oder stark feststeckt, sollten wir zunächst prüfen, ob die Datenbank abnormale Links enthält, und diese abnormalen Links löschen. In diesem Artikel wird hauptsächlich erläutert, wie Datenbanklinks angezeigt und abnormale Links gelöscht werden.

1. Datenbanklink anzeigen

Die am häufigsten verwendete Anweisung zum Anzeigen von Datenbanklinks ist „show processlist“, mit der der Status der in der Datenbank vorhandenen Threads angezeigt werden kann. Normale Benutzer können nur vom aktuellen Benutzer initiierte Links anzeigen, während Benutzer mit globalen PROCESS-Berechtigungen die Links aller Benutzer anzeigen können.

Das Infofeld im Ergebnis „Prozessliste anzeigen“ zeigt nur die ersten 100 Zeichen jeder Anweisung an. Wenn Sie weitere Informationen anzeigen müssen, können Sie „Vollständige Prozessliste anzeigen“ verwenden. Ebenso können Sie die Statusinformationen zur Datenbankverbindung anzeigen, indem Sie die Tabelle information_schema.processlist anzeigen.

# Normale Benutzer können nur die vom aktuellen Benutzer initiierten Links sehenmysql> select user();
+--------------------+
| Benutzer() |
+--------------------+
| Testbenutzer@localhost |
+--------------------+
1 Zeile im Satz (0,00 Sek.)

mysql> Berechtigungen anzeigen;
+----------------------------------------------------------------------+
| Zuschüsse für testuser@% |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'Testbenutzer'@'%' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `testdb`.* TO 'testuser'@'%' |
+----------------------------------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)

mysql> Prozessliste anzeigen;
+--------+----------+-----------+--------+---------+------+----------+------------------+
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info |
+--------+----------+-----------+--------+---------+------+----------+------------------+
| 769386 | Testbenutzer | localhost | NULL | Ruhezustand | 201 | | NULL |
| 769390 | Testbenutzer | localhost | testdb | Abfrage | 0 | wird gestartet | Prozessliste anzeigen |
+--------+----------+-----------+--------+---------+------+----------+------------------+
2 Zeilen im Satz (0,00 Sek.)

mysql> wähle * aus information_schema.prozessliste;
+--------+----------+--------------+---------+---------+------+-----------+---------------+----------------------------------------------+
| ID | BENUTZER | HOST | DB | BEFEHL | ZEIT | STATUS | INFO |
+--------+----------+--------------+---------+---------+------+-----------+---------------+----------------------------------------------+
| 769386 | Testbenutzer | localhost | NULL | Ruhezustand | 210 | | NULL |
| 769390 | Testbenutzer | localhost | Testdb | Abfrage | 0 | wird ausgeführt | select * from information_schema.processlist |
+--------+----------+--------------+---------+---------+------+-----------+---------------+----------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)

# Nachdem Sie die PROCESS-Berechtigung erteilt haben, können Sie die Links aller Benutzer sehenmysql> grant process on *.* to 'testuser'@'%';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> Berechtigungen anzeigen;
+----------------------------------------------------------------------+
| Zuschüsse für testuser@% |
+----------------------------------------------------------------------+
| GRANT-PROZESS AUF *.* AN 'Testbenutzer'@'%' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `testdb`.* TO 'testuser'@'%' |
+----------------------------------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)

mysql> Prozessliste anzeigen;
+--------+----------+--------------------+--------+---------+------+----------+------------------+
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info |
+--------+----------+--------------------+--------+---------+------+----------+------------------+
| 769347 | root | localhost | testdb | Ruhezustand | 53 | | NULL |
| 769357 | root | 192.168.85.0:61709 | NULL | Schlaf | 521 ​​​​| | NULL |
| 769386 | Testbenutzer | localhost | NULL | Ruhezustand | 406 | | NULL |
| 769473 | Testbenutzer | localhost | testdb | Abfrage | 0 | wird gestartet | Prozessliste anzeigen |
+--------+----------+--------------------+--------+---------+------+----------+------------------+
4 Zeilen im Satz (0,00 Sek.)

Durch die Ergebnisse der Prozesslistenanzeige können wir die Detailinformationen zu jedem Thread-Link klar verstehen. Die Bedeutung der einzelnen Felder ist relativ einfach zu verstehen. Im Folgenden finden Sie eine detaillierte Erklärung, was jedes Feld darstellt:

  • ID: Dies ist die eindeutige Kennung dieses Links. Sie können diesen Link mit dem Kill-Befehl und diesem ID-Wert löschen.
  • Benutzer: bezieht sich auf den Benutzernamen, der diesen Link initiiert hat.
  • Host: zeichnet die IP- und Portnummer des Clients auf, der die Anforderung sendet, sodass Sie ermitteln können, welcher Prozess des Clients die Anforderung sendet.
  • db: Auf welcher Datenbank der Befehl aktuell ausgeführt wird. Wenn keine Datenbank angegeben ist, ist dieser Wert NULL.
  • Befehl: bezieht sich auf den Befehl, den der Thread-Link gerade ausführt.
  • Zeit: Gibt die Zeit an, zu der sich der Thread-Link im aktuellen Status befindet.
  • Status: Der Status des Threads, entsprechend dem Befehl.
  • Info: zeichnet die spezifischen Anweisungen auf, die vom Thread ausgeführt werden.

Wenn zu viele Datenbanklinks vorhanden sind, wird das Filtern nützlicher Informationen mühsam. Beispielsweise möchten wir nur den Link eines bestimmten Benutzers oder einen bestimmten Status überprüfen. Zu diesem Zeitpunkt finden wir mit „show processlist“ einige Informationen, die wir nicht benötigen. Zu diesem Zeitpunkt wird es viel einfacher, mit „information_schema.processlist“ zu filtern. Im Folgenden sind einige häufige Filteranforderungen aufgeführt:

# Nur die Linkinformationen einer bestimmten ID anzeigen. select * from information_schema.processlist where id = 705207;

# Filtern Sie die Links eines bestimmten Benutzers heraus. select * from information_schema.processlist where user = 'testuser';

# Alle nicht inaktiven Links herausfiltern. Wählen Sie * aus information_schema.processlist aus, wobei command != 'Sleep';

# Filtern Sie Links mit einer Leerlaufzeit von mehr als 600 Sekunden heraus. Wählen Sie * aus information_schema.processlist, wobei command = „Sleep“ und time > 600 ist.

# Links in einem bestimmten Status herausfiltern. Wählen Sie * aus information_schema.processlist, wobei status = „Daten werden gesendet“ ist.

# Filtern Sie die Links einer bestimmten Client-IP, wählen Sie * aus information_schema.processlist, wo Host wie „192.168.85.0%“;

2. Beenden Sie die Datenbankverbindung

Wenn eine Datenbankverbindung nicht normal ist, können wir sie mit der Kill-Anweisung beenden. Die Standardsyntax für Kill lautet: KILL [CONNECTION | QUERY] processlist_id;

KILL erlaubt optionale CONNECTION- oder QUERY-Modifikatoren:

  • KILL CONNECTION ist dasselbe wie KILL ohne Modifikatoren, es beendet die zugehörigen Links des Prozesses.
  • KILL QUERY beendet die aktuell auf einem Link ausgeführte Anweisung, lässt den Link selbst jedoch intakt.

Die Möglichkeit, Links zu löschen, hängt vom SUPER-Privileg ab:

  • Wenn Sie nicht über das SUPER-Privileg verfügen, können Sie nur die vom aktuellen Benutzer initiierten Links beenden.
  • Ein Benutzer mit dem SUPER-Privileg kann alle Links trennen.

Wenn Sie in einen Notfall geraten und Links stapelweise löschen müssen, können Sie die Kill-Anweisung durch Einfügen von SQL erhalten und dann ausführen. Das ist viel bequemer. Hier sind einige SQL-Anweisungen, die zum Löschen von Links verwendet werden können:

# Beenden Sie die Links, die länger als 600 Sekunden inaktiv sind, und verketten Sie sie, um die Kill-Anweisung zu erhalten. Wählen Sie concat('KILL ',id,';') aus information_schema.`processlist`
 wobei Befehl = „Schlaf“ und Zeit > 600;

# Beenden Sie die Links in einem bestimmten Zustand und verketten Sie sie, um die Kill-Anweisung zu erhalten. Wählen Sie concat('KILL ',id,';') aus information_schema.`processlist`
 wobei Status = „Daten werden gesendet“;

Wählen Sie concat('KILL ',id,';') aus information_schema.`processlist`
 wobei Status = „Warten auf Sperre der Tabellenmetadaten“;

# Beenden Sie einen von einem Benutzer initiierten Link und verketten Sie die Kill-Anweisung select concat('KILL ',id,';') from information_schema.`processlist`
  Benutzer = "Testbenutzer";

Hier eine Erinnerung, dass die Kill-Anweisung mit Vorsicht verwendet werden muss! Insbesondere wenn dieser Link eine Aktualisierungsanweisung oder eine Anweisung zur Änderung der Tabellenstruktur ausführt, kann das Beenden des Links einen relativ langen Rollback-Vorgang erfordern.

Zusammenfassen:

In diesem Artikel wird erläutert, wie Sie Datenbanklinks anzeigen und löschen. Wenn Sie in Zukunft den Verdacht haben, dass ein Problem mit der Datenbank vorliegt, können Sie den Status der Datenbankverbindung so schnell wie möglich überprüfen.

Oben finden Sie Einzelheiten zum Anzeigen von MySQL-Links und zum Löschen abnormaler Links. Weitere Informationen zum Anzeigen von MySQL-Links und zum Löschen abnormaler Links finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Der Grund, warum MySQL die Binlog-Datei manuell registriert und Master-Slave-Anomalien verursacht
  • Zusammenfassung der Ausnahmen bei der MySQL-Datenbankverbindung (sammelwürdig)
  • So beheben Sie den abnormalen Start von mysql5.7.21
  • Erfahrungsaustausch zur Reparatur von MySQL InnoDB-Ausnahmen
  • MySQL-Definition und Details zur Ausnahmebehandlung
  • Einige grundlegende Tutorials zur Ausnahmebehandlung in gespeicherten MySQL-Prozeduren
  • Analysieren eines abnormalen MySQL-Abfragefalls
  • Eine kurze Analyse der MySQL-Ausnahmebehandlung
  • Analysieren Sie mehrere gängige Lösungen für MySQL-Ausnahmen

<<:  Implementierung der Leistungsoptimierung des Element-Shuttle-Frames

>>:  Die entsprechenden Attribute und Verwendung von XHTML-Tags in CSS

Artikel empfehlen

Der Unterschied zwischen char und varchar in MySQL

CHAR- und VARCHAR-Typen sind ähnlich und untersch...

Implementierungsprinzip und Skriptcode der HTML-Rabattpreisberechnung

Code kopieren Der Code lautet wie folgt: <!DOC...

So verbergen und entfernen Sie Bildlaufleisten in HTML

1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...

Beispiel für die Wertübertragung in einem HTML-Formular über die Get-Methode

Die google.html-Schnittstelle ist wie in der Abbil...

Detaillierte Anweisungen zur Installation der MySQL5.7-Datenbank unter Centos7.2

Das MySQL auf dem Server ist in der Version 8.0.1...

4 Funktionen, die durch das Transform-Attribut in CSS3 implementiert werden

In CSS3 können mit der Transformationsfunktion vi...

Zusammenfassung der grundlegenden Verwendung des $-Symbols in Linux

Linux-Version: CentOS 7 [root@azfdbdfsdf230lqdg1b...

Vue implementiert eine einfache Slider-Verifizierung

Dieses Artikelbeispiel zeigt die Implementierung ...

MariaDB-Serverinstallation der MySQL-Reihe

Inhaltsverzeichnis Tutorial-Reihe 1. Installieren...

Entwickeln Sie Beispielcode für einen Taschenrechner mit nativem JavaScript

Die Hauptfunktion eines Rechners besteht darin, n...