2017-02-21 1 views
0

Ich verschiebe eine MySQL-Datenbank von einem jetzt nicht erreichbaren Server zu einem neuen. Der Dump enthält Tabellen, die wiederum binäre Blobs enthalten, was Probleme mit dem MySQL-Kommandozeilen-Client zu verursachen scheint. Beim Versuch, die Datenbank wiederherzustellen, ich die folgende Fehlermeldung erhalten:Wiederherstellen eines MySQL-Dumps mit binären Blobs

ERROR at line 694: Unknown command '\''. 

besichtigte ich die Linie, an der der Fehler auftritt, und fand, dass es eine große Insert-Anweisung ist, die scheint (ca. 900k Zeichen lang sein.) Einfügen binärer Blobs in eine Tabelle.

Nun habe ich thesetwo Fragen gefunden, die mit meinen verbunden scheinen. Beide Antworten haben jedoch mein Problem nicht gelöst. Das Hinzufügen von --default-character-set=utf8 oder sogar --default-caracter-set=latin1 hat nichts geändert und das Erstellen eines Speicherauszugs mit --hex-dump ist nicht möglich, da auf den Quellendatenbankserver nicht mehr zugegriffen werden kann.

Gibt es eine Möglichkeit, wie ich diese Sicherung über den MySQL-Kommandozeilen-Client wiederherstellen kann? Wenn ja, was muss ich tun?

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Vielen Dank im Voraus.

EDIT: Ich benutze MySQL 5.6.35. Zusätzlich zu den oben beschriebenen Versuchen habe ich bereits versucht, die Systemvariable max_allowed_packet auf ihren maximalen Wert zu erhöhen - auf Server und Client -, aber ohne Erfolg.

Antwort

0

Wenn ich mich richtig erinnere, müssen Sie das max_allowed_packet in Ihrer my.cnf auf einen Wert setzen, der groß genug ist, um den größten Datenblob in Ihrer Dump-Datei aufzunehmen, und den MySQL-Server neu starten.

Dann können Sie einen Befehl wie dieses eine Wiederherstellung verwenden:

mysql --max_allowed_packet=64M < your_dumpfile.sql 

Mehr Infos hier: [https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_allowed_packet]

+0

Ah, richtig. Ich habe vergessen, das zu erwähnen, mein Schlechter. Ich habe bereits versucht, das max_allowed_packet auf das Maximum zu setzen (1073741824) und den gleichen Wert zu mysql hinzugefügt, aber nichts hat sich geändert. Fehlermeldung blieb gleich. – mezzodrinker

0

keine Lösung, nur bestätigt, dass ich das gleiche Verhalten mit einem „Text gesehen hatte "Feldtyp, der eine lange JSON-Zeichenfolge enthält. Die von MySQLdump generierte SQL-Datei (backup) hat eine INSERT-Anweisung und schneidet die Länge dieses bestimmten Textfelds auf "about" 64K ab (es gibt viele flüchtige Anführungszeichen/Anführungszeichen und verschiedene UTF-8-Zeichen) - ohne eine Warnung auszugeben dass eine solche Kürzung aufgetreten ist.

Natürlich schlägt die Wiederherstellung in eine JSON-Spalte wegen der vorzeitigen Beendigung der JSON-formatierten Zeichenfolge fehl.

Was in diesem Fall seltsam war, dass die Spalte in der gesicherten Tabelle als TEXT definiert wurde, die tatsächlich auf 64 KB beschränkt sein sollte. Ich habe das Schema für die gesicherte Tabelle auf MEDIUMTEXT geändert. Danach hat MySQLdump diese Zeichenfolge in der INSERT-Anweisung nicht länger als 64 KB abgeschnitten.

Es sieht so aus, als ob MySQLdump nicht nur die gesamte Spalte ausgibt, sondern alles, was die maximale Stringlänge auf Basis von Schemainformationen zulässt, abschneidet und beim Abschneiden KEINE Warnungen ausgibt.

Verwandte Themen