Verwendung des offiziellen MySQL-Exporttools mysqlpump

Verwendung des offiziellen MySQL-Exporttools mysqlpump

Einführung

mysqlpump ist eine Ableitung von mysqldump. Es bezieht sich auch auf die Idee von mydumper und unterstützt den parallelen Datenexport. Daher ist die Effizienz des Datenexports viel höher als die von mysqldump.

Anweisungen

Die meisten Parameter von mysqlpump sind dieselben wie die von mysqldump, und die allgemeine Verwendung unterscheidet sich nicht wesentlich von mysqldump. Hier sind einige der wichtigeren und am häufigsten verwendeten Parameter in mysqlpump.

Parameter

veranschaulichen

--default-parallelism=#

Legen Sie die Parallelität des parallelen Exports fest, der mit Einzeltransaktionen in Konflikt steht

--single-transaction

Erstellen Sie eine einzelne Transaktion, um alle Tabellen zu exportieren

--exclude-databases=Name

Bestimmte Bibliotheken beim Export ausschließen. Mehrere Bibliotheken werden durch Kommas getrennt.

--exclude-tables=Name

Bestimmte Tabellen beim Export ausschließen. Mehrere Tabellen werden durch Kommas getrennt.

--include-databases=Name

Beim Exportieren bestimmte Bibliotheken einschließen. Mehrere Bibliotheken werden durch Kommas getrennt.

--include-tables=Name

Beim Exportieren bestimmte Tabellen einbeziehen. Mehrere Tabellen werden durch Kommas getrennt.

Tatsächliche Erfahrung

Hier führen wir einen einfachen Test von mysqlpump durch, wählen MySQL 5.7 als Zielinstanz aus und verwenden in den Parametern sowohl Einzeltransaktion als auch Standardparallelität, um die Auswirkungen dieses Konflikts zu sehen.

Die Ausgabe auf der mysqlpump-Seite bezieht sich auf folgende Informationen:

root@VM-64-10-debian:~# mysqlpump -h172.100.10.10 -uroot -p --single-transaction --default-parallelism=16 --set-gtid-purged=OFF -B sbtest > sbtest.sql
Dump-Fortschritt: 0/1 Tabellen, 250/987400 Zeilen
Dump-Fortschritt: 0/5 Tabellen, 117250/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 258750/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 385500/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 516750/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 639250/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 757000/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 885000/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 1005750/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 1114250/3946600 Zeilen
Dump-Fortschritt: 1/5 Tabellen, 1223250/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 1312500/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 1430750/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 1553000/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 1680250/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 1809500/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 1940750/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 2060000/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 2175250/3946600 Zeilen
Dump-Fortschritt: 2/5 Tabellen, 2295250/3946600 Zeilen
Dump-Fortschritt: 3/5 Tabellen, 2413500/3946600 Zeilen
Dump-Fortschritt: 3/5 Tabellen, 2554500/3946600 Zeilen
Dump-Fortschritt: 3/5 Tabellen, 2693500/3946600 Zeilen
Dump-Fortschritt: 3/5 Tabellen, 2818750/3946600 Zeilen
Dump-Fortschritt: 3/5 Tabellen, 2941500/3946600 Zeilen
Dump-Fortschritt: 4/5 Tabellen, 3056000/3946600 Zeilen
Dump-Fortschritt: 4/5 Tabellen, 3172750/3946600 Zeilen
Dump-Fortschritt: 4/5 Tabellen, 3280000/3946600 Zeilen
Dump-Fortschritt: 4/5 Tabellen, 3372000/3946600 Zeilen
Dump-Fortschritt: 4/5 Tabellen, 3444750/3946600 Zeilen
Dump in 126555 Millisekunden abgeschlossen

Sie können sehen, dass mysqlpump die Tabellen tatsächlich immer noch einzeln exportiert, wenn diese beiden Parameter gleichzeitig aktiviert sind. Die Priorität der Einzeltransaktion ist höher als die der Standardparallelität.

Wenn Sie einzelne Transaktionen entfernen und erneut testen, werden Sie ein interessantes Phänomen feststellen. Wenn Sie die MySQL-Prozessliste beobachten, erhalten Sie die folgenden Ergebnisse:

