Frage

Ich möchte eine Kopie einer Datenbank erstellen mit etwa 40 InnoDB-Tabellen und um 1,5 GB Daten mit mysqldump und MySQL 5.1.

Was sind die besten Parameter (dh: --single-Transaktion)?, Die in der schnellsten Dump und Last der Daten führen

Wie gut, wenn die Daten in die zweite DB geladen, ist es schneller auf:

1) Rohr der Ergebnisse direkt mit der zweiten MySQL Serverinstanz verwendet --compress Option

oder

2) laden Sie es aus einer Textdatei (dh: mysql

War es hilfreich?

Lösung

Rohr es direkt an eine andere Instanz, Disk-Overhead zu vermeiden. Kümmern Sie sich nicht mit --compress, wenn Sie über ein langsames Netzwerk laufen lassen, da auf einem schnellen LAN oder Loopback des Netzwerk-Overhead spielt keine Rolle.

Andere Tipps

SCHNELL einen eingefrorenen Datenbank Dumping:

Die „-T“ Option mit mysqldump Ergebnissen in vielen .SQL und TXT-Dateien im angegebenen Verzeichnis. Dies ist ~ 50% schneller für große Tabellen als eine einzelne SQL-Datei mit INSERT-Anweisungen Dumping (nimmt ein Drittel weniger Wandtaktzeit).

Darüber hinaus gibt es einen großen Vorteil bei der Wiederherstellung, wenn Sie mehrere Tabellen parallel geladen werden können, und mehrere Kerne sättigen. Auf einer 8-Core-Box, könnte dies so viel wie ein 8X Unterschied in der Wand Uhr Zeit, um die Müllhalde, auf der Effizienzsteigerung durch „-T“ bereitgestellt wiederherzustellen. Da „-T“ bewirkt jede Tabelle in einer separaten Datei gespeichert werden, um sie in parallelem Laden ist einfacher als eine massive Aufspalten SQL-Datei auseinander.

Wenn man die oben genannten Strategien zu ihrer logischen Extrem könnte man ein Skript erstellen eine Datenbank weit parallel zu entleeren. Nun, das ist genau das, was die Maakit mk-Parallel-Dump (siehe http: // www .maatkit.org / doc / mk-parallel-dump.html ) und MK-parallel-Wiederherstellungswerkzeuge sind; Perl-Skripte, die mehrere Anrufe auf das zugrunde liegende mysqldump Programm. Allerdings, wenn ich versuchte, diese zu verwenden, hatte ich Mühe, die ohne doppelte Schlüssel Fehler abzuschließen wiederherstellen, die nicht mit Vanille-Dumps trat, so bedenken Sie, dass Ihre milage variieren kann.

Dumping Daten von einer Live-Datenbank (w / o Dienstunterbrechung):

Der --single-Transaktion Schalter ist sehr nützlich für einen Dump einer Live-Datenbank zu nehmen, ohne sie oder nimmt einen Dump einer Slave-Datenbank Quiesce, ohne schuften zu müssen stoppen.

Leider -T ist nicht kompatibel mit --single-Transaktion, so dass Sie nur einen.

Normalerweise die Dump-Einnahme ist viel schneller als es wiederherzustellen. Es gibt immer noch Raum für ein Werkzeug, das die eingehende monolithische Dump-Datei nehmen und bricht es in mehrere Teile parallel geladen werden. Meines Wissens ein solches Werkzeug noch nicht existiert.


Die Übertragung der Dump über das Netzwerk ist in der Regel eine Win

Um einen eingehenden Dump hört auf einem Host laufen:

nc -l 7878 > mysql-dump.sql

Dann auf Ihrer DB-Host ausführen

mysqldump $OPTS | nc myhost.mydomain.com 7878

Dies reduziert Anstoß für die Plattenspindeln auf dem Master aus dem Dump Schreiben auf dem Datenträger leicht Ihre Dump beschleunigen (vorausgesetzt, das Netzwerk schnell genug ist, eine ziemlich sichere Annahme für zwei Hosts im selben Rechenzentrum zu halten,). Plus, wenn Sie einen neuen Slave-Aufbau aus sind, spart dies den Schritt mit der Dump-Datei zu übertragen, nachdem es fertig ist.

Caveats - offensichtlich, müssen Sie genügend Netzwerkbandbreite haben, die Dinge nicht langsam unerträglich nach unten, und wenn die TCP-Sitzung bricht, müssen Sie von vorne anfangen, aber für die meisten Deponien ist dies kein großes Problem

.

Schließlich möchte ich einen Punkt gemeinsamer Verwirrung klären.

Trotz, wie oft sehen Sie diese Flags in mysqldump Beispiele und Tutorials, sie sind überflüssig, weil sie auf standardmäßig aktiviert sind:

  • --opt
  • --add-drop-table
  • --add-locks
  • --create-options
  • --disable-keys
  • --extended-insert
  • --lock-tables
  • --quick
  • --set-charset.

http://dev.mysql.com/doc/refman /5.1/en/mysqldump.html :

  

Die Verwendung von --opt ist die gleiche wie --add-drop-table, --add-Schlösser, --create-Optionen, --disable-Tasten, --extended-Einsatz, --lock-Tabellen , --quick und --set-charset. Alle Optionen, die --opt standardmäßig steht sind für auch, weil --opt ist standardmäßig aktiviert.

Von den Verhaltensweisen „--quick“ ist eines der wichtigsten (überspringt das gesamte Ergebnis in mysqld setzen das Caching vor der ersten Zeile übertragen) und kann mit „mysql“ sein (was nicht --quick einschalten lässt Standardeinstellung) zu dramatisch sbeschleunigen Abfragen, die eine große Ergebnismenge (zB Dumping alle Zeilen einer großen Tabelle) zurück.

Ich denke, es wird viel schneller sein, und Sie Speicherplatz sparen, wenn Sie Datenbankreplikation als zur Verwendung von mysqldump gegenüber. Ich persönlich benutze SQLyog Unternehmen für mein wirklich schweres Heben, aber es auch eine Reihe von andere Werkzeuge , dass die gleichen Dienstleistungen erbringen. es sei denn natürlich möchten Sie nur mysqldump verwenden.

Für innodb, --order-by-primären --extended-Einsatz ist in der Regel die beste Kombination. Wenn Ihr nach jedem letzte bisschen Leistung und das Zielfeld viele CPU-Kerne hat, können Sie die resultierende dumpfile aufzuspalten und parallel Einsätze in vielen Threads zu tun, nach oben / 2 bis innodb_thread_concurrency.

Auch zwicken die innodb_buffer_pool_size auf dem Ziel auf die max Sie sich leisten können, und erhöhen innodb_log_file_size zu 128 oder 256 MB (vorsichtig mit diesem, müssen Sie die alten Log-Dateien entfernen, bevor Sie den MySQL-Daemon sonst Neustart nicht neu gestartet wird)

Mit mk-Parallel-Dump Werkzeug aus Maatkit.

Zumindest würde wahrscheinlich schneller sein. Ich würde vertrauen mysqldump mehr.

Wie oft machst du das? Ist es wirklich eine Anwendung Performance-Problem? Vielleicht sollten Sie einen Weg, dies zu tun, entwerfen, die brauchen nicht die gesamten Daten-Dump (Replikation?)

Auf der anderen Seite, 1.5G ist eine ziemlich kleine Datenbank, so dass es wahrscheinlich nicht viel von einem Problem sein wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top