SQL dökümünden bir veritabanı geri yüklenirken hata oluştu


14

MySQL için son derece yeniyim ve Windows üzerinde çalıştırıyorum. MySQL bir dumpfile bir veritabanını geri yüklemek için çalışıyorum, ancak aşağıdaki hatayı alıyorum:

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

Denedim $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlama bu bana aşağıdakileri verdi ERROR at line 1: Unknown command '\☻'. 500 Mb dökümü dosyası ve içeriğini gVIM kullanarak görüntülediğimde, görebildiğim tek şey anlaşılabilir olmayan ifadeler ve veriler. Ayrıca burada göndermek için dosyadan içeriği kopyalamaya çalıştığınızda tüm kopyalayabilirsiniz: SQLite format 3Bu tür garip görünüyor.


1
Yedeği alan siz miydiniz?
Menios

Bu hatayı alıyordum ama taze bir MySQL dökümü aldım ve yeniden içe aktarmayı denedim ve iyi çalıştı. MySQL dökümü, birleştirilmesi ve daha sonra sıkıştırılması gereken iki sıkıştırılmış parça halinde gelir. Bence ilk unzipping kesintiye uğradı, .sqlgarip karakterler ve kodlamalar ile bir dosya sonuçlandı . İkinci girişim iyi çalıştı.
Joshua Pinter

Yanıtlar:


18

--binary-mode(MySQL 5.6.3'te tanıtıldı) referansı muhtemelen dikkat dağıtıcıdır.

Bir mysqldump çıktı dosyasıyla uğraşıyormuşsunuz gibi gelmiyor. fileYardımcı programı deneyin .

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

Yanıt almazsanız ASCII text, ya döküm dosyası olmayan bir şeyle uğraşıyorsunuz ya da mysqldumpsıkıştırılmış bir şeyle (örneğin, gzip veya bzip2 ile) ilgileniyorsunuz. d boruya yerleştirmeden önce sıkıştırmak gerekir mysql.

Eğer görüyorsanız SQLite 3.x databasekesinlikle cevabınız var ... bu bir MySQL döküm dosyası değil, ham bir SQLite veritabanı.

Gerçekten de, bir SQLite veritabanının ilk birkaç baytı şunlardır:

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

Buradaki 16. oktet'in 0x00 olduğunu ERROR: ASCII '\0' appeared in the statement...ve bu durumda mesajı açıkladığını unutmayın . --binary-modeUygun öneri yanlış alarmdır.


Windows kullanıcıları: 'dosya' yardımcı programı Unix'ten bir araçtır, ancak Windows sürümü burada bulunabilir .


Bu hatayı alıyorum ve çalıştırırken file MySQL.sqlgeri dönüyor UTF-8 Unicode text, with very long lines. Herhangi bir fikir?
Joshua Pinter

@JoshuaPinter deneyin less -S MySQL.sql. Ne görüyorsun? MySQL döküm dosyasına benziyor mu? Çoğunlukla insan tarafından okunabilir. ( qÇıkmak için kullanın .)
Michael - sqlbot

1
Evet, ilk satır benziyor -- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64). Boşluk çubuğuyla aşağı hareket etmek tipik MySQL talimatlarını gösterir. Ancak, aşağı inmeye devam edersem belli bir çizgide donar. Hata mesajında ​​görünen aynı satır. Ben daha içine baktı ve MySQL dökümü ilk kez düzgün sıkıştırılmamış olduğunu öğrendim. Neyin yanlış gittiğinden emin değilim ama tekrar açtığımda iyi çalışıyor. Buraya başkaları için bir cevap ekledim: stackoverflow.com/a/51432853/293280 Yardımınız ve hızlı yanıtınız için çok teşekkürler. 👍
Joshua Pinter

6

pencereler

Döküm dosyalarınızı bu komutla oluşturun

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

Kullanımı:

.\mysqldumb --help

-r, --result-file = ad

                 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
Bu doğru cevap. Powershell's> sorunlara neden olan UTF-16 kodlu dosya oluşturur. Powershell'i burada arayın: dev.mysql.com/doc/refman/5.7/en/mysqldump.html
SimZal

1

mysqldumpWindows PowerShell üzerinde çalıştırdıktan sonra bir kez bu hatayı aldım :

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

Yaptığım bu (boru yerine Set-Content) değiştirmek oldu:

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

Ve sorun ortadan kalktı!


1

PowerShell'de ben de

Ben mysqldump çağırmak ve > dosya çıkış boru > PowerShell kullanırken bu sorunla karşılaştı . PowerShell dosyayı oluştururken yanlış kodlama kullanıyordu ve dosyayı mysql kullanarak almaya çalıştığımda aynı hatayla sunuldu .. <exported-file.sql

PowerShell oturumunda varsayılan kodlamanın UTF8 olarak ayarlanmasının bu sorunu çözdüğünü buldum.

Çözümüm - Test edilmiş PowerShell 5.1:

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

Örnek: İhracatı nasıl üretiyordum (basitleştirilmiş) :

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

Not: Bunun PowerShell 4.0'da çalışmadığını keşfetti

Geliştirme ortamım 5.1 çalışıyordu, ancak prod 4.0'da ve ilk düzeltmem PowerShell'in eski sürümlerinde çalışmıyor.

Kullanmanız gerekiyor | Set-Content -Encoding UTF8 $fileName

Bu zaten Ifedi tarafından önerildi



0

Birisi bana sıkıştırılmış bir gtar gönderdi. Gtar'a çok aşina değildi, ama başka bir sıkıştırma formatı.

$ 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

Ancak, her zamanki gibi sıkıştırmasını açabildim:

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

Ve sonra ithalat yapabilirdim:

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


0

Benim durumumda, dosya bozuldu. Veritabanı uzantısı ile sıkıştırılmış .bz2ama aslında bir .tar.bz2.

Kullanarak ayrıştırma bzip2 -dkherhangi bir hata vermez ve dosyayı oluşturur. fileDosyadaki komutu kullanmak, bzip2 compressed data, block size = 900konu kullanmak için bile yanlış görünmemesi için çıktı verir.

Kullanmak zorundaydım tar -xf myfile.bz2

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.