Drei Implementierungsmethoden für die MySQL-Kopiertabelle und die Grant-Analyse

Drei Implementierungsmethoden für die MySQL-Kopiertabelle und die Grant-Analyse

So kopieren Sie schnell eine Tabelle

Erstellen Sie zunächst eine Tabelle db1.t und fügen Sie 1000 Datenzeilen ein. Erstellen Sie gleichzeitig eine Tabelle db2.t mit derselben Struktur.

Angenommen, wir müssen die Datenzeilen mit a>900 in db1.t exportieren und in db2.t einfügen.

mysqldump-Methode

Einige wichtige Parameterhinweise:

  • –single-transaction wird verwendet, um Daten zu exportieren, ohne die Tabelle db1.t zu sperren.
  • Methode zum Starten einer Transaktion mit einem konsistenten Snapshot;
  • –no-create-info bedeutet, dass die Tabellenstruktur nicht exportiert werden muss;
  • –result-file gibt den Pfad der Ausgabedatei an, wobei „Client“ bedeutet, dass sich die generierte Datei auf dem Clientcomputer befindet.

CSV-Datei exportieren

Wählen Sie * aus db1.t, wobei a>900 in die Ausgabedatei „/server_tmp/t.csv“;

Diese Anweisung speichert das Ergebnis auf dem Server. Wenn sich der Client, auf dem Sie den Befehl ausführen, und der MySQL-Server nicht auf demselben Computer befinden, wird die Datei t.csv nicht im temporären Verzeichnis des Client-Computers generiert.

Dieser Befehl überschreibt die Datei nicht für Sie, Sie müssen also sicherstellen, dass die Datei /server_tmp/t.csv nicht existiert, da sonst beim Ausführen der Anweisung ein Fehler gemeldet wird, weil eine Datei mit gleichem Namen existiert.

Nachdem Sie die CSV-Exportdatei erhalten haben, können Sie den folgenden Befehl zum Laden von Daten verwenden, um die Daten in die Zieltabelle db2.t zu importieren.

Daten aus der Datei „/server_tmp/t.csv“ in die Tabelle db2.t laden;

Öffnen Sie die Datei /server_tmp/t.csv, verwenden Sie das Tabulatorzeichen (\t) als Trennzeichen zwischen Feldern und das Zeilenumbruchzeichen (\n) als Trennzeichen zwischen Datensätzen und lesen Sie die Daten.

Starten Sie eine Transaktion.

Bestimmen Sie, ob die Anzahl der Felder in jeder Zeile mit der Anzahl in der Tabelle db2.t übereinstimmt:

  • Wenn sie unterschiedlich sind, wird direkt ein Fehler gemeldet und die Transaktion zurückgesetzt.
  • Wenn sie gleich sind, wird eine Zeile erstellt, die Schnittstelle der InnoDB-Engine aufgerufen und die Daten in die Tabelle geschrieben.

Wiederholen Sie Schritt 3, bis die gesamte Datei /server_tmp/t.csv eingelesen ist, und bestätigen Sie die Transaktion.

Methode der physischen Kopie

Sowohl die mysqldump-Methode als auch die Methode zum Exportieren von CSV-Dateien sind logische Datenimportmethoden, d. h. Daten werden aus der Tabelle db1.t gelesen, Text generiert und anschließend in die Zieltabelle db2.t geschrieben. Gibt es eine Möglichkeit, Daten physisch zu importieren? Ist es beispielsweise möglich, die .frm-Datei und die .ibd-Datei der db1.t-Tabelle direkt in das db2-Verzeichnis zu kopieren? Die Antwort ist nein.

Denn zusätzlich zu diesen beiden physischen Dateien muss eine InnoDB-Tabelle auch im Datenwörterbuch registriert sein. Wenn Sie diese beiden Dateien direkt kopieren, werden sie vom System nicht erkannt und akzeptiert, da im Datenwörterbuch keine db2.t-Tabelle vorhanden ist.

MySQL 5.6 führte die Methode transportierbarer Tablespaces ein, die die Funktion des physischen Kopierens von Tabellen durch Exportieren und Importieren von Tablespaces erreichen kann.

