Mengaktifkan mode biner saat memulihkan Database dari dump SQL

96

Saya sangat baru mengenal MySQL dan menjalankannya di Windows. Saya mencoba memulihkan Database dari dumpfile di MySQL, tetapi saya mendapatkan kesalahan berikut:

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

Saya sudah mencoba memasukkan --binary-modefile ini tetapi masih memberikan kesalahan yang sama. Apa yang harus saya lakukan? Tolong bantu.

MEMPERBARUI

Seperti yang disarankan oleh Nick dalam komentarnya saya mencoba $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqltetapi memberi saya yang berikut ERROR at line 1: Unknown command '\☻'. Ini adalah file dump 500 Mb, dan ketika saya melihat isinya menggunakan gVIM, yang bisa saya lihat hanyalah ekspresi dan data yang tidak dapat dipahami.

pengguna1434997
sumber
mysql -u root -p -h localhost -D database --binary-mode -o <dump.sql
Nick
Itu memberi ERROR pada baris 1: Perintah tidak dikenal '\ ☻'.
pengguna1434997
Saya mendapatkan kesalahan ini tetapi mendapat dump MySQL baru dan mencoba mengimpor ulang dan itu berfungsi dengan baik. MySQL dump kami terdiri dari dua bagian zip yang harus digabungkan dan kemudian di-unzip. Saya pikir pembukaan ritsleting awal terputus, menghasilkan .sqlfile dengan karakter dan penyandian yang aneh. Upaya kedua berhasil dengan baik.
Joshua Pinter

Jawaban:

218

Buka zip file, lalu impor lagi.

srinivas.dll
sumber
12
jenius. Terima kasih!
klm123
2
Maksud Anda zip dan kemudian unzip?
J86
13
Beginilah cara kerjanya untuk saya, unzip db.sql.gz, Anda akan mendapatkan db.sql, ganti namanya lagi menjadi db.sql.gz, jangan zip, cukup ganti namanya, lalu unzip lagi ke db.sql dan sekarang Anda akan mendapatkan file yang tepat untuk diimpor.
MotsManish
@MotsInggris? Saya pikir ini adalah lelucon. Saya akan mencobanya dan melihat apakah itu berhasil.
Joshua Pinter
3
wajah telapak tangan 🤦‍♀️🤦‍♀️🤦‍♀️🤦‍♀️
Rambatino
53

Saya menemui masalah yang sama di windows memulihkan file dump. File dump saya dibuat dengan windows PowerShell dan mysqldump seperti:

mysqldump db > dump.sql

Masalahnya berasal dari pengkodean default PowerShell adalah UTF16. Untuk melihat lebih dalam ini, kita dapat menggunakan "file" utilitas dari GNU, dan di sana ada versi jendela di sini .
Output dari file dump saya adalah:

Teks Unicode UTF-16 Little-endian, dengan baris yang sangat panjang, dengan terminator baris CRLF.

Maka diperlukan konversi sistem pengkodean, dan ada berbagai perangkat lunak yang dapat melakukan ini. Misalnya di emacs,

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

lalu masukan sistem koding yang dibutuhkan seperti utf-8.

Dan kedepannya, untuk hasil mysqldump yang lebih baik, gunakan:

mysqldump <dbname> -r <filename>

dan kemudian output ditangani dengan mysqldumpsendirinya tetapi tidak dengan pengalihan PowerShell.

referensi: /dba/44721/error- While-restoring-a-database-from-an-sql-dump

cdarlint.dll
sumber
mysqldump <dbname> -r <filename> siapa saja yang menggunakan sistem Windows atau DOS, inilah solusinya. Konversi file UTF-8 adalah gangguan. Gunakan opsi -r, yang mengarahkan output ke nama file dan menangani CRLF carriage return linefeed (\ r \ n) yang ditempatkan windows di file, di sinilah masalahnya. Terima kasih untuk Solusi Luar Biasa!
Timothy LJ Stewart
4
Pada catatan praktis, saya mengatasi ini setelah membuat file di Powershell dengan mengonversi file yang dihasilkan ke UTF-8 menggunakan Notepad ++.
Peter Majeed
Jawaban ini, jika saya tidak menggali lebih dalam, akan menghemat waktu berjam-jam untuk mencari jawaban yang benar. Seandainya saya bisa memberi suara positif lebih dari sekali.
sam452
Saya melakukan hal yang sama seperti @PeterMajeed. Konversi-dan-simpan cepat dengan NotePad ++ memungkinkan saya memulihkan file yang ada
Stephen R
18