mysql> Prozessliste anzeigen;
+---------+------+--------------------+------+---------+------+----------------------------------+----------------------------------------------------+
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info |
+---------+------+--------------------+------+---------+------+----------------------------------+----------------------------------------------------+
| 2763496 | root | 172.100.10.10:49086 | NULL | Abfrage | 0 | wird gestartet | Prozessliste anzeigen |
| 2763585 | root | 172.100.10.10:49192 | NULL | Schlaf | 126 | | NULL |
| 2763586 | root | 172.100.10.10:49194 | NULL | Schlaf | 126 | | NULL |
| 2763587 | root |172.100.10.10:49196 | NULL | Schlaf | 126 | | NULL |
| 2763588 | root | 172.100.10.10:49198 | NULL | Schlaf | 126 | | NULL |
| 2763589 | root | 172.100.10.10:49200 | NULL | Schlaf | 126 | | NULL |
| 2763590 | root | 172.100.10.10:49202 | NULL | Schlaf | 126 | | NULL |
| 2763591 | root | 172.100.10.10:49204 | NULL | Schlaf | 126 | | NULL |
| 2763592 | root | 172.100.10.10:49206 | NULL | Schlaf | 126 | | NULL |
| 2763593 | root | 172.100.10.10:49208 | NULL | Schlaf | 126 | | NULL |
| 2763594 | root | 172.100.10.10:49210 | NULL | Schlaf | 126 | | NULL |
| 2763595 | root | 172.100.10.10:49212 | NULL | Abfrage | 125 | An Client senden | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest5` |
| 2763596 | root | 172.100.10.10:49214 | NULL | Abfrage | 125 | An Client senden | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest4` |
| 2763597 | root | 172.100.10.10:49216 | NULL | Abfrage | 125 | An Client senden | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest3` |
| 2763598 | root | 172.100.10.10:49218 | NULL | Abfrage | 125 | An Client senden | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest2` |
| 2763599 | root | 172.100.10.10:49220 | NULL | Abfrage | 125 | An Client senden | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest1` |
| 2763600 | root | 172.100.10.10:49222 | NULL | Schlaf | 125 | | NULL |
| 2763601 | root | 172.100.10.10:49224 | NULL | Schlaf | 125 | | NULL |
+---------+------+--------------------+------+---------+------+----------------------------------+----------------------------------------------------+
18 Zeilen im Satz (0,00 Sek.)

MySQL>

Es ist deutlich zu erkennen, dass der "parallele Export" von mysqlpump tatsächlich nur auf dem parallelen Export auf Tabellenebene basiert. Wenn es eine einzelne große Tabelle gibt, wird die Exportzeit ernsthaft beeinträchtigt und es tritt ein Shortboard-Effekt auf.

Zusatzfrage: Wenn ein Konflikt zwischen Standardparallelität und Einzeltransaktion besteht, kann die Datenkonsistenz beim parallelen Export nicht bestätigt werden?

Übung macht den Meister. Öffnen Sie general_log und sehen Sie sich den Exportvorgang an:

2021-05-12T11:54:09.033215Z 75 Verbinden Sie [email protected] mit SSL/TLS
2021-05-12T11:54:09.075347Z 75 Abfrage FLUSH TABLES WITH READ LOCK // Tabellen sperren beginnen 2021-05-12T11:54:09.103132Z 75 Abfrage SHOW WARNINGS
2021-05-12T11:54:09.106382Z 75 Abfrage SET SESSION TRANSACTION ISOLATION LEVEL WIEDERHOLBARES LESEN
2021-05-12T11:54:09.106553Z 75 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:09.106640Z 75 Abfrage START TRANSACTION MIT KONSISTENTEM SNAPSHOT
2021-05-12T11:54:09.108115Z 75 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:09.127277Z 76 Verbinden Sie [email protected] mit SSL/TLS
2021-05-12T11:54:09.127452Z 76 Abfrage SET SESSION TRANSACTION ISOLATION LEVEL WIEDERHOLBARES LESEN
2021-05-12T11:54:09.127590Z 76 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:09.127680Z 76 Abfrage START TRANSACTION MIT KONSISTENTEM SNAPSHOT
2021-05-12T11:54:09.127790Z 76 Abfrage WARNUNGEN ANZEIGEN
......
2021-05-12T11:54:10.018813Z 90 Verbinden Sie [email protected] mit SSL/TLS
2021-05-12T11:54:10.018944Z 90 Abfrage SET SESSION TRANSACTION ISOLATION LEVEL WIEDERHOLBARES LESEN
2021-05-12T11:54:10.019047Z 90 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:10.019150Z 90 Abfrage START TRANSAKTION MIT KONSISTENTEM SNAPSHOT
2021-05-12T11:54:10.019226Z 90 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:10.025833Z 91 Verbinden Sie [email protected] mit SSL/TLS
2021-05-12T11:54:10.025934Z 91 Abfrage SET SESSION TRANSACTION ISOLATION LEVEL WIEDERHOLBARES LESEN
2021-05-12T11:54:10.026048Z 91 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:10.026141Z 91 Abfrage START TRANSAKTION MIT KONSISTENTEM SNAPSHOT
2021-05-12T11:54:10.026219Z 91 Abfrage WARNUNGEN ANZEIGEN
2021-05-12T11:54:10.026293Z 75 Abfrage UNLOCK TABLES //Sperre der Tabelle beenden 2021-05-12T11:54:10.026406Z 75 Abfrage SHOW WARNINGS

Es ist ersichtlich, dass vor dem parallelen Export ein Thread eine globale Lesesperre hinzufügt und die Tabelle erst entsperrt, nachdem alle gleichzeitigen Threads die Transaktion geöffnet haben. Daher sind die Daten während des parallelen Exports konsistent.

Für und Wider

  • Vorteil:
    • Sichert Datenbanken und darin enthaltene Objekte parallel, was effizienter ist als mysqldump.
    • Bessere Kontrolle über Backups von Datenbanken und Datenbankobjekten (Tabellen, gespeicherte Prozeduren, Benutzerkonten).
    • Visualisierung des Sicherungsfortschritts.
  • Mangel:
    • Es ist nur eine Parallelisierung auf Tabellenebene möglich. Wenn eine Tabelle besonders viele Daten enthält, tritt ein sehr schwerwiegender Shortboard-Effekt auf.
    • Die exportierten Daten werden in einer Datei gespeichert und der Import erfolgt weiterhin einfädig, was weniger effizient ist.
    • Die Binärprotokollposition, die dem aktuellen Backup entspricht, konnte nicht abgerufen werden.

Um zusammenzufassen

Obwohl mysqlpump noch viele Mängel aufweist, hat es im Vergleich zum ursprünglichen mysqldump große Fortschritte gemacht. Die Veröffentlichung dieses Tools zeigt auch, dass Oracle endlich begonnen hat, den ökologischen Tools von MySQL Aufmerksamkeit zu schenken. Wir freuen uns darauf, dass die offizielle Version mehr und bessere ökologische Tools bereitstellt.

Oben finden Sie detaillierte Informationen zur Verwendung des offiziellen MySQL-Exporttools mysqlpump. Weitere Informationen zur Verwendung von mysqlpump finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • mysqldump-Parameter, die Sie möglicherweise nicht kennen
  • Implementierung der MySQL5.7 mysqldump-Sicherung und -Wiederherstellung
  • Detaillierte Erläuterung der Idee, mysqldump + expect + crontab zur Implementierung eines regelmäßigen MySQL-Cold-Backups unter Linux zu verwenden
  • Zusammenfassung der MySql-Import- und Exportmethoden mit mysqldump
  • Detaillierte Erklärung zur Verwendung von MySQL mysqldump
  • So verwenden Sie mysqldump für vollständige und zeitpunktbezogene Sicherungen
  • Docker verwendet den Befehl mysqldump, um MySQL-Daten im Projekt zu sichern und zu exportieren
  • MySQL-Datenmigration mit dem Befehl MySQLdump
  • PHP geplante Backup MySQL und mysqldump Syntax-Parameter detailliert
  • Detaillierte Erklärung zur Verwendung des MySQL-Sicherungsskripts mysqldump
  • Detaillierte Erklärung zum Exportieren von Datenbank-, Daten- und Tabellenstrukturen mit Linux mysqldump
  • Detaillierte Diskussion zum Thema mysqldump-Datenexport

<<:  Erkunden Sie die gängigen VMware ESXI CLI-Befehle

>>:  So verwenden Sie Elemente in React-Projekten

Artikel empfehlen

So aktualisieren Sie CentOS7 auf CentOS8 (detaillierte Schritte)

Dieser Artikel erläutert anhand eines konkreten B...

Erläuterung unveränderlicher Werte in React

Inhaltsverzeichnis Was sind unveränderliche Werte...

Sicherheitseinstellungen für Windows 2016 Server

Inhaltsverzeichnis Systemupdate-Konfiguration Änd...

Detaillierte Zusammenfassung von MySQL und verbindungsbezogenen Timeouts

MySQL und verbindungsbezogene Timeouts Vorwort: H...

Unterschied zwischen den Methoden querySelector und getElementById in JS

Inhaltsverzeichnis 1. Übersicht 1.1 Verwendung vo...

MySQL InnoDB-Quellcodeanalyse für Transaktionssperren

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

Vue nutzt Baidu Maps zur Realisierung der Stadtpositionierung

In diesem Artikel wird der spezifische Code von V...

Tipps zum Mischen von OR und AND in SQL-Anweisungen

Heute gibt es eine solche Anforderung. Wenn die a...

Einführung in HTML DOM_PowerNode Java Academy

Was ist DOM? Mit JavaScript können Sie das gesamt...

Detaillierte Analyse, wann Tomcat das Antwortdatagramm zurückschreibt

Es stellt sich die Frage Diese Frage kam auf, als...

So konfigurieren Sie Openbox für den Linux-Desktop (empfohlen)

Dieser Artikel ist Teil einer Sonderserie zu den ...

Verwendung und Ausführungsprozess des HTTP-Moduls im Knoten

Welche Rolle spielt http im Knoten? Die Aufgabe d...