Aktivieren Sie den Binärmodus, während Sie eine Datenbank aus einem SQL-Dump wiederherstellen

91

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 versucht, --binary-modedie INI-Datei einzufügen, aber es gibt immer noch den gleichen Fehler. Was soll ich machen? Bitte helfen Sie.

AKTUALISIEREN

Wie von Nick in seinem Kommentar vorgeschlagen, habe ich es versucht, $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlaber es gab mir Folgendes: ERROR at line 1: Unknown command '\☻'. Es ist eine 500-MB-Dump-Datei, und wenn ich ihren Inhalt mit gVIM ansehe, sehe ich nur Ausdrücke und Daten, die nicht verständlich sind.

user1434997
quelle
mysql -u root -p -h localhost -D Datenbank --binary-mode -o <dump.sql
Nick
Das gibt ERROR in Zeile 1: Unbekannter Befehl '\ ☻'.
user1434997
Ich habe diesen Fehler erhalten, aber einen neuen MySQL-Speicherauszug erhalten und erneut importiert, und es hat einwandfrei funktioniert. Unser MySQL-Dump besteht aus zwei komprimierten Teilen, die verkettet und dann entpackt werden müssen. Ich denke, das anfängliche Entpacken wurde unterbrochen, was zu einer .sqlDatei mit seltsamen Zeichen und Codierungen führte. Der zweite Versuch hat gut funktioniert.
Joshua Pinter

Antworten:

207

Entpacken Sie die Datei und importieren Sie sie erneut.

Srinivas
quelle
12
Genius. Danke dir!
klm123
2
Meinst du zip und dann entpacken?
J86
12
So hat es bei mir funktioniert, entpacken Sie die Datei db.sql.gz, Sie erhalten die Datei db.sql, benennen Sie sie erneut in db.sql.gz um, komprimieren Sie sie nicht, benennen Sie sie einfach um und entpacken Sie sie erneut in db.sql und jetzt erhalten Sie die richtige Datei zum Importieren.
MotsManish
@MotsManish Ernsthaft? Ich dachte, das wäre ein Witz. Ich werde es versuchen und sehen, ob das funktioniert.
Joshua Pinter
3
Gesichtspalme 🤦‍♀️🤦‍♀️🤦‍♀️🤦‍♀️
Rambatino
52

Ich habe das gleiche Problem in Windows beim Wiederherstellen einer Dump-Datei. Meine Dump-Datei wurde mit Windows Powershell und Mysqldump wie folgt erstellt:

mysqldump db > dump.sql

Das Problem ergibt sich aus der Standardcodierung von Powershell: UTF16. Zu schauen tiefer in diese, können wir „Datei“ Dienstprogramm von GNU verwenden, und es gibt eine Windows - Version hier .
Die Ausgabe meiner Dump-Datei lautet:

Little-Endian-UTF-16-Unicode-Text mit sehr langen Zeilen und CRLF-Zeilenabschlüssen.

Dann ist eine Konvertierung des Codierungssystems erforderlich, und es gibt verschiedene Software, die dies tun können. Zum Beispiel in Emacs,

M-x set-buffer-file-coding-system

Geben Sie dann das erforderliche Codierungssystem wie utf-8 ein.

Und in Zukunft verwenden Sie für ein besseres mysqldump-Ergebnis:

mysqldump <dbname> -r <filename>

und dann wird die Ausgabe von mysqldumpselbst behandelt, aber nicht die Umleitung von Powershell.

Referenz: /dba/44721/error-while-restoring-a-database-from-an-sql-dump

cdarlint
quelle
mysqldump <Datenbankname> -r <Dateiname> Jeder, der Windows- oder DOS-Systeme verwendet, ist die Lösung. Die UTF-8-Dateikonvertierung ist eine Ablenkung. Verwenden Sie die Option -r, die die Ausgabe an den Dateinamen weiterleitet und den CRLF-Zeilenumbruch (\ r \ n) verarbeitet, den Windows in Dateien einfügt. Hier liegt das Problem. Vielen Dank für die hervorragende Lösung!
Timothy LJ Stewart
3
In der Praxis habe ich dies umgangen, nachdem ich die Datei in Powershell erstellt hatte, indem ich die generierte Datei mit Notepad ++ in UTF-8 konvertiert habe.
Peter Majeed
Diese Antwort hätte mir Stunden bei der Suche nach der richtigen Antwort erspart, wenn ich mich nicht eingegraben hätte. Ich wünschte, ich könnte mehr als einmal abstimmen.
Sam452
Ich habe das gleiche getan wie @PeterMajeed. Durch schnelles Konvertieren und Speichern mit NotePad ++ konnte ich eine vorhandene Datei wiederherstellen
Stephen R
17