Angenommen, das aktuelle Ziel besteht darin, eine Tabelle r zu kopieren, die mit der Tabelle t in der Datenbank von db1 identisch ist. Die spezifischen Ausführungsschritte sind wie folgt:

  • Führen Sie „create table r like t“ aus, um eine leere Tabelle mit derselben Tabellenstruktur zu erstellen.
  • Führen Sie „alter table r discard tablespace“ aus, dann wird die Datei r.ibd gelöscht
  • Führen Sie zum Exportieren „Flush Table t“ aus. Es wird eine t.cfg-Datei generiert.
  • Führen Sie die folgenden beiden Befehle im Verzeichnis db1 aus: cp t.cfg r.cfg; cp t.ibd r.ibd;
  • Führen Sie die Funktion „Tabellen entsperren“ aus. Die Datei t.cfg wird gelöscht.
  • Führen Sie „alter table r import tablespace“ aus und verwenden Sie die Datei r.ibd als neuen Tablespace für Tabelle r. Da der Dateninhalt dieser Datei mit dem von t.ibd identisch ist, enthält Tabelle r dieselben Daten wie Tabelle t.

Vor- und Nachteile dieser drei Methoden

Die physische Kopiermethode ist die schnellste, insbesondere zum Kopieren großer Tabellen. Es muss jedoch eine vollständige Kopie sein, keine Teilkopie. Daten müssen auf den Server kopiert werden. Es kann nicht verwendet werden, wenn sich der Benutzer nicht beim Datenbankhost anmelden kann. Darüber hinaus müssen sowohl die Quelltabelle als auch die Zieltabelle die InnoDB-Engine verwenden.

Wenn Sie mysqldump zum Generieren einer Datei mit INSERT-Anweisungen verwenden, können Sie dem Where-Parameter Filterbedingungen hinzufügen, um nur einen Teil der Daten zu exportieren. Einer der Nachteile dieser Methode besteht darin, dass sie keine komplexeren Where-Bedingungen wie „Join“ verwenden kann.

Die Methode „Select ... into outfile“ ist die flexibelste und unterstützt alle SQL-Schreibmethoden. Zu den Nachteilen dieser Methode gehört allerdings, dass immer nur die Daten einer Tabelle exportiert werden können und die Tabellenstruktur zudem mit einem weiteren Anweisung separat gesichert werden muss.

Die beiden letztgenannten Methoden sind logische Backups und können Engine-übergreifend verwendet werden.

Globale MySQL-Berechtigungen

SELECT * FROM MYSQL.USER WHERE USER='UA'\G Alle Berechtigungen anzeigen

Der Umfang umfasst das gesamte MySQL und die Informationen werden in der Benutzertabelle von MySQL gespeichert.

Gewähren Sie dem Benutzer ua die höchste Berechtigung:

grant all privileges on *.* to 'ua'@'%' with grant option;

Dieser Grant-Befehl bewirkt zwei Dinge: Er ändert die Berechtigungsfelder in der mysql.user-Tabelle auf der Festplatte auf Y und ändert den Zugriffswert des entsprechenden Objekts des Benutzers im acl_user im Speicher auf „alle 1“.

Wenn sich ein neuer Client erfolgreich mit dem Benutzernamen ua anmeldet, verwaltet MySQL ein Thread-Objekt für die neue Verbindung. Alle Entscheidungen über globale Berechtigungen werden direkt anhand der im Thread-Objekt gespeicherten Berechtigungsbits getroffen.

Der Befehl „Grant“ aktualisiert die Festplatte und den entsprechenden Speicher für globale Berechtigungen. Die neu erstellte Verbindung verwendet die neuen Berechtigungen. Die globalen Berechtigungen der bestehenden Verbindung werden durch die Gewährung nicht beeinflusst.
Wenn Sie die oben genannten Berechtigungen widerrufen möchten:

revoke all privileges on *.* from 'ua'@'%';

Es gibt auch zwei entsprechende Vorgänge. Das Berechtigungsfeld auf der Festplatte wird auf Bit N geändert und der Zugriffswert des Objekts im Speicher wird auf Bit 0 geändert.

mysqlDB-Berechtigungen

grant all privileges on db1.* to 'ua'@'%' with grant option;

Verwenden Sie SELECT * FROM MYSQL.DB WHERE USER = 'UA'\G, um die Datenbankberechtigungen des aktuellen Benutzers sowie die Berechtigungen zum Ändern von Objekten auf der Festplatte und im Speicher anzuzeigen.

Die Datenbankberechtigungen werden in der Tabelle mysql.db gespeichert.

Hinweis: Im Gegensatz zu globalen Berechtigungen wirken sich Datenbankberechtigungen auf vorhandene Verbindungsobjekte aus.

