Kesalahan saat memulihkan Database dari dump SQL


14

Saya sangat baru di 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 mencoba $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqltetapi ini 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. Juga ketika saya mencoba untuk menyalin konten dari file yang akan dikirim di sini, semua yang dapat saya salin adalah: SQLite format 3Jenis ini sepertinya aneh.


1
Apakah Anda yang mengambil cadangan?
Menelaos Bakopoulos

Saya mendapatkan kesalahan ini tetapi mendapat dump MySQL baru dan mencoba mengimpor kembali dan bekerja dengan baik. Dump MySQL kami datang dalam dua bagian zip yang harus digabungkan dan kemudian dibuka ritsleting. Saya pikir unzipping awal terputus, menghasilkan .sqlfile dengan karakter dan penyandian yang aneh. Upaya kedua bekerja dengan baik.
Joshua Pinter

Jawaban:


18

Referensi ke --binary-mode(diperkenalkan di MySQL 5.6.3) mungkin merupakan gangguan.

Tidak terdengar seperti Anda berurusan dengan file output mysqldump, di sana. Coba fileutilitasnya.

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

Jika Anda tidak mendapatkan ASCII textrespons, Anda berurusan dengan sesuatu yang bukan file dump mysqldumpsama sekali, atau Anda berurusan dengan sesuatu yang telah dikompresi (dengan gzip atau bzip2, misalnya), yang Anda Anda harus membuka kompresi sebelum memasukkannya ke dalam pipa mysql.

Jika Anda melihat SQLite 3.x databasemaka Anda pasti memiliki jawaban Anda ... itu adalah database SQLite mentah, bukan file dump MySQL.

Memang, beberapa byte pertama dari database SQLite adalah sebagai berikut:

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

Perhatikan bahwa oktet ke-16 di sini adalah 0x00, menjelaskan ERROR: ASCII '\0' appeared in the statement... pesan dalam kasus ini. Saran yang --binary-modetepat adalah alarm palsu.


Pengguna Windows: utilitas 'file' adalah alat dari Unix, tetapi versi Windows dapat ditemukan di sini .


Saya mendapatkan kesalahan ini dan ketika menjalankannya file MySQL.sqlkembali UTF-8 Unicode text, with very long lines. Ada ide?
Joshua Pinter

@ JoshuaPinter coba less -S MySQL.sql. Apa yang kamu lihat? Apakah ini terlihat seperti file dump MySQL? Mereka sebagian besar dapat dibaca manusia. (Gunakan quntuk keluar.)
Michael - sqlbot

1
Ya, baris pertama terlihat seperti -- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64). Dan bergerak turun melalui spasi menunjukkan instruksi khas MySQL. Namun, jika saya terus turun itu membeku di jalur tertentu. Baris yang sama yang muncul di pesan kesalahan. Saya melihat lebih jauh dan menemukan bahwa dump MySQL belum di-unzip dengan benar pertama kali. Tidak yakin apa yang salah, tetapi ketika saya unzip kembali, itu berfungsi dengan baik. Saya menambahkan jawaban tentang ini di sini untuk orang lain: stackoverflow.com/a/51432853/293280 Terima kasih banyak atas bantuan Anda dan balasan cepat. 👍
Joshua Pinter

6

Windows

Buat file dump Anda dengan perintah ini

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

Menggunakan:

.\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.

2
Ini jawaban yang benar. Powershell's> membuat file yang disandikan UTF-16 yang menyebabkan masalah. Cari Powershell di sini: dev.mysql.com/doc/refman/5.7/en/mysqldump.html
SimZal

1

Saya punya kesalahan ini sekali, setelah berjalan mysqldumpdi Windows PowerShell seperti:

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 (sebagai gantinya menjadi 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!


1

Saya juga di PowerShell

Saya mengalami masalah ini ketika saya menggunakan PowerShell untuk memanggil mysqldump dan > untuk menyalurkan output ke file. PowerShell menggunakan penyandian yang salah ketika membuat file dan saya disajikan dengan kesalahan yang sama ketika saya mencoba untuk mengimpor file menggunakan mysql .. <diekspor-file.sql

Saya menemukan bahwa pengaturan penyandian default ke UTF8 di sesi PowerShell menyelesaikan masalah ini.

Resolusi saya - Diuji PowerShell 5.1:

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

Contoh: Bagaimana saya menghasilkan ekspor (disederhanakan) :

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

Catatan: Ditemukan ini tidak berfungsi di PowerShell 4.0

Lingkungan pengembangan saya berjalan 5.1, tetapi prod di 4.0 dan perbaikan awal saya tidak bekerja di versi PowerShell yang lebih lama.

Perlu digunakan | Set-Content -Encoding UTF8 $fileName

Ini sudah disarankan oleh Ifedi



0

Seseorang mengirimi saya gtar terkompresi. Bahkan tidak terlalu akrab dengan gtar, tetapi ini adalah format kompresi lainnya.

$ 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

Namun, saya bisa mendekompresnya sama seperti biasa:

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

Dan kemudian saya bisa melakukan impor:

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


0

Dalam kasus saya, file tersebut rusak. Basis data dikompresi dengan ekstensi .bz2tetapi sebenarnya a .tar.bz2.

Mendekomposisi menggunakan bzip2 -dktidak menghasilkan kesalahan dan menghasilkan file. Menggunakan perintah filepada output filebzip2 compressed data, block size = 900k sehingga tidak terlihat salah untuk menggunakannya.

Saya harus menggunakan tar -xf myfile.bz2

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.