Detailliertes Beispiel einer MySQL-Austauschpartition

Detailliertes Beispiel einer MySQL-Austauschpartition

Detailliertes Beispiel einer MySQL-Austauschpartition

Vorwort

Bevor wir die Exchange-Partition vorstellen, wollen wir zunächst die MySQL-Partition verstehen.

Es gibt zwei Arten der Datenbankpartitionierung: horizontale Partitionierung und vertikale Partitionierung. MySQL unterstützt derzeit keine vertikale Partitionierung, im Folgenden geht es daher nur um die horizontale Partitionierung. Horizontale Partitionierung bedeutet, die Tabelle in Zeilen zu partitionieren. Beispiel: Partitionierung nach Zeit, eine Partition für jedes Jahr usw.

In MySQL sind Partitionen austauschbar und die Daten in einer Partition einer Partitionstabelle können mit denen in einer normalen Tabelle ausgetauscht werden.

Implementierung der Swap-Partition

1. Syntax der Swap-Partition

Tabelle pt ändern, Partition p mit Tabelle nt austauschen;

erklären:

Tauschen Sie die Daten in Partition p der Partitionstabelle pt und einer normalen Tabelle nt aus.

Voraussetzungen für den Austausch:

  • Die normale Tabelle nt ist keine temporäre Tabelle und keine partitionierte Tabelle.
  • Die Tabellenstruktur entspricht der Struktur der Partitionstabelle pt.
  • Die normale Tabelle nt hat keine Fremdschlüsselreferenzen.
  • Wenn die allgemeine Tabelle nt nicht leer ist. In MySQL 5.6 und früheren Versionen müssen die Daten innerhalb des Partitionsbereichs liegen. In MySQL 5.7 und höher können die Daten außerhalb des Partitionsbereichs liegen und trotzdem erfolgreich in der Partition gespeichert werden.

2. Experimentelle Swap-Partition

(1) Erstellen Sie eine Partitionstabelle und fügen Sie Daten ein

# Erstellen Sie eine Partitionstabelle
CREATE TABLE e (
  id INT NICHT NULL,
  fname VARCHAR(30),
  lname VARCHAR(30)
)
  PARTITION NACH BEREICH (id) (
    PARTITION p0 WERTE WENIGER ALS (50),
    PARTITION p1 WERTE WENIGER ALS (100),
    PARTITION p2 WERTE WENIGER ALS (150),
    PARTITION p3 WERTE KLEINER ALS (MAXIMALER WERT)
);

# Mehrere Datensätze in die Partitionstabelle einfügen e INSERT INTO e VALUES
  (1669, "Jim", "Smith"),
  (337, „Mary“, „Jones“),
  (16, "Frank", "Weiß"),
  (2005, „Linda“, „Schwarz“);

(2) Erstellen Sie eine gemeinsame Tabelle e2 mit der gleichen Struktur wie die Partitionstabelle e

# Erstellen Sie eine Tabelle e2
mysql> erstelle Tabelle e2 wie e;

# Löschen Sie die Partition der Tabelle e2, um sie zu einer normalen Tabelle zu machen. mysql> alter table e2 remove partitioning;

(3) Überprüfen Sie, wie viele Zeilen sich in jeder Partition der Tabelle e befinden

mysql> wähle PARTITIONSNAME, TABELLENZEILEN
  -> VON INFORMATION_SCHEMA.PARTITIONS
  -> WO TABELLENNAME = "e";
+----+------------+
| PARTITIONSNAME | TABELLENZEILEN |
+----+------------+
| p0 | 1 |
|
| s2 | 0 |
| Seite 3 | 3 |
+----+------------+
4 Zeilen im Satz (0,00 Sek.)

(4) Ersetzen Sie die Partition p0 der Tabelle e durch die normale Tabelle e2

mysql> Tabelle e ändern, Partition p0 mit Tabelle e2 austauschen;

(5) Ergebnisse ansehen

# Die Daten in Partition P0 der Tabelle e sind wegmysql> SELECT PARTITION_NAME, TABLE_ROWS
  -> VON INFORMATION_SCHEMA.PARTITIONS
  -> WO TABELLENNAME = "e";