MySQL-Tabellenberechtigungen und Spaltenberechtigungen

Tabellenberechtigungen werden in mysql.tables_priv gespeichert, Spaltenberechtigungen werden in mysql.columns_priv gespeichert und diese beiden Berechtigungstypen werden kombiniert und in der Hash-Struktur column_priv_hash im Speicher gespeichert.

Ähnlich wie bei Datenbankberechtigungen wird jedes Mal, wenn diese beiden Berechtigungen erteilt werden, die Datentabelle geändert und die Hash-Struktur im Speicher wird synchron geändert. Daher wirkt sich der Betrieb dieser beiden Berechtigungstypen auch auf vorhandene Verbindungen aus.

Verwenden Sie Szenarien für das Leeren von Berechtigungen

In einigen Dokumenten wird erwähnt, dass der Befehl „Flush Privileges“ unmittelbar nach der Gewährung von Berechtigungen ausgeführt werden muss, damit die Grant-Anweisung wirksam wird. Tatsächlich sollte eine genauere Aussage lauten: Wenn die Berechtigungen in der Datentabelle nicht mit den Berechtigungsdaten im Speicher übereinstimmen, kann die Anweisung „Flush Privileges“ verwendet werden, um die Speicherdaten neu aufzubauen und einen konsistenten Zustand zu erreichen.

Wird beispielsweise zu einem bestimmten Zeitpunkt ein Datensatz einer Datentabelle gelöscht, die Daten im Speicher sind aber weiterhin vorhanden, schlägt die Autorisierung des Benutzers fehl, da der Datensatz in der Datentabelle nicht gefunden werden kann.
Gleichzeitig funktioniert die Neuerstellung dieses Benutzers nicht, da bei der Beurteilung im Speicher davon ausgegangen wird, dass dieser Benutzer noch existiert.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So verwenden Sie den MySQL-Autorisierungsbefehl „grant“
  • Eine kurze Erklärung zum Erteilen und Entziehen von Berechtigungen in MySQL
  • Befehl zur Erteilung von Berechtigungen in der MySQL-Verwaltung zum Erstellen von Notizen
  • Detaillierte Erklärung des MySQL Grant-Befehls
  • Hinweise zu MySQL-Grants
  • Implementierung der MySQL GRANT-Benutzerautorisierung

<<:  Linux-Installation, MongoDB-Start und Lösung allgemeiner Probleme

>>:  Natives JS zur Implementierung eines Bildkarussells. JS zur Implementierung eines kleinen Werbe-Plugins.

Artikel empfehlen

Mac VMware Fusion CentOS7 Konfiguration statisches IP-Tutorial-Diagramm

Inhaltsverzeichnis Installieren Sie CentOS7 Konfi...

Webdesign-Tipps für Formular-Eingabefelder

Dieser Artikel listet einige Tipps und Codes zu F...

MySQL REVOKE zum Löschen von Benutzerberechtigungen

In MySQL können Sie mit der REVOKE-Anweisung best...

Detaillierte Erläuterung des Lernens von CSS-Zählerattributen

Das CSS-Zählerattribut wird von fast allen Browse...

JavaScript implementiert die Maussteuerung eines frei beweglichen Fensters

In diesem Artikel wird der spezifische JavaScript...

Verwenden Sie thead, tfoot und tbody, um eine Tabelle zu erstellen

Manche Leute verwenden diese drei Tags auf pervers...

Einführung in die Verwendung des HTML-Basistags target=_parent

Der <base>-Tag gibt die Standardadresse oder...

JavaScript realisiert den Effekt der mobilen Modalbox

In diesem Artikelbeispiel wird der spezifische Ja...

Tutorials der MySQL-Reihe für Anfänger

Inhaltsverzeichnis 1. Grundkonzepte und Grundbefe...

Zusammenfassung der Vorteile der Bereitstellung von MySQL Delayed Slaves

Vorwort Die Master-Slave-Replikationsbeziehung vo...

Detaillierte Ansicht versteckter Spalten in MySQL

Inhaltsverzeichnis 1. Primärschlüssel vorhanden 2...

Umfassendes Verständnis des MySQL-Protokolls für langsame Abfragen

Inhaltsverzeichnis Was ist das Protokoll langsame...

So unterstreichen Sie das A-Tag und ändern die Farbe vor und nach dem Klicken

Code kopieren Der Code lautet wie folgt: ein:link...