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

Vue3 + TypeScript-Entwicklungszusammenfassung

Inhaltsverzeichnis Vue3 + TypeScript lernen 1. Um...

MySQL-Datenbankbeschränkungen und Prinzipien des Datentabellenentwurfs

Inhaltsverzeichnis 1. Datenbankbeschränkungen 1.1...

So erstellen Sie MySQL-Indizes richtig

Die Indizierung ähnelt dem Erstellen bibliografis...

Bereitstellung und Konfiguration des Apache-Dienstes unter Linux

Inhaltsverzeichnis 1 Die Rolle von Apache 2 Apach...

MySQL Server IO 100 % Analyse- und Optimierungslösung

Vorwort Während des Stresstests besteht das unmit...

Native js realisiert das Ziehen und Ablegen des Neun-Quadrat-Rasters

Verwenden Sie natives JS, um ein neuneckiges Rast...

Detailliertes Installationstutorial für Zabbix 4.04 (basierend auf CentOS 7.6)

1. Vorbereitung vor der Installation: 1.1 JDK ins...

Hinweise zur Verwendung von Textarea

Warum speziell Textbereich erwähnen? Denn der Text...

Einführung in geplante Aufgaben im Linux-System

Inhaltsverzeichnis 1. Planaufgaben anpassen 2. Ze...

MySQL-Speicherung räumlicher Daten und Funktionen

Inhaltsverzeichnis 1. Datentyp 1. Was sind MySQL-...

CSS-Syntax für Tabellenränder

<br /> CSS-Syntax für Tabellenränder Zu den ...

Implementierung des MySQL Shell import_table-Datenimports

Inhaltsverzeichnis 1. Einführung in import_table ...

Detaillierte Erklärung des MySQL-Datenbankindex

Inhaltsverzeichnis 1. Einführung in den MySQL-Ind...