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

Informationen zum Ausdruck „wenn Komma enthält“ in JavaScript

Manchmal sehen Sie in der if-Anweisung in JavaScr...

Tutorial zur Installation von Nginx in einer Linux-Umgebung

Inhaltsverzeichnis 1. Installieren Sie die erford...

Dockers Mechanismus zur Integritätserkennung

Für Container ist die einfachste Integritätsprüfu...

Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL

Detailliertes Beispiel zum Beheben der Tablespace...

Detaillierte Erklärung der jQuery-Kettenaufrufe

Inhaltsverzeichnis Kettenanrufe Ein kleiner Koffe...

Implementierung von proxy_pass im Nginx-Reverse-Proxy

Das Format ist einfach: Proxy_Pass-URL; Die URL u...

So verwenden Sie die Lotteriekomponente des WeChat Mini-Programms

Es wird in Form von WeChat-Komponenten bereitgest...

Der grundlegendste Code für Webseiten

◆Zu Favoriten hinzufügen veranschaulichen Klicken...

So legen Sie die Position des Blockelements in der Mitte des Fensters fest

So legen Sie die Position des Blockelements in de...

So kapseln Sie Timerkomponenten in Vue3

Hintergrund Wenn Sie auf manchen Webseiten von Ei...

JavaScript imitiert Xiaomi-Karusselleffekt

Dieser Artikel ist eine selbstgeschriebene Nachah...

Ein Artikel zum Verständnis der Verwendung von Proxys in JavaScript

Inhaltsverzeichnis Was ist ein Agent Grundkenntni...