+----+------------+
| PARTITIONSNAME | TABELLENZEILEN |
+----+------------+
| p0 | 0 |
|
| s2 | 0 |
| Seite 3 | 3 |
+----+------------+
4 Zeilen im Satz (0,00 Sek.)

# In Tabelle e2 gibt es einen Datensatz aus Partition p0 der Tabelle emysql> SELECT * FROM e2;
+----+-------+-------+
| Ich würde | FName | LName |
+----+-------+-------+
| 16 | Frank | Weiß |
+----+-------+-------+
1 Zeile im Satz (0,00 Sek.)

Es kann festgestellt werden, dass die Daten der Partition p0 der Tabelle e in die Tabelle e2 verschoben wurden.

Das obige Beispiel tauscht eine Partition gegen eine normale leere Tabelle aus, was dem Auslagern der Daten einer Partition entspricht. Es wird normalerweise bei der Datenarchivierung verwendet.

In ähnlicher Weise kann die Austauschpartition auch zwischen einer Partition und einer nicht leeren normalen Tabelle ausgetauscht werden, sodass die Daten in der normalen Tabelle in die angegebene Partition und die Daten in der angegebenen Partition in die normale Tabelle verschoben werden. Gehen Sie wie folgt vor:

(6) Fügen Sie ein weiteres Datenelement zu p0 der Partitionstabelle e hinzu

# Fügen Sie der Tabelle e einen Datensatz in Partition p0 hinzu mysql> INSERT INTO e VALUES (41, "Michael", "Green");      
Abfrage OK, 1 Zeile betroffen (0,05 Sek.)               

# Bestätigen Sie, dass die eingefügten Daten tatsächlich in der Partition p0 gespeichert sind
mysql> PARTITIONSNAME, TABELLENZEILEN AUSWÄHLEN
  -> VON INFORMATION_SCHEMA.PARTITIONS
  -> WO TABELLENNAME = "e";      
+----+------------+       
| PARTITIONSNAME | TABELLENZEILEN |       
+----+------------+       
| p0 | 1 |       
|       
| s2 | 0 |       
| Seite 3 | 3 |       
+----+------------+       
4 Zeilen im Satz (0,00 Sek.)

(7) Swap-Partition ausführen

​mysql> Tabelle e ändern, Partition p0 mit Tabelle e2 austauschen;
Abfrage OK, 0 Zeilen betroffen (0,28 Sek.)

(8) Ergebnisse ansehen

# Zuvor wurde p0 der Tabelle e gegen ein Datum in Tabelle e2 ausgetauscht, und jetzt ist es wieder Tabelle e
mysql> AUSWÄHLEN * VON e;
+------+-------+---------+
| Ich würde | FName | LName |
+------+-------+---------+
| 16 | Frank | Weiß |   
| 1669 | Jim | Schmied |
| 337 | Maria | Jones |
| 2005 | Linda | Schwarz |
+------+-------+---------+
4 Zeilen im Satz (0,00 Sek.)

mysql> AUSWÄHLEN * VON e2;
+----+---------+-------+
| Ich würde | FName | LName |
+----+---------+-------+
| 41 | Michael | Grün |
+----+---------+-------+
1 Zeile im Satz (0,00 Sek.)

Daraus können wir erkennen, dass die Daten in Tabelle e's p0 und Tabelle e2 vertauscht wurden! Dieses Szenario kann beim Verschieben von Daten aus einer allgemeinen Tabelle in eine Partition in einer partitionierten Tabelle verwendet werden .

Allerdings gibt es eines zu beachten:

Liegen die Daten der gemeinsamen Tabelle nicht im Bereich der auszutauschenden Partition, kann obige Syntax zum Partitionsaustausch nicht erfolgreich ausgeführt werden! Bitte sehen Sie sich die Vorgehensweise unten an.

(9) Fügen Sie Daten, die den Bereich p0 der Tabelle e überschreiten, in die normale Tabelle e2 ein und führen Sie die obige Austauschanweisung aus

mysql> INSERT INTO e2 VALUES (51, "Ellen", "McDonald");
Abfrage OK, 1 Zeile betroffen (0,08 Sek.)