Befolgen Sie auf einem Windows-Computer die vorherigen Schritte.

  1. Datei im Editor öffnen.
  2. Klicken Sie auf Speichern unter
  3. Wählen Sie den Codierungstyp UTF-8.

Geben Sie jetzt Ihre Datenbank ein.

Amit Kumar Rai
quelle
Dies funktionierte für mich für eine SQL-Sicherungsdatei, die durch Ausführen von mysqldump über Powershell erstellt wurde. Die Poweshell-Ausgabe war UTF-16. Der Wechsel zu UTF-8 löste das Problem und ermöglichte mir, meine Detabase aus der Sicherungsdatei wiederherzustellen.
Harry Mantheakis
8

Haben Sie versucht, in Notepad ++ (oder einem anderen Editor) zu öffnen und uns in UTF-8 zu konvertieren / zu speichern?

Siehe: notepad ++ Konvertieren einer ansi-codierten Datei in utf-8

Eine andere Möglichkeit besteht darin, Textwrangle zum Öffnen und Speichern der Datei als UTF-8 zu verwenden: http://www.barebones.com/products/textwrangler/

Menios
quelle
3
Vielen Dank. Das hat den Trick für mich getan. Öffnen Sie die Datei in NotePad ++. Codierung> In UTF konvertieren 8.
Abhijeet Nagre
Beachten Sie auch die signifikante Änderung der Dateigröße, nachdem Sie die vorhandene .sql-Datei mit utf-8-Codierung als gespeichert haben! Fast die Hälfte der Größe im Vergleich zur angegebenen Datei. In meinem Fall wurde der mysqldump mit einer Windows Power Shell erstellt, dieses Programm hat die Codierung durcheinander gebracht.
Tusar
8

Extrahieren Sie Ihre Datei mit dem Tar-Archivierungswerkzeug. Sie können es folgendermaßen verwenden:

tar xf example.sql.gz
Ghasem Pahlavan
quelle
Das war die Antwort für mich. Zuerst habe ich eine .sql.gz-Datei gezippt, die beim Importieren zu dem "binären" Fehler geführt hat. Es stellte sich heraus, dass die Datei tar / gzipped war, also musste ich zuerst die Datei tarvvf, dann konnte ich sie importieren.
Seanbreeden
5

Möglicherweise hat Ihre dump.sql am Anfang Ihrer Datei ein Müllzeichen oder am Anfang steht eine Leerzeile.

Subodh Ranadive
quelle
5

Ich hatte diesen Fehler einmal, nachdem ich unter mysqldumpWindows PowerShell wie folgt ausgeführt wurde:

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 es 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
Ich bekomme mysqldump: Got errno 32 on
Radu
Sehen Sie, ob dieser Thread Ihnen möglicherweise helfen kann: stackoverflow.com/questions/22288271/…
Ifedi Okonkwo
Danke dir. Das Problem war, dass ich die Datenbank mit einer alten Version von phpmyadmin auf einem alten MySQL-Server exportiert habe. Ich weiß nicht warum, aber die Hälfte der Datenbank wurde im Klartext exportiert und die andere Hälfte gzip-ed.
Radu
4

Wenn Sie nicht genügend Speicherplatz haben oder keine Zeit mit dem Dekomprimieren verschwenden möchten, versuchen Sie diesen Befehl.

gunzip < compressed-sqlfile.gz | mysql -u root -p

Vergessen Sie nicht, compress-sqlfile.gz durch Ihren komprimierten Dateinamen zu ersetzen.

Die Wiederherstellung von .gz funktioniert nicht ohne den oben angegebenen Befehl.

Dewlance
quelle
3

Sie müssen das Problem dump.sql archivieren. Verwenden Sie Sequel Pro, um die Ecoding Ihrer Datei zu überprüfen. Es sollten Müllzeichen in Ihrer dump.sql sein.

Datty Wang
quelle
3

Ich hatte das gleiche Problem, stellte jedoch fest, dass es sich bei der Speicherauszugsdatei tatsächlich um eine MSSQL Server-Sicherung handelte, nicht um MySQL.

Manchmal spielen ältere Sicherungsdateien uns einen Streich. Überprüfen Sie Ihre Dump-Datei.

Im Terminalfenster:

~$ cat mybackup.dmp 

Das Ergebnis war:

TAPE??G?"5,^}???Microsoft SQL ServerSPAD^LSFMB8..... etc...

So beenden Sie die Verarbeitung des Befehls cat:

CTRL + C
Hugo Miura
quelle
2

zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

Nguyễn Anh Tuấn
quelle
1

Die Datei, die Sie importieren möchten, ist eine Zip-Datei. Entpacken Sie die Datei und versuchen Sie erneut zu importieren.

Javaid Mir
quelle
1

Unter Linux Ungzip Ihre Datei mit gunzip Bearbeiten Sie Ihre unzip SQL-Datei mit

vi unzipsqlfile.sql

Entfernen Sie die erste Binärzeile mit esc dd. Gehen Sie mit esc shift zum Ende der Datei. G Entfernen Sie die letzte Binärzeile mit dd. Speichern Sie die Datei esc x: Importieren Sie sie dann erneut in mysql mit:

mysql -u Benutzername -p new_database <unzipsqlfile.sql

Ich habe das mit einer 20go SQL-Datei aus einem Jetbackup-Cpanel-MySQL-Backup durchgeführt. Warten Sie geduldig, bis Sie die Arbeit für große Dateien erledigt haben

Patrice G.
quelle
0

Ihre Datei sollte nur die Erweiterung .sql haben (.zip, .gz .rar) usw. wird nicht unterstützt. Beispiel: dump.sql

Ibrahim Akbar
quelle
0

Sie können dies verwenden, um Fehler zu beheben:

zcat {address_sql_database(.tar.gz)} | mysql -u root -p {database_name} --binary-mode
Ali
quelle
2
Warum? Bitte erläutern Sie, wie die Frage beantwortet wird.
Yunnosch
0

Ich weiß, dass die ursprüngliche Posterfrage gelöst wurde, aber ich bin über Google hierher gekommen, und die verschiedenen Antworten haben mich schließlich zu der Erkenntnis geführt, dass mein SQL mit einem anderen Standardzeichensatz als dem zum Importieren ausgegeben wurde. Ich habe den gleichen Fehler wie bei der ursprünglichen Frage erhalten, aber da unser Speicherauszug in einen anderen MySQL-Client geleitet wurde, konnten wir ihn nicht mit einem anderen Tool öffnen und anders speichern.

Für uns stellte sich heraus, dass die Lösung die --default-character-set=utf8mb4Option war, sowohl beim Aufruf mysqldumpals auch beim Aufruf zum Importieren über verwendet zu werden mysql. Natürlich kann der Wert des Parameters für andere Benutzer mit demselben Problem unterschiedlich sein. Es ist nur wichtig, ihn gleich zu halten, da die Standardeinstellung für Server (oder Tools) ein beliebiger Zeichensatz sein kann.

Drehmoment
quelle
Würde es Ihnen etwas ausmachen, die gesamte Zeichenfolge, die Sie geschrieben haben, zu teilen? Da habe ich die gleiche Situation wie du. Ich bin mir aber immer noch nicht sicher, warum es bei mir nicht funktioniert. es ist auf dem gleichen Server, versucht , eine Inszenierung einer Website zu machen mit der sie mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gzdann zu importieren versuchen , mitgunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
Romeo Patrick
Unsere Zeichenfolge wäre für Sie nicht hilfreich, da es sich um eine riesige Sammlung verschiedener benutzerdefinierter Einstellungen handelt. So wie Sie Ihre Situation beschreiben, würde meine Antwort nicht zutreffen: Mein Problem ergab sich daraus, dass der Dumping-Computer / die Dumping-Verbindung ein anderes Setup als das wiederherstellende war. Daher mussten wir den Standard-Zeichensatz angeben, um zu erzwingen, dass sie identisch sind.
Drehmoment