Ich importiere 7 GB foobar.sql
, um eine Tabelle in einer lokalen Datenbank wiederherzustellen.
$ mysql -h localhost -u root 'my_data' < foobar.sql
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.12 Distrib 5.0.96, for apple-darwin9.8.0 (i386) using readline 5.1
Wie kann ich den Fortschritt überwachen?
Antworten:
Wenn Sie nur eine Sicherungsdatei von der CLI unter * nix importieren, z
Installieren Sie dann zunächst den Pipe Viewer auf Ihrem Betriebssystem, und versuchen Sie es dann in etwa so:
Das zeigt einen Fortschrittsbalken, während das Programm läuft.
Es ist sehr nützlich und Sie können es auch verwenden, um eine Schätzung für den Fortschritt von mysqldump zu erhalten.
pv gibt das aus
sqlfile.sql
und übergibt es an mysql (wegen des Pipe-Operators). Während des Dumpings wird der Fortschritt angezeigt. Das coole daran ist, dass mysql die Daten nur so schnell nimmt, wie es sie verarbeiten kann, damit pv den Fortschritt des Imports anzeigen kann. Ich habe keine Beweise. Aber es scheint so. Ich denke, es wird ein Puffer verwendet, aber ich denke,mysql
dass er irgendwann keine Daten mehr liest, wenn er noch in Bearbeitung ist.quelle
sudo hd /dev/sda1 | less
Ihre gesamte Systempartition im Arbeitsspeicher haben können.pv
ist in vielen Fällen nicht besonders genau, da die Verarbeitung einiger SQL- Blöcke mehr Zeit in Anspruch nimmt als anderer. Eine Zeile, bei der es sich um eine einfache Einfügung handelt, wird viel schneller ausgeführt als eine Zeile, die bei einem Index für eine Tabelle erstellt wird, die beispielsweise bereits viele Zeilen enthält. Aber eine ungefähre Vorstellung vom Fortschritt der Ausgabe sollte hilfreich sein, es sei denn, der von verwendete Lesepuffermysql
ist besonders groß (für eine 7-GB-Eingabe müsste der Puffer sehr groß sein, umpv
die Ausgabe überhaupt nicht nützlich zu machen).mysqldump
?Wenn Sie den Import bereits gestartet haben, können Sie diesen Befehl in einem anderen Fenster ausführen, um die aktuelle Größe Ihrer Datenbanken anzuzeigen. Dies kann hilfreich sein, wenn Sie die Gesamtgröße der zu importierenden SQL-Datei kennen.
Gutschrift auf: http://forums.mysql.com/read.php?108,201578,201578
Die MySQL 8.0-Referenz besagt Folgendes zur Genauigkeit:
quelle
Wenn Sie einen mysqldump einer einzelnen Datenbank ausführen, werden alle Tabellen in alphabetischer Reihenfolge gesichert.
Natürlich würde das Neuladen des mysqldump in eine Datenbank auch in alphabetischer Reihenfolge erfolgen.
Sie könnten einfach eine SHOW-PROZESSLISTE erstellen. und finde heraus, welche DB-Verbindung den mysqldump ausführt. Wenn der Dump neu geladen wird, verschwindet die DB-Verbindung.
Wenn Sie wissen möchten, welche Tabellen sich im Dumpfile befinden, führen Sie dies mit foobar.sql aus
UPDATE 2012-05-02 13:53 EDT
Entschuldigung, dass Sie nicht bemerkt haben, dass es nur einen Tisch gibt.
Wenn es sich bei der Tabelle um MyISAM handelt, ist die Überwachung nur aus Sicht des Betriebssystems möglich. Der Grund? Die Tabelle ist während des gesamten Neuladens schreibgeschützt. Was suchst du? Die Größe der
.MYD
und.MYI
Dateien. Natürlich müssen Sie das mit der Tabellengröße vergleichen, die zuvor auf dem anderen DB-Server, von dem Sie importiert haben, vorhanden war.Wenn die Tabelle InnoDB ist und Sie innodb_file_per_table aktiviert haben, ist die einzige Möglichkeit zur Überwachung die Sicht des Betriebssystems. Der Grund? Die Tabelle ist während des gesamten Neuladens schreibgeschützt. Was suchst du? Die Größe der
.ibd
Datei. Natürlich müssen Sie das mit der Tabellengröße vergleichen, die zuvor auf dem anderen DB-Server, von dem Sie importiert haben, vorhanden war.Wenn die Tabelle InnoDB ist und Sie innodb_file_per_table deaktiviert haben, kann nicht einmal die Sicht des Betriebssystems helfen.
UPDATE 2012-05-02 13:56 EDT
Ich habe letztes Jahr so etwas angesprochen: Wie erhalte ich% Fortschritt für "Typ db.sql | mysql"?
UPDATE 2012-05-02 14:09 EDT
Da ein Standard-mysqldump die Tabelle folgendermaßen schreibsperrt:
Dann gibt es keine Möglichkeit, mit mysql einen Fortschritt zu erzielen, bis die Tabellensperre aufgehoben wird.
Wenn Sie aus dem Dumpfile bekommen
LOCK TABLES
undUNLOCK TABLES
kommentieren können ...quelle
.MYD
.MYI
Alle 2 Sekunden sehen Sie, wie die Prozesse ausgeführt werden.
Wenn Sie es weniger häufig möchten, fügen Sie hinzu,
-n x
wobei x die Anzahl der Sekunden ist. 5 Sekunden wären:quelle
Wenn Sie nur prüfen möchten, ob es blockiert ist, können Sie eine Abfrage durchführen
und sehen, was ausgeführt wird.
quelle
Als Lösung für jemanden, der pv nicht zur Arbeit bringen kann oder für den pv Lügen erzählt. Sie können die Größe der Datei ibdata1 in / var / lib / mysql überwachen, die die Daten enthält. Dies führt dazu, dass die Dateigröße in Ihrem Quellserver (oder in etwa) gleich ist.
Wenn es viele Tabellen gibt, können Sie sie auch einzeln in / var / lib / mysql / <Datenbankname> anzeigen.
Ich habe diese Tatsache kürzlich ausgenutzt, als eine Langzeitdatenbank über einen Zeitraum von drei oder vier Jahren eine Protokolldatei von etwa 20 G erstellt hatte. Ich bemerkte, dass die Übertragung Ewigkeiten in Anspruch nahm und verwendete diese Technik, um den Fortschritt zu überwachen.
Ich denke, dass es höchst unwahrscheinlich ist, dass der Tag beginnt, an dem eine Datenbank nicht irgendwo eine Datei enthält. In der Zwischenzeit können Sie die Datei überwachen, um den Fortschritt der Übertragung zu verfolgen. Die von mir vorgeschlagene Methode konnte in der einen oder anderen Form durchgeführt werden, seit die erste SQL-Datenbank geschrieben wurde. Ich hätte nie gedacht, dass es irgendeine "offizielle" Technik ist, auf die ein manueller Jockey zurückgreifen kann. Es wird ein allgemeiner Kenntnisstand in Bezug auf Computer im Allgemeinen und Unix im Besonderen vorausgesetzt.
quelle
Wenn Ihre Datenbank ansonsten leise ist (dh keine anderen Benutzer aktiv sind) und Sie nur Lese- / Schreibaktivitäten sehen möchten, warum nicht einfach so etwas tun:
Sie sehen die Anzahl der Lese- / Schreib- / Einfüge- / Warte- / Aktualisierungsvorgänge.
Wenn Sie zum Beispiel einfügen, sehen Sie etwas wie:
Wobei 28958 die Anzahl der Zeilen ist, die für Ihr Intervall eingefügt wurden (10 Sekunden in meinem Fall).
quelle
Für jemanden, der nach dem Pipe-Viewer-Beispiel sucht
mysqldump
, würden Sie einfach Folgendes tun:Das
-W
Flag weist pv einfach an, auf das erste Byte zu warten, bevor der Fortschritt angezeigt wird (nach der Eingabeaufforderung).quelle
Sie können einen Import im Ordner \ Msql \ Data [DB-Name] überwachen.
quelle
Ok, noch ein Workaround. Dies kann jedoch die schlechteste und ungenaueste Option sein.
Das heißt, hier ist meine Lösung für Windows:
Öffnen Sie den Task-Manager durch Drücken von
Kopieren Sie die Datenträgergeschwindigkeit "mysqld.exe"
Stecken Sie das in einen Taschenrechner wie diesen: https://techinternets.com/copy_calc?do
Schätzen Sie die ETA. Mein Fall war:
Ergebnisse:
quelle
Ich bin so überrascht, dass niemand 'mysql -v' als Option gepostet hat. Wenn es hängen bleibt, stoppt die Ausgabe.
quelle
mysql -v
nicht sinnvoll ist. Wenn Sie 7 GB Daten auf das Terminal übertragen, wird die Wiederherstellung erheblich verlangsamt.