mysql> Tabelle e ändern, Partition p0 mit Tabelle e2 austauschen;
FEHLER 1707 (HY000): Es wurde eine Zeile gefunden, die nicht mit der Partition übereinstimmt

In MySQL 5.6 kann dieses Problem nicht gelöst werden; in MySQL 5.7.5 wurde eine Option OHNE VALIDIERUNG hinzugefügt, um den obigen Fehler zu beheben. Die Funktionsweise ist wie folgt:

mysql> ALTER TABLE e TAUSCHEN SIE PARTITION p0 MIT TABELLE e2 OHNE ÜBERPRÜFUNG AUS;
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

Sehen Sie sich die Ergebnisse an:

# Die Daten mit der ID 51 werden auch in p0 der Tabelle e gespeichert mysql> select * from e partition(p0);
+------+---------+----------+
| Ich würde | FName | LName |
+------+---------+----------+
| 41 | Michael | Grün |
| 51 | Ellen | McDonald | 
+------+---------+----------+

mysql> AUSWÄHLEN * VON e2;
+----+---------+-------+
| Ich würde | FName | LName |
+----+---------+-------+
| 16 | Frank | Weiß |
+----+---------+-------+
1 Zeile im Satz (0,00 Sek.)

Zusammenfassen

Durch die oben genannten praktischen Vorgänge haben wir festgestellt, dass die MySQL-Austauschpartitionsfunktion in zwei Szenarien anwendbar ist:

Eine Partition einer Partitionstabelle wird gegen eine leere normale Tabelle ausgetauscht, sodass die Daten der Partition der Partitionstabelle ausgelagert werden.
Tauschen Sie eine Partition einer Partitionstabelle gegen eine nicht leere normale Tabelle aus, sodass die Daten der normalen Tabelle in die angegebene Partition der Partitionstabelle verschoben werden.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Eine einfache Möglichkeit, das Passwort von MySQL zu ändern, das gerade in Linux installiert wurde
  • Detaillierte Erläuterung des CentOS 6.6-Quellcodes und der Installation des MySQL 5.7.18-Tutorials
  • Lösung für MySql-Fehler 1698 (28000)
  • Lösung für das Problem, dass die Anzahl der MySQL-Verbindungen in CentOS 7 auf 214 begrenzt ist
  • Analyse der problematischen „Aborted“-Warnung in MySQL anhand von Fallstudien
  • Lösen Sie das Problem, dass IN-Unterabfragen in MySQL dazu führen, dass der Index unbrauchbar wird

<<:  Zusammenfassung häufiger Probleme und Lösungen in Vue (empfohlen)

>>:  CentOS7-Bereitstellung Flask (Apache, mod_wsgi, Python36, venv)

Artikel empfehlen

MySQL 5.6.33 Installations- und Konfigurations-Tutorial unter Linux

In diesem Tutorial erfahren Sie alles über die In...

Eine kurze Diskussion über die Eigenschaften von CSS-Float

In diesem Artikel werden die Eigenschaften von CS...

UrlRewriter-Caching-Probleme und eine Reihe damit verbundener Untersuchungen

Beim Entwickeln einer Website-Funktion kann der S...

Detaillierte Erklärung des Synchronisierungsmodifikators von Vue

Inhaltsverzeichnis 1. Anweisungen 2. Modifikatore...

JavaScript MouseEvent-Fallstudie

Mausereignis Wenn die Maus eine bestimmte Operati...

MySQL InnoDB-Quellcodeanalyse für Transaktionssperren

Inhaltsverzeichnis 1. Schloss und Riegel 2. Wiede...

Implementierung der Vue-Nuxt-Anmeldeauthentifizierung

Inhaltsverzeichnis einführen Link Start Gehen Sie...

Detailliertes Tutorial zur Installation von Hbase 2.3.5 auf Vmware + Ubuntu18.04

Vorwort Im vorherigen Artikel wurde Hadoop instal...

Nexus verwendet Nginx-Proxy zur Unterstützung des HTTPS-Protokolls

Hintergrund Alle Unternehmenswebsites müssen das ...

So erlauben Sie den Remotezugriff auf offene Ports in Linux

1. Ändern Sie die Firewall-Konfigurationsdatei # ...