Mit mysqldump eine Einfügung pro Zeile formatieren?
Dieser wurde gebeten ein paar mal, aber ich kann nicht finden, eine Auflösung zu meinem problem. Grundsätzlich ist bei der Verwendung von mysqldump, ist das integrierte tool für die MySQL-Workbench administration tool, wenn ich den dump einer Datenbank mit erweiterten inserts, bekomme ich massive lange Zeilen von Daten. Ich verstehe, warum er dies macht, wie es beschleunigt fügt durch das einfügen der Daten als einen Befehl (insbesondere auf InnoDB), aber die Formatierung macht es WIRKLICH schwierig, wirklich zu sehen, die Daten in einer dump-Datei, oder vergleichen Sie zwei Dateien mit einem diff-tool, wenn Sie speichern Sie Sie in version control etc. In meinem Fall bin ich der Speicherung in der Versionskontrolle verwenden wir die dump-Dateien zu verfolgen, der unsere Integrations-test-Datenbank.
Jetzt weiß ich, ich kann schalten Sie erweiterte inserts, also werde ich bekommen ein insert pro Zeile, die funktioniert, aber jedes mal, wenn Sie eine Wiederherstellung mit der dump-Datei, es wird langsamer.
Mein Kernproblem ist, dass in den ALTEN Werkzeug, das wir verwendet, um zu verwenden (MySQL-Administrator), wenn ich die dump Datei, es spielt im Grunde die gleiche Sache, aber es FORMATE, die INSERT-Anweisung zu put ein insert pro Zeile, während immer noch das tun, bulk inserts. Also statt:
INSERT INTO `coupon_gv_customer` (`customer_id`,`amount`) VALUES (887,'0.0000'),191607,'1.0300');
erhalten Sie dies:
INSERT INTO `coupon_gv_customer` (`customer_id`,`amount`) VALUES
(887,'0.0000'),
(191607,'1.0300');
Egal welche Optionen ich versuchen, es scheint nicht zu irgendeiner Weise des seins in der Lage, eine Müllkippe wie dieser, das ist wirklich das beste aus beiden Welten. Ja, es dauert ein wenig mehr Platz, aber in Situationen, wo Sie brauchen Menschen, die files zu Lesen, es macht es VIEL mehr nützlich.
Bin ich etwas fehlt und es ist ein Weg, dies zu tun mit MySQLDump, oder haben wir alle Weg rückwärts, und diese Funktion in der alten (jetzt veralteten) MySQL-Administrator-tool nicht mehr verfügbar?
InformationsquelleAutor der Frage Kendall Bennett | 2013-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der Standard mysqldump-format, ist jeder Datensatz weggeworfen, erzeugen eine einzelne INSERT-Befehl in der dump-Datei (D. H., die sql-Datei), die jeweils auf einer eigenen Zeile. Dies ist ideal für die Quellcodeverwaltung (z.B. svn, git, etc.) wie macht es das diff und delta Auflösung viel feiner, und letztlich eine effizientere source-control-Prozess. Allerdings für deutlich zu große Tabellen, ausführen von alle diese Abfragen EINFÜGEN können möglicherweise machen die Wiederherstellung von der sql-Datei sehr langsam vonstatten.
Mit --extended-insert-option behebt mehrere INSERT-problem, indem er alle Datensätze in einer einzelnen INSERT-Befehl in einer einzigen Zeile in die gesicherte sql-Datei. Aber die source-control-Prozess wird sehr ineffizient. Das gesamte Inhaltsverzeichnis ist dargestellt auf einer einzigen Zeile in der sql-Datei, und wenn ein einzelner Charakter ändert sich irgendwo in die Tabelle, Quelle control flag wird die gesamte Zeile (also die gesamte Tabelle), wie das delta zwischen den Versionen. Und, für große Tabellen, die dies negiert, viele Vorteile mit einer formalen source-control-system.
Also ideal, für eine effiziente Wiederherstellung der Datenbank in der sql-Datei, wir wollen jede Tabelle repräsentiert durch ein einzelnes INSERT. Für eine effiziente source-control-Prozess, in der sql-Datei, wir wollen, dass jedes Datensatzes in das INSERT-Befehl, um sich auf seine eigene Linie.
Meine Lösung ist die folgende back-up-Skript:
Das Ergebnis ist eine sql-Datei EINFÜGEN-Befehl format sieht wie folgt aus:
Einige Hinweise:
InformationsquelleAutor der Antwort Todd Blumer
Versuchen, verwenden Sie die folgende option:
--skip-extended-insert
Es funktionierte für mich.
InformationsquelleAutor der Antwort Eric Tan
Wie schon andere gesagt haben mit sed zu ersetzen,"), (" ist das sicher nicht als das erscheinen kann, als Inhalte in der Datenbank.
Es ist ein Weg, dies zu tun aber:
wenn dein Datenbank-name ist my_database führen Sie dann die folgenden:
können Sie auch mit "sed-i" zu ersetzen, in-line.
Hier ist, was dieser code tut:
Hoffe, das hilft
InformationsquelleAutor der Antwort Ace.Di
Und wath zum speichern der dump in eine csv-Datei?
Mit mysqldump mit --tab-option wie folgt:
Registerkarte option produzieren 2-Datei, eine Datei -table_a.sql - enthält nur die Tabelle create-Anweisung und der oher-Datei -table_a.txt - enthält eine tab-separierte Daten.
WIEDERHERSTELLEN
Können Sie wieder Ihre Tabelle über
LOAD DATA
LADEN von DATEN ist in der Regel 20-mal schneller als die Verwendung von INSERT-Anweisungen
Wenn Sie zur Wiederherstellung Ihrer Daten in eine andere Tabelle(für ex überprüfen oder zu test-Zwecken), können Sie eine "Spiegel" - Tabelle:
Laden Sie dann die csv in der nwe-Tabelle.
VERGLEICHEN
Einer csv-Datei in Ihrer einfachsten zu vergleichen oder zu suchen im inneren... auch für non-SQL-technische Anwender können mit gängigen tools wie
Excel
,Access
oder in der Befehlszeile (diff
,comm
etc...)InformationsquelleAutor der Antwort Cristian Porta
Ich befürchte, das wird nicht möglich sein. In der alten MySQL-Administrator schrieb ich den code für dumping-db-Objekte, die sich komplett unabhängig von der mysqldump-tool und damit bot eine Reihe von zusätzlichen Optionen (wie das formatieren oder Fortschritt-feedback). In MySQL Workbench es wurde beschlossen, das mysqldump-tool statt, die, abgesehen davon, dass ein Schritt rückwärts in Bezug auf einige und produzieren version Probleme, den Vorteil hat, bleiben immer up-to-date mit dem server.
Also die kurze Antwort ist: die Formatierung ist derzeit nicht möglich, mit mysqldump.
InformationsquelleAutor der Antwort Mike Lischke
Ich fand dieses tool sehr hilfreich für den Umgang mit erweiterten inserts: http://blog.lavoie.sl/2014/06/split-mysqldump-extended-inserts.html
Analysiert die mysqldump-Ausgabe und fügt Zeilenumbrüche nach jedem Datensatz, aber immer noch mit dem schneller längeren Einsätzen. Im Gegensatz zu einem sed-Skript, sollte es keine Gefahr, dass Leitungen an der falschen Stelle, wenn die regex passiert übereinstimmung in einer Zeichenfolge.
InformationsquelleAutor der Antwort seanf
Ich mochte Ace.Di Lösung mit sed, bis ich diesen Fehler:
sed: Couldn ' T re-allocate memory
So, ich hatte zu schreiben, ein kleines PHP-Skript
PHP-Skript erzeugt auch einen neuen Einsatz für jeden 10.000 Zeilen wieder, um zu vermeiden, Probleme mit dem Speicher.
mysqlconcatinserts.php:
InformationsquelleAutor der Antwort Kjeld Flarup