Włącz tryb binarny podczas przywracania bazy danych ze zrzutu SQL

99

Jestem zupełnie nowy w MySQL i używam go w systemie Windows. Próbuję przywrócić bazę danych z pliku zrzutu w MySQL, ale pojawia się następujący błąd:

$ >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'.

Próbowałem --binary-modewstawić plik ini, ale nadal daje ten sam błąd. Co powinienem zrobić? Proszę pomóż.

AKTUALIZACJA

Jak zasugerował Nick w swoim komentarzu, próbowałem, $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlale dało mi to następujące informacje. ERROR at line 1: Unknown command '\☻'. Jest to plik zrzutu 500 MB, a kiedy przeglądam jego zawartość za pomocą gVIM, wszystko, co widzę, to wyrażenia i dane, które nie są zrozumiałe.

user1434997
źródło
mysql -u root -p -h localhost -D database --binary-mode -o <dump.sql
Nick
To daje BŁĄD w linii 1: Nieznane polecenie „\ ☻”.
user1434997
Otrzymałem ten błąd, ale otrzymałem nowy zrzut MySQL i spróbowałem ponownie zaimportować i działało dobrze. Nasz zrzut MySQL składa się z dwóch spakowanych części, które należy połączyć, a następnie rozpakować. Myślę, że początkowe rozpakowywanie zostało przerwane, w wyniku czego powstał .sqlplik z dziwnymi znakami i kodowaniem. Druga próba zadziałała dobrze.
Joshua Pinter

Odpowiedzi:

227

Rozpakuj plik, a następnie ponownie zaimportuj.

srinivas
źródło
2
Czy masz na myśli rozpakowanie, a następnie rozpakowanie?
J86
13
Tak to zadziałało dla mnie, rozpakuj plik db.sql.gz, otrzymasz db.sql, zmień jego nazwę ponownie na db.sql.gz, nie spakuj go, po prostu zmień nazwę, a następnie rozpakuj ponownie do db.sql a teraz uzyskasz właściwy plik do zaimportowania.
MotsManish
@MotsManish Seriously? Myślałem, że to żart. Spróbuję i zobaczę, czy to zadziała.
Joshua Pinter
To zadziałało, gdy skompresowałem plik do .tar.bz2Linuksa i użyłem WinRAR do wyodrębnienia go w systemie Windows. Nie rozumiem . Miły.
Shafiq al-Shaar
3
dłoń twarzy 🤦‍♀️🤦‍♀️🤦‍♀️🤦‍♀️
Rambatino
59

Ten sam problem napotykam przy przywracaniu pliku zrzutu w systemie Windows. Mój plik zrzutu został utworzony za pomocą programu Windows powershell i mysqldump, takiego jak:

mysqldump db > dump.sql

Problem wynika z domyślnego kodowania PowerShell to UTF16. Aby przyjrzeć się temu głębiej, możemy użyć narzędzia „file” GNU i istnieje tutaj wersja dla Windows .
Wynik mojego pliku zrzutu to:

Tekst Little-endian UTF-16 Unicode, z bardzo długimi liniami, z zakończeniami linii CRLF.

Wtedy potrzebna jest konwersja systemu kodowania, a różne programy mogą to zrobić. Na przykład w emacsie

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

następnie wprowadź wymagany system kodowania, taki jak utf-8.

A w przyszłości, aby uzyskać lepszy wynik mysqldump, użyj:

mysqldump <dbname> -r <filename>

a następnie dane wyjściowe są obsługiwane mysqldumpsamodzielnie, ale nie są przekierowywane z programu PowerShell.

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

cdarlint
źródło
mysqldump <dbname> -r <filename> każdy, kto używa systemów Windows lub DOS, to jest rozwiązanie. Konwersja plików UTF-8 jest rozpraszająca. Użyj opcji -r, która kieruje dane wyjściowe do nazwy pliku i obsługuje znak powrotu karetki CRLF do końca wiersza (\ r \ n), który system Windows umieszcza w plikach, tutaj jest problem. Dzięki za doskonałe rozwiązanie!
Timothy LJ Stewart
4
Z praktycznego punktu widzenia obejrzałem to po utworzeniu pliku w Powershell, konwertując wygenerowany plik na UTF-8 za pomocą Notepad ++.
Peter Majeed,
Ta odpowiedź, gdybym się nie zagłębiała, zaoszczędziłaby mi wielu godzin poszukiwania właściwej odpowiedzi. Chciałbym móc zagłosować więcej niż raz.
sam452
Zrobiłem to samo co @PeterMajeed. Szybka konwersja i zapisywanie za pomocą NotePad ++ pozwoliła mi przywrócić istniejący plik
Stephen R
20

Na komputerze z systemem Windows wykonaj powyższe kroki.

  1. Otwórz plik w notatniku.
  2. Kliknij Zapisz jako
  3. Wybierz typ kodowania UTF-8.

Teraz znajdź swoją bazę danych.

Amit Kumar Rai
źródło
To zadziałało dla mnie w przypadku pliku kopii zapasowej SQL, który został utworzony przez uruchomienie mysqldump przez Powershell. Wyjście Poweshell to UTF-16. Zmiana na UTF-8 rozwiązała problem i pozwoliła mi na przywrócenie mojej bazy danych z pliku kopii zapasowej.
Harry Mantheakis
9

Rozpakuj plik za pomocą narzędzia do archiwizacji Tar. możesz to wykorzystać w ten sposób:

tar xf example.sql.gz
Ghasem Pahlavan
źródło
1
To była odpowiedź dla mnie. Na początku spakowałem plik .sql.gz, co spowodowało błąd „binarny” podczas importowania. Okazało się, że plik był tar / gzip, więc musiałem najpierw tar xvf plik, a potem pozwolił mi go zaimportować.
seanbreeden
8

Czy próbowałeś otworzyć w notatniku ++ (lub innym edytorze) i przekonwertować / zapisać nas do UTF-8?

Zobacz: notepad ++ konwertowanie pliku zakodowanego w formacie ANSI do utf-8

Inną opcją może być użycie textwrangle do otwarcia i zapisania pliku jako UTF-8: http://www.barebones.com/products/textwrangler/

Optimal Prime
źródło
3
Dzięki. To załatwiło sprawę dla mnie. Otwórz plik w NotePad ++. Kodowanie> Konwertuj na UTF 8.
Abhijeet Nagre
Zwróć także uwagę na znaczącą zmianę rozmiaru pliku po „zapisaniu jako” istniejącego pliku .sql z kodowaniem utf-8! Prawie połowa rozmiaru w porównaniu z danym plikiem. W moim przypadku mysqldump został pobrany przy użyciu Windows Power Shell, ten program pomieszał kodowanie.
tusar
6

Miałem ten błąd raz, po uruchomieniu mysqldumpna Windows PowerShell w ten sposób:

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

Zmieniłem to na to (potok zamiast na 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

I problem zniknął!

Ifedi Okonkwo
źródło
Dostaję mysqldump: Mam errno 32 na
Radu
Sprawdź, czy ten wątek może Ci pomóc: stackoverflow.com/questions/22288271/…
Ifedi Okonkwo
Dziękuję Ci. Problem polegał na tym, że wyeksportowałem bazę danych ze starą wersją phpmyadmin na starym serwerze mysql. Nie jestem pewien, dlaczego tylko połowa bazy danych została wyeksportowana w postaci zwykłego tekstu, a druga połowa - spakowana.
Radu,
5

Być może Twój plik dump.sql zawiera śmieciowy znak na początku pliku lub na początku znajduje się pusta linia.

Subodh Ranadive
źródło
5

Jeśli nie masz wystarczająco dużo miejsca lub nie chcesz tracić czasu na dekompresję, wypróbuj to polecenie.

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

Nie zapomnij zastąpić skompresowanego pliku sqlfile.gz nazwą pliku skompresowanego.

Przywracanie .gz nie będzie działać bez polecenia, które podałem powyżej.

Dewlance
źródło
3

Musisz zgłosić problem z dump.sql.Użyj Sequel Pro sprawdź swój plik ecoding.To powinny być śmieciowe znaki w twoim dump.sql.

Datty Wang
źródło
3

Miałem ten sam problem, ale okazało się, że plik zrzutu był w rzeczywistości kopią zapasową serwera MSSQL, a nie MySQL.

Czasami starsze pliki kopii zapasowych płatają nam figle. Sprawdź plik zrzutu.

W oknie terminala:

~$ cat mybackup.dmp 

Wynik był następujący:

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

Aby zatrzymać przetwarzanie polecenia cat:

CTRL + C
Hugo Miura
źródło
2

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

Nguyễn Anh Tuấn
źródło
1

Plik, który próbujesz zaimportować, jest plikiem ZIP. Rozpakuj plik, a następnie spróbuj ponownie zaimportować.

Javaid Mir
źródło
1

Pod linuxem Rozpakuj swój plik używając gunzip Edytuj swój rozpakuj plik sql używając

vi unzipsqlfile.sql

Usuń pierwszą linię binarną za pomocą esc dd idź na dół pliku za pomocą esc shift g usuń ostatnią linię binarną za pomocą dd zapisz plik esc x: Następnie ponownie zaimportuj do mysql za pomocą:

mysql -u nazwa użytkownika -p nowa_ baza danych <unzipsqlfile.sql

Wykonałem to za pomocą pliku sql 20go z kopii zapasowej cpanel mysql jetbackup. Bądź cierpliwy, aby czekać vi wykonując zadanie dla dużych plików

Patrice G.
źródło
0

Twój plik powinien mieć tylko rozszerzenie .sql, (.zip, .gz .rar) itp. Nie będzie obsługiwane. przykład: dump.sql

Ibrahim Akbar
źródło
0

Możesz użyć tego, aby naprawić błąd:

zcat {address_sql_database(.tar.gz)} | mysql -u root -p {database_name} --binary-mode
Ali
źródło
2
Czemu? Proszę wyjaśnić, w jaki sposób odpowiada na pytanie.
Yunnosch
0

Wiem, że pierwotne pytanie dotyczące plakatów zostało rozwiązane, ale przyszedłem tutaj przez Google i różne odpowiedzi ostatecznie doprowadziły mnie do odkrycia, że ​​mój SQL został zrzucony z innym domyślnym zestawem znaków niż ten użyty do zaimportowania. Otrzymałem ten sam błąd, co w pierwotnym pytaniu, ale ponieważ nasz zrzut został przesłany do innego klienta MySQL, nie mogliśmy otworzyć go za pomocą innego narzędzia i zapisać go w inny sposób.

Dla nas rozwiązaniem okazała się --default-character-set=utf8mb4opcja do wykorzystania zarówno na wezwanie, mysqldumpjak i na wezwanie do zaimportowania go przez mysql. Oczywiście wartość parametru może się różnić dla innych osób borykających się z tym samym problemem, ważne jest tylko, aby pozostała taka sama, ponieważ domyślnym ustawieniem serwerów (lub narzędzi) może być dowolny zestaw znaków.

Moment obrotowy
źródło
Czy mógłbyś podzielić się całym napisanym przez siebie napisem? Ponieważ mam taką samą sytuację jak ty. Nadal nie jestem pewien, dlaczego to nie działa. znajduje się na tym samym serwerze, próbując wykonać inscenizację strony internetowej, a mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gznastępnie próbując zaimportować ją za pomocągunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
Romeo Patrick
Nasz ciąg nie byłby dla Ciebie pomocny, ponieważ jest to ogromny zbiór różnych ustawień niestandardowych. Sposób, w jaki opisujesz swoją sytuację, moja odpowiedź nie miałaby zastosowania: mój problem wynikał z tego, że zrzucany komputer / połączenie było inną konfiguracją niż ta przywracająca, więc musieliśmy określić domyślny zestaw znaków, aby wymusić ich identyczność.
Torque
0

Stary ale jary!

Na MacOS (Catalina 10.15.7) było trochę dziwnie: musiałem zmienić nazwę mojego pliku dump.sqlna, dump.zipa potem musiałem użyć Findera (!), Aby go rozpakować. w terminalu, unzip dump.zipoder tar xfz dump.sql[or .gz .tar ...]prowadzi do komunikatów o błędach.

W końcu program Finder rozpakował go całkowicie dobrze, po czym mogłem bez problemu zaimportować plik.

Naderio
źródło