Di mesin Windows, ikuti langkah-langkah sebelumnya.

  1. Buka file di notepad.
  2. Klik Simpan sebagai
  3. Pilih Jenis pengkodean UTF-8.

Sekarang sumber db Anda.

Amit Kumar Rai
sumber
Ini berfungsi untuk saya untuk file cadangan SQL yang telah dibuat dengan menjalankan mysqldump melalui Powershell. Output Poweshell adalah UTF-16. Mengubah ke UTF-8 memecahkan masalah dan memungkinkan saya memulihkan detabase saya dari file cadangan.
Harry Mantheakis
9

Ekstrak file Anda dengan alat pengarsipan Tar. Anda dapat menggunakannya dengan cara ini:

tar xf example.sql.gz
Ghasem Pahlavan
sumber
1
Ini adalah jawaban untuk saya. Pada awalnya, saya melakukan gunzip file .sql.gz yang mengakibatkan error "biner" saat mengimpor. Ternyata file tersebut adalah tar / gzip jadi saya harus melakukan tar xvf file tersebut terlebih dahulu kemudian saya akan mengimpornya.
seanbreeden
8

Sudahkah Anda mencoba membuka di notepad ++ (atau editor lain) dan mengonversi / menyimpan kami ke UTF-8?

Lihat: notepad ++ mengonversi file yang dikodekan ansi ke utf-8

Pilihan lain mungkin menggunakan textwrangle untuk membuka dan menyimpan file sebagai UTF-8: http://www.barebones.com/products/textwrangler/

Perdana Optimal
sumber
3
Terima kasih. Ini melakukan trik untuk saya. Buka file di NotePad ++. Pengkodean> Ubah Ke UTF 8.
Abhijeet Nagre
Perhatikan juga perubahan signifikan dalam ukuran file setelah Anda 'menyimpan Sebagai' file .sql yang ada dengan pengkodean utf-8! Hampir setengah dari ukuran file yang diberikan. Dalam kasus saya, mysqldump diambil menggunakan Windows Power Shell, program itu mengacaukan pengkodean.
tusar
6

Saya mengalami kesalahan ini sekali, setelah menjalankan mysqldumpWindows PowerShell seperti ini:

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

Apa yang saya lakukan adalah mengubahnya menjadi ini (pipa bukan ke 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

Dan masalahnya hilang!

Ifedi Okonkwo
sumber
Saya mendapatkan mysqldump: Mendapat errno 32 pada
Radu
Lihat apakah utas ini mungkin dapat membantu Anda: stackoverflow.com/questions/22288271/…
Ifedi Okonkwo
Terima kasih. Masalahnya adalah saya mengekspor db dengan versi lama phpmyadmin di server mysql lama. Tidak yakin mengapa tetapi setengah dari database diekspor dalam teks yang jelas dan setengah lainnya di-gzip.
Radu
5

Mungkin dump.sql Anda memiliki karakter sampah di awal file Anda atau ada baris kosong di awal.

Subodh Ranadive
sumber
5

Jika Anda tidak memiliki cukup ruang atau tidak ingin membuang waktu untuk mendekompresi, coba perintah ini.

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

Jangan lupa untuk mengganti compressed-sqlfile.gz dengan nama file terkompresi Anda.

.gz restore tidak akan berfungsi tanpa perintah yang saya berikan di atas.

Dewlance
sumber
3

Ini harus Anda mengajukan masalah dump.sql. Gunakan Sequel Pro, periksa file ecoding Anda. Seharusnya ada karakter sampah di dump.sql Anda.

Datty Wang
sumber
3

Saya memiliki masalah yang sama, tetapi menemukan bahwa file dump sebenarnya adalah cadangan MSSQL Server, bukan MySQL.

Terkadang file cadangan lama mempermainkan kita. Periksa file dump Anda.

Di jendela terminal:

~$ cat mybackup.dmp 

Hasilnya adalah:

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

Untuk berhenti memproses perintah cat:

CTRL + C
Hugo Miura
sumber
2

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

Nguyễn Anh Tuấn
sumber
1

File yang Anda coba impor adalah file zip. Buka zip file, lalu coba impor lagi.

Javaid Mir
sumber
1

Di bawah linux Ungzip file Anda menggunakan gunzip Edit file sql unzip Anda menggunakan

vi unzipsqlfile.sql

Hapus baris biner pertama dengan esc dd pergi ke bagian bawah file dengan esc shift g hapus baris biner terakhir dengan dd simpan file esc x: Kemudian impor kembali ke mysql dengan:

mysql -u username -p new_database <unzipsqlfile.sql

Saya melakukan itu dengan file sql 20go dari cadangan mysql cpanel jetbackup. Bersabarlah menunggu vi melakukan pekerjaan untuk file besar

Patrice G
sumber
0

File Anda seharusnya hanya berekstensi .sql, (.zip, .gz .rar) dll tidak akan mendukung. contoh: dump.sql

Ibrahim Akbar
sumber
0

Anda dapat menggunakan ini untuk memperbaiki kesalahan:

zcat {address_sql_database(.tar.gz)} | mysql -u root -p {database_name} --binary-mode
Ali
sumber
2
Mengapa? Tolong jelaskan bagaimana ini menjawab pertanyaan itu.
Yunnosch
0

Saya tahu pertanyaan poster asli telah diselesaikan, tetapi saya datang ke sini melalui Google, dan berbagai jawaban akhirnya membuat saya menemukan bahwa SQL saya dibuang dengan charset default yang berbeda dari yang digunakan untuk mengimpornya. Saya mendapatkan kesalahan yang sama dengan pertanyaan awal, tetapi karena dump kami disalurkan ke klien MySQL lain, kami tidak dapat membuka rute dengan alat lain dan menyimpannya secara berbeda.

Bagi kami, solusinya ternyata adalah --default-character-set=utf8mb4pilihan, untuk digunakan baik pada panggilan mysqldumpmaupun untuk mengimpornya melalui mysql. Tentu saja, nilai parameter mungkin berbeda untuk orang lain yang menghadapi masalah yang sama, yang penting adalah tetap sama, karena pengaturan default server (atau alat) mungkin berupa rangkaian karakter apa pun.

Torsi
sumber
Maukah Anda membagikan seluruh string yang Anda tulis? Karena saya mengalami situasi yang sama dengan Anda. Saya meskipun masih tidak yakin mengapa itu tidak berhasil untuk saya. ada di server yang sama, mencoba membuat pementasan situs web dengan mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gzkemudian mencoba mengimpornya menggunakangunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
Romeo Patrick
String kami tidak akan membantu Anda, karena ini adalah koleksi besar dari berbagai pengaturan kustom. Cara Anda menggambarkan situasi Anda, jawaban saya tidak akan berlaku: masalah saya muncul dari komputer dumping / koneksi menjadi pengaturan yang berbeda dari yang memulihkan, jadi kami perlu menentukan charset default untuk memaksa mereka agar identik.
Torsi
0

Tua tapi emas!

Di MacOS (Catalina 10.15.7) agak aneh: Saya harus mengganti nama saya dump.sqlmenjadi dump.zipdan setelah itu, saya harus menggunakan finder (!) Untuk mengekstraknya. di terminal, unzip dump.zipoder tar xfz dump.sql[or .gz .tar ...]mengarah ke pesan kesalahan.

Akhirnya, finder telah mengekstraknya dengan baik, setelah itu saya dapat mengimpor file tanpa masalah.

Naderio
sumber