Fehler beim Wiederherstellen einer Datenbank aus einem SQL-Speicherauszug

14

Ich bin extrem neu in MySQL und führe es unter Windows aus. Ich versuche, eine Datenbank aus einem Dumpfile in MySQL wiederherzustellen, erhalte jedoch die folgende Fehlermeldung:

$ >mysql -u root -p -h localhost -D database -o < dump.sql
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: 'SQLite format 3'.

Ich habe es versucht, $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlaber das ergab Folgendes: ERROR at line 1: Unknown command '\☻'. Es handelt sich um eine 500-MB-Dump-Datei. Wenn ich den Inhalt mit gVIM ansehe, sehe ich nur Ausdrücke und Daten, die nicht verständlich sind. Auch wenn ich versuche, Inhalte aus der Datei zu kopieren, um hier etwas zu posten, kann ich nur Folgendes kopieren: SQLite format 3Diese Art von scheint seltsam.

user1434997
quelle
1
Waren Sie derjenige, der das Backup gemacht hat?
Menelaos Bakopoulos
Ich bekam diesen Fehler, bekam aber einen neuen MySQL-Dump und versuchte erneut zu importieren, und es funktionierte einwandfrei. Unser MySQL-Dump besteht aus zwei komprimierten Teilen, die verkettet und anschließend dekomprimiert werden müssen. Ich denke, das anfängliche Entpacken wurde unterbrochen, was zu einer .sqlDatei mit seltsamen Zeichen und Kodierungen führte. Der zweite Versuch hat gut funktioniert.
Joshua Pinter

Antworten:

18

Der Verweis auf --binary-mode(eingeführt in MySQL 5.6.3) ist wahrscheinlich eine Ablenkung.

Es hört sich nicht so an, als würden Sie sich dort mit einer mysqldump-Ausgabedatei befassen. Probieren Sie das fileDienstprogramm.

shell> file dumpfile.sql
dumpfile.sql: ASCII text

Wenn du das nicht verstehst ASCII text Antwort erhalten, haben Sie es entweder mit etwas zu keine Speicherauszugsdatei vorliegt mysqldump, oder mit etwas, das komprimiert wurde (z. B. mit gzip oder bzip2). d müssen vor dem Einleiten dekomprimiert werden mysql.

Wenn du siehst SQLite 3.x database dann haben Sie definitiv Ihre Antwort ... es ist eine rohe SQLite-Datenbank, keine MySQL-Dump-Datei.

In der Tat sind die ersten paar Bytes einer SQLite-Datenbank:

53 51 4C 69 74 65 20 66  SQLite f
6F 72 6D 61 74 20 33 00  ormat 3^@

Beachten Sie, dass das 16. Oktett hier 0x00 ist, was die ERROR: ASCII '\0' appeared in the statement...Nachricht in diesem Fall erklärt. Der entsprechende Vorschlag --binary-modeist ein Fehlalarm.


Windows-Benutzer: Das Dienstprogramm 'file' ist ein Tool von Unix, die Windows-Version finden Sie hier .

Michael - sqlbot
quelle
Ich erhalte diesen Fehler und file MySQL.sqler kehrt beim Ausführen zurück UTF-8 Unicode text, with very long lines. Irgendwelche Ideen?
Joshua Pinter
@ JoshuaPinter versuchen less -S MySQL.sql. Was siehst du? Sieht es aus wie eine MySQL-Dump-Datei? Sie sind größtenteils für Menschen lesbar. ( qZum Verlassen verwenden.)
Michael - sqlbot
1
Ja, die erste Zeile sieht so aus -- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64). Wenn Sie mit der Leertaste nach unten gehen, werden typische MySQL-Anweisungen angezeigt. Wenn ich jedoch weiter nach unten gehe, friert es in einer bestimmten Zeile ein. Dieselbe Zeile, die in der Fehlermeldung angezeigt wurde. Ich untersuchte es weiter und stellte fest, dass der MySQL-Speicherauszug beim ersten Mal nicht richtig entpackt worden war. Ich bin nicht sicher, was schief gelaufen ist, aber wenn ich es erneut entpacke, funktioniert es einwandfrei. Ich habe hier eine Antwort für andere hinzugefügt : stackoverflow.com/a/51432853/293280 Vielen Dank für Ihre Hilfe und Ihre schnelle Antwort. 👍
Joshua Pinter
6

Windows

Erstellen Sie Ihre Dump-Dateien mit diesem Befehl

.\mysqldump [dbname] -r [filename.sql]

Verwenden von:

.\mysqldumb --help

-r, --result-file = name

                 Direct output to a given file. This option should be used
                 in systems (e.g., DOS, Windows) that use carriage-return
                 linefeed pairs (\r\n) to separate text lines. This option
                 ensures that only a single newline is used.
Timothy LJ Stewart
quelle
2
Das ist die richtige Antwort. Powershells> erstellt eine UTF-16-codierte Datei, die Probleme verursacht. Suchen Sie hier nach Powershell: dev.mysql.com/doc/refman/5.7/en/mysqldump.html
SimZal
1

Ich hatte diesen Fehler einmal, nachdem ich mysqldumpauf Windows PowerShell so lief:

mysqldump -u root p my_db --no-data --no-create-db --no-create-info --routines --triggers --skip-opt --set-gtid-purged=OFF > db_objects.sql

Was ich getan habe, war dies zu ändern (Pipe statt Set-Content):

mysqldump -u root p my_db --no-data --no-create-db --no-create-info --routines --triggers --skip-opt --set-gtid-purged=OFF | Set-Content db_objects.sql

Und das Problem ging weg!

Ifedi Okonkwo
quelle
1

Ich auch in PowerShell

Ich bin auf dieses Problem gestoßen, als ich mit PowerShell mysqldump aufgerufen und > die Ausgabe in eine Datei umgeleitet habe . PowerShell verwendete beim Erstellen der Datei die falsche Codierung, und mir wurde derselbe Fehler angezeigt, als ich versuchte, die Datei mit zu importieren angezeigt, mysql .. <exported-file.sql zu importieren

Ich habe festgestellt, dass das Festlegen der Standardcodierung auf UTF8 in der PowerShell-Sitzung dieses Problem behoben hat.

Meine Auflösung - Getestete PowerShell 5.1:

$PSDefaultParameterValues["Out-File:Encoding"] = "utf8";

Beispiel: Wie ich den Export erstellt habe (vereinfacht) :

$cmdExportDB = "mysqldump --host $Host --databases $DbName -u $UID =p$PWD > $fileName";
Invoke-Expression "& $cmdExportDB";

Hinweis: Es wurde festgestellt, dass dies in PowerShell 4.0 nicht funktioniert

In meiner Entwicklungsumgebung wurde 5.1 ausgeführt, aber Prod ist auf 4.0 eingestellt, und mein anfänglicher Fix funktioniert nicht in älteren Versionen von PowerShell.

Verwenden müssen | Set-Content -Encoding UTF8 $fileName

Dies wurde bereits von Ifedi vorgeschlagen

Nikolaus
quelle
0

Jemand hat mir einen komprimierten Gtar geschickt. War mit gtar nicht allzu vertraut, aber es ist ein anderes Komprimierungsformat.

$ file core_production-1432173533.sql.gtar
core_production-1432173533.sql.gtar: gzip compressed data, from Unix, last modified: Wed May 20 21:59:31 2015

Ich konnte es jedoch wie gewohnt dekomprimieren:

tar -zxvf core_production-1432173533.sql.gtar
$ file core_production-1432173533.sql
core_production-1432173533.sql: ASCII text, with very long lines

Und dann könnte ich den Import machen:

mysql -u root -p -h localhost core_production < core_production-1432173533.sql
Donato
quelle
0

Lösung: Extrahieren Sie die Sicherungsdatei und stellen Sie diesen extrahierten SQL-Speicherauszug wieder her.

Beispiel:

Die Sicherung wurde als dump.sql.gz-Datei erstellt und mit gunzip cmd wie folgt extrahiert:

shell>  gunzip dump.sql.gz

Und RESTORE extrahierte dump.sql-Datei.

Ref: Über den MySQL-Binär- und Interaktionsmodus.

http://dev.mysql.com/doc/refman/5.7/de/mysql-command-options.html#option_mysql_binary-mode

Es funktioniert für mich und alles eingestellt !!

lalit
quelle
0

In meinem Fall war die Datei beschädigt. Die Datenbank wurde mit Erweiterung komprimiert, .bz2aber es war tatsächlich ein .tar.bz2.

Das Dekomprimieren mit bzip2 -dkgibt keinen Fehler aus und generiert die Datei. Wenn Sie den Befehl filefür die Dateiausgaben verwenden bzip2 compressed data, block size = 900k, sieht es nicht einmal falsch aus, ihn zu verwenden.

Ich musste verwenden tar -xf myfile.bz2

Monstercode
quelle