Verwendung des MySQL Query Rewrite-Plugins

Verwendung des MySQL Query Rewrite-Plugins

Plugin zum Umschreiben von Abfragen

Ab MySQL 5.7.6 unterstützt MySQL Server Plug-Ins zum Umschreiben von Abfragen, die vom Server empfangene Anweisungen prüfen und ggf. ändern können, bevor der Server sie ausführt.

Nachfolgend finden Sie die offizielle Dokumenteinführung:

Das Pre-Parse-Rewrite-Plugin verfügt über die folgenden Funktionen:

1. Dieses Plugin ermöglicht das Umschreiben von SQL-Anweisungen, die beim Server ankommen, bevor sie vom Server verarbeitet werden.

2. Das Plugin empfängt eine Anweisungszeichenfolge und gibt möglicherweise eine andere Zeichenfolge zurück.

Ein Plugin zum Umschreiben von Post-Parsing-Abfragen weist die folgenden Merkmale auf:

1. Das Plugin unterstützt das Umschreiben von Anweisungen basierend auf einem Analysebaum.

2. Der Server analysiert jede Anweisung und übergibt ihren Analysebaum an das Plug-In, das den Baum durchlaufen kann. Das Plug-In kann den ursprünglichen Baum zur weiteren Verarbeitung an den Server zurückgeben oder einen anderen Baum erstellen und diesen zurückgeben.

Im Allgemeinen unterstützt das Plug-In zwei Umschreibmethoden: Eine besteht darin, die SQL-Zeichenfolge vor der Syntaxanalyse direkt zu ändern, und die andere besteht darin, sie nach der Syntaxanalyse durch Manipulation des Syntaxanalysebaums umzuschreiben. Diese Funktion ist sehr nützlich. Wenn beispielsweise eine SQL-Anweisung falsch hochgeladen wurde, aber die gesamte Datenbank nicht abgefragt werden kann, weil der Index nicht gefunden werden kann, oder wenn Sie eine von einem Drittanbieter kompilierte Software verwenden, die SQL-Anweisung jedoch möglicherweise falsch ausgeführt wird und Sie die Anwendung nicht direkt ändern können. Diese Funktion ist sehr nützlich und Sie können auch Plug-Ins schreiben, die den Benutzeranforderungen entsprechen.

Installieren oder Deinstallieren

Der einfachste Installationsvorgang ist wie folgt:

shell> mysql -u root -p < install_rewriter.sql Passwort eingeben: (hier das Root-Passwort eingeben) 

Es ist zu erkennen, dass der Datenbank eine neue Bibliothek query_rewrite hinzugefügt wurde. Überprüfen Sie die Datenbank:

Überprüfen Sie, ob das Plugin aktuell installiert ist:

Praktische Bedienung

Beispielsweise erzwingt die folgende Anweisung die Verwendung einer Primärschlüsselabfrage:

SELECT DBA_no, Name aus DBA_inf, wobei DBA_no = ?

Schreiben Sie es wie folgt um:

SELECT DBA_no, Name aus DBA_inf, erzwinge Index (primär), wobei DBA_no =?

Um Regeln für das Rewriter-Plugin hinzuzufügen, sind zwei Schritte erforderlich:

1. Fügen Sie der Tabelle „rewrite_rules“ entsprechende Regeln hinzu.

2. Rufen Sie die gespeicherte Prozedur flush_rewrite_rules() auf, um die Regeln in der Tabelle in das Plug-In zu laden.

Das folgende Beispiel erstellt eine einfache Regel zum Abgleichen von Anweisungen, die einen einzelnen Literalwert auswählen, und führt die folgenden Aktionen aus:

in query_rewrite.rewrite_rules(pattern, replacement, pattern_database) Werte einfügen („SELECT DBA_no, name from DBA_inf where DBA_no = ?“, „SELECT DBA_no, name from DBA_inf force index(primary) where DBA_no = ?“, „DBAs“);

Abfrage der soeben eingefügten Regeln:

Der Inhalt jeder Spalte der Ausgaberegel ist wie folgt:

Ausweis:

Regel-ID. Diese Spalte ist der Primärschlüssel der Tabelle. Mit dieser ID kann jede Regel eindeutig identifiziert werden.

Muster:

Eine Vorlage, die das Anweisungsmuster angibt, mit dem die Regel übereinstimmt, wobei ? den übereinstimmenden Datenwert angibt.

Musterdatenbank:

Die Datenbank wird verwendet, um nicht qualifizierte Tabellennamen in Anweisungen abzugleichen. Ein qualifizierter Tabellenname in einer Anweisung stimmt mit einem qualifizierten Namen im Schema überein, wenn die entsprechenden Datenbank- und Tabellennamen identisch sind. Ein nicht qualifizierter Tabellenname in einer Anweisung stimmt nur dann mit einem nicht qualifizierten Namen im Schema überein, wenn die Standarddatenbank „pattern_database“ mit dem Tabellennamen und dem Anweisungsnamen identisch ist.

Ersatz:

Eine Vorlage, die angibt, wie Anweisungen umgeschrieben werden, die dem Musterspaltenwert entsprechen. Verwenden Sie ?, um den übereinstimmenden Datenwert anzugeben. Es handelt sich um einen Parametermarker und kann in der eigentlichen Anweisung ersetzt werden.

ermöglicht:

Ob die Regel aktiviert ist. Ein Ladevorgang (ausgeführt durch Aufrufen der gespeicherten Prozedur flush_rewrite_rules()) bewirkt, dass Rewriter die Regeln nur dann aus der Tabelle in den In-Memory-Cache lädt, wenn diese Spalte mit YES geladen wird. Diese Spalte ermöglicht es, Regeln zu deaktivieren, ohne sie zu löschen: Setzen Sie die Spalte in der Tabelle auf einen anderen Wert als JA und laden Sie die Tabelle anschließend erneut in das Plugin.

Nachricht:

Das Plugin verwendet diese Spalte, um mit dem Benutzer zu kommunizieren. Wenn beim Laden der Regeltabelle in den Speicher keine Fehler auftreten, setzt das Plugin die Nachrichtenspalte auf NULL. Ein Wert ungleich NULL weist auf einen Fehler hin und der Spalteninhalt stellt die Fehlermeldung dar. In folgenden Fällen können Fehler auftreten: 1. Das Muster oder die Ersetzung ist eine falsche SQL-Anweisung, die einen Syntaxfehler erzeugt. 2. Die Ersetzung enthält mehr Parametermarkierungen als das Muster. Wenn ein Ladefehler auftritt, setzt das Plugin außerdem die Statusvariable Rewriter_reload_error auf ON .

Musterverdauung:

Diese Spalte wird zum Debuggen und zur Diagnose verwendet. Wenn die Spalte beim Laden der Regeltabelle in den Speicher vorhanden ist, aktualisiert das Plug-In sie mit der Schemazusammenfassung. Mithilfe dieser Spalte können Sie ermitteln, warum bestimmte Anweisungen nicht umgeschrieben werden konnten.

normalisiertes_muster

Diese Spalte wird zum Debuggen und zur Diagnose verwendet. Wenn die Spalte beim Laden der Regeltabelle in den Speicher vorhanden ist, aktualisiert das Plug-In sie mit der normalisierten Form des Schemas. Diese Spalte kann hilfreich sein, wenn Sie ermitteln möchten, warum bestimmte Anweisungen nicht umgeschrieben werden konnten.

Plugin-Prozess zum Umschreiben von Rewriter-Abfragen

Das Hinzufügen einer Regel zur Tabelle „rewrite_rules“ reicht nicht aus, damit das Rewriter-Plugin diese Regel verwenden kann. Um den Tabelleninhalt in den Plugin-Speichercache zu laden, muss außerdem flush_rewrite_rules() aufgerufen werden:

Der Rewriter-Plugin-Vorgang verwendet eine gespeicherte Prozedur, um die Regeltabelle in seinen Speichercache zu laden. Im Normalbetrieb ruft der Benutzer einfach flush_rewrite_rules() auf, um den Inhalt der rewrite_rules-Tabelle in den Rewriter-Speichercache zu laden. Nach dem Laden der Tabelle wird auch der Abfragecache geleert.

Wenn die Regeltabelle geändert wird, muss diese Prozedur erneut aufgerufen werden, damit das Plugin seinen Cache mit dem neuen Tabelleninhalt aktualisiert:

Verwenden Sie das im Rewrite-Plugin definierte Anweisungsmuster, um die entsprechenden Datensätze abzufragen:

SELECT DBA_no, Name aus DBA_inf, wobei DBA_no = 8; 

Durch die Verwendung der EXPLAIN-Anweisung hat das aktuelle SQL den Index verwendet

Informationen zum Neuschreiben des Plug-In-Vorgangs

Das Rewriter-Plugin stellt über mehrere Statusvariablen Informationen über seinen Betrieb bereit:

Hinweise zu diesen Variablen:

  • Rewriter_number_loaded_rules: Die Anzahl der Umschreiberegeln des Rewriter-Plugins, die erfolgreich aus der Tabelle „rewrite_rules“ in den Speicher geladen wurden, um vom Rewriter-Plugin verwendet zu werden.
  • Rewriter_number_reloads: Die Häufigkeit, mit der Rewrite_rules in den Cache des Rewriter-Plugins geladen werden.
  • Rewriter_number_rewritten_queries: Die Anzahl der Abfragen, die vom Abfrage-Umschreibungs-Plugin Rewriter seit dem Laden umgeschrieben wurden.
  • Rewriter_reload_error: Ob beim Laden der Rewrite_rules-Tabelle in den vom Rewriter-Plugin verwendeten In-Memory-Cache vor Kurzem ein Fehler aufgetreten ist. Wenn der Wert OFF ist, tritt kein Fehler auf. Wenn der Wert ON ist, tritt ein Fehler auf. Suchen Sie in der Nachrichtenspalte der Rewriter_Rules-Tabelle nach einer Fehlermeldung.

Wenn beim Laden der Regeltabelle durch Aufrufen der gespeicherten Prozedur flush_rewrite_rules() ein Fehler in einigen Regeln auftritt, generiert die CALL-Anweisung einen Fehler und das Plug-In setzt die Statusvariable Rewriter_reload_error auf ON:

Suchen Sie in diesem Fall in der Tabelle „rewrite_rules“ nach Zeilen, die Nachrichtenspaltenwerte ungleich NULL enthalten, um das Problem zu ermitteln.

Das Rewriter-Plugin verwendet den Zeichensatz

Wenn die rewrite_rules-Tabelle in das Rewriter-Plugin geladen wird, verwendet das Plugin den aktuellen globalen Wert der Systemvariablen character_set_client, um Anweisungen zu interpretieren. Wenn character_set_client den globalen Wert nachträglich ändert, muss die Regeltabelle neu geladen werden.

Der character_set_client-Wert der Clientsitzung muss mit dem globalen Wert beim Laden der Regeltabelle übereinstimmen, da sonst die Regelübereinstimmung auf diesen Client nicht angewendet wird.

Oben finden Sie detaillierte Informationen zur Verwendung des MySQL Query Rewrite Plug-Ins. Weitere Informationen zum MySQL Query Rewrite Plug-In finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So überwachen Sie MySQL mit dem Percona-Plugin in Zabbix
  • Spring MVC integriert Mybatis (CRUD + Paging-Plugin), um MySQL zu betreiben
  • So installieren und verwenden Sie das Plugin „Passwort validieren“ in MySql5.6, um die Passwortstärke zu verbessern
  • Plugin zur Verbesserung des MySQL-Passworts
  • Tutorial zur Verwendung des Memcached-Plugins für InnoDB in MySQL
  • Detaillierte Erklärung des Memcached-Plugins in der InnoDB-Engine unter MySQL
  • Tutorial zur Installation und Konfiguration des MySQL HandlerSocket-Plugins
  • Das Zahlungs-PHP-Spider-Statistik-Plugin kann verwendet werden, solange MySQL vorhanden ist
  • Das Zahlungs-PHP-Spider-Statistik-Plugin kann verwendet werden, solange MySQL vorhanden ist
  • Einführung in das MySQL Connection Control Plugin

<<:  Implementierung der Bereitstellung des Apollo-Konfigurationscenters mithilfe von Docker in CentOS7

>>:  Installationstutorial für Docker unter Linux

Artikel empfehlen

Detaillierte Erklärung zur Verwendung der JavaScript-Zwischenablage

(1) Einleitung: clipboard.js ist ein leichtes Jav...

MySQL-Startfehlerproblem und Szenarioanalyse

1. Komplettlösung 1. Problemanalyse und -lokalisi...

PHP geplante Backup MySQL und mysqldump Syntax-Parameter detailliert

Lassen Sie uns zunächst einige gängige Anwendungs...

Das WeChat-Applet implementiert das Scrollen von Text

In diesem Artikelbeispiel wird der spezifische Co...

Detailliertes Installationstutorial von Docker unter CentOS

Docker ist in CE und EE unterteilt. Die CE-Versio...

Detaillierte Erläuterung der MySQL Master-Slave-Datenbankkonstruktionsmethode

Dieser Artikel beschreibt, wie man eine MySQL Mas...

JS implementiert Click-Drop-Effekt

js realisiert den Spezialeffekt des Klickens und ...

Dieser Artikel zeigt Ihnen, wie Sie CSS wie JS-Module importieren

Inhaltsverzeichnis Vorwort Was sind erstellbare S...

JavaScript implementiert Informationen zur Kennwortfeldüberprüfung

In diesem Artikelbeispiel wird der spezifische Ja...

Vue Virtual DOM – Schnellstart

Inhaltsverzeichnis Virtueller DOM Was ist virtuel...

So autorisieren Sie Remoteverbindungen in MySQL unter Linux

Hinweis: Andere Maschinen (IP) können ohne Autori...