Bir SQL dökümünden bir Veritabanını geri yüklerken ikili modu etkinleştirin


96

MySQL konusunda son derece yeniyim ve onu Windows üzerinde çalıştırıyorum. MySQL'deki bir döküm dosyasından bir Veritabanını geri yüklemeye ç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'.

--binary-modeİni dosyasını koymayı denedim ama yine de aynı hatayı veriyor. Ne yapmalıyım? Lütfen yardım et.

GÜNCELLEME

Nick'in yorumunda önerdiği gibi denedim $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlama bana şu verdi ERROR at line 1: Unknown command '\☻'. Bu 500 Mb'lik bir döküm dosyası ve içeriğini gVIM kullanarak görüntülediğimde, görebildiğim tek şey anlaşılmaz ifadeler ve veriler.


mysql -u root -p -h localhost -D veritabanı --binary-mode -o <dump.sql
Nick

Bu, satır 1'de HATA verir: Bilinmeyen komut '\ ☻'.
user1434997

Bu hatayı alıyordum, ancak yeni bir MySQL dökümü aldım ve yeniden içe aktarmayı denedim ve iyi çalıştı. MySQL dökümümüz, birleştirilmesi ve ardından sıkıştırılması gereken iki sıkıştırılmış parçadan oluşur. Sanırım ilk .sqlsıkıştırmanın kesildiğini ve garip karakterler ve kodlamalar içeren bir dosyayla sonuçlandı . İkinci deneme iyi çalıştı.
Joshua Pinter

Yanıtlar:


217

Dosyayı açın ve ardından tekrar içe aktarın.


12
dahi. Teşekkür ederim!
klm123

2
Zip ve sonra unzip mi demek istiyorsun?
J86

13
Benim için bu şekilde çalıştı, db.sql.gz dosyasını açın, db.sql'yi alacaksınız, yeniden db.sql.gz olarak yeniden adlandıracaksınız, sıkıştırmayın, yeniden adlandırın, sonra tekrar db.sql'ye açın ve şimdi içe aktarılacak doğru dosyayı alacaksınız.
MotsManish

@MotsManish Cidden? Bunun bir şaka olduğunu sanıyordum. Bir şans vereceğim ve işe yarayıp yaramadığına bakacağım.
Joshua Pinter

3
face palm 🤦‍♀️🤦‍♀️🤦‍♀️🤦‍♀️
Rambatino

53

Aynı sorunu bir döküm dosyasını geri yükleyen pencerelerde karşılaşıyorum. Döküm dosyam Windows powershell ve mysqldump ile oluşturuldu:

mysqldump db > dump.sql

Sorun, powershell'in varsayılan kodlamasından kaynaklanıyor UTF16. Derin bu içine bakmak için, GNU "dosyası" programını kullanabilir ve bir windows sürümü vardır burada .
Döküm dosyamın çıktısı:

CRLF hat sonlandırıcıları ile çok uzun satırlara sahip küçük endian UTF-16 Unicode metni.

Daha sonra bir kodlama sistemi dönüşümü gerekir ve bunu yapabilecek çeşitli yazılımlar vardır. Örneğin emacs'de,

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

daha sonra utf-8 gibi gerekli kodlama sistemini girin.

Ve gelecekte, daha iyi bir mysqldump sonucu için şunu kullanın:

mysqldump <dbname> -r <filename>

ve sonra çıktı mysqldumpkendi başına ele alınır, ancak powershell'in yeniden yönlendirilmesi değil.

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


mysqldump <dbname> -r <filename> Windows veya DOS sistemlerini kullanan herkes bu çözümdür. UTF-8 dosya dönüştürme dikkat dağıtıcıdır. Çıktıyı dosya adına yönlendiren ve Windows'un dosyalara koyduğu CRLF satırbaşı satır beslemesini (\ r \ n) işleyen -r seçeneğini kullanın, sorunun kaynağı budur. Mükemmel Çözüm için teşekkürler!
Timothy LJ Stewart

4
Pratik bir notta, Powershell'de oluşturulan dosyayı Notepad ++ kullanarak UTF-8'e dönüştürerek dosyayı oluşturduktan sonra bunu aştım.
Peter Majeed

Bu cevap, araştırmasaydım, bana doğru cevabı aramak için saatler kazandırırdı. Keşke birden fazla oy verebilseydim.
sam452

@PeterMajeed ile aynı şeyi yaptım. NotePad ++ ile hızlı bir dönüştürme ve kaydetme, mevcut bir dosyayı geri yüklememe izin verdi
Stephen R

18

Windows makinesinde, lütfen önceki adımları izleyin.

  1. Dosyayı not defterinde açın.
  2. Farklı kaydet'e tıklayın
  3. Kodlama türünü UTF-8 seçin.

Şimdi db'nizi kaynaklayın.


Bu benim için, Powershell aracılığıyla mysqldump çalıştırılarak oluşturulan bir SQL yedekleme dosyası için çalıştı. Poweshell çıktısı UTF-16 idi. UTF-8'e geçmek sorunu çözdü ve detabase'ımı yedekleme dosyasından geri yüklememe izin verdi.
Harry Mantheakis

9

Tar arşivleme aracıyla dosyanızı çıkarın. şu şekilde kullanabilirsiniz:

tar xf example.sql.gz

1
Bu benim için cevaptı. İlk başta, içe aktarırken "ikili" hatasına neden olan .sql.gz dosyasını gunzipledim. Dosyanın tar / gzip ile sıkıştırıldığı ortaya çıktı, bu yüzden önce xvf dosyasını taramam gerekiyordu , sonra içeri aktarmama izin verdi.
seanbreeden

8

Notepad ++ (veya başka bir düzenleyicide) açmayı ve bizi UTF-8'e dönüştürmeyi / kaydetmeyi denediniz mi?

Bakınız: notepad ++ ansi kodlu dosyayı utf-8'e dönüştürme

Diğer bir seçenek, dosyayı UTF-8 olarak açmak ve kaydetmek için textwrangle kullanmak olabilir: http://www.barebones.com/products/textwrangler/


3
Teşekkürler. Bu benim için hile yaptı. Dosyayı NotePad ++ ile açın. Kodlama> UTF 8'e Dönüştür.
Abhijeet Nagre

Ayrıca, var olan .sql dosyasını utf-8 kodlamasıyla 'Farklı kaydettikten' sonra dosya boyutundaki önemli değişikliğe dikkat edin! Verilen dosyaya kıyasla boyutun neredeyse yarısı. Benim durumumda, mysqldump bir Windows Power Shell kullanılarak alındı, bu program kodlamayı bozdu.
tosar

6

mysqldumpWindows PowerShell'de şu şekilde çalıştırdıktan sonra bu hatayı bir kez yaşadı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

Bunu şu şekilde değiştirdim (Set-Content yerine boru):

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ı!


Mysqldump alıyorum: Hata 32 açık
Radu

Bu
konunun

Teşekkür ederim. Sorun, db'yi eski bir mysql sunucusunda phpmyadmin'in eski bir sürümüyle dışa aktardığımdı. Neden veritabanının yarısının açık metin olarak ve diğer yarısı gzip'lenmiş olarak aktarıldığından emin değilim.
Radu

5

Dump.sql dosyanızın başında çöp karakteri olabilir veya başında boş bir satır olabilir.


5

Yeterli alanınız yoksa veya açmak için zaman harcamak istemiyorsanız, bu komutu deneyin.

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

Compressed-sqlfile.gz dosyasını sıkıştırılmış dosya adınızla değiştirmeyi unutmayın.

.gz geri yükleme, yukarıda verdiğim komut olmadan çalışmayacaktır.


3

Dump.sql problemini dosyalamalısınız.Sequel Pro dosyasını ecoding olarak kontrol edin. Dump.sql dosyanızda gereksiz karakterler olmalıdır.


3

Aynı sorunu yaşadım, ancak döküm dosyasının MySQL değil, aslında bir MSSQL Sunucusu yedeği olduğunu öğrendim.

Bazen eski yedekleme dosyaları bize oyun oynar. Döküm dosyanızı kontrol edin.

Terminal penceresinde:

~$ cat mybackup.dmp 

Sonuç şuydu:

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

Cat komutunu işlemeyi durdurmak için:

CTRL + C


1

İçe aktarmaya çalıştığınız dosya bir zip dosyasıdır. Dosyayı açın ve tekrar içe aktarmayı deneyin.


1

Linux altında gunzip kullanarak dosyanızı açın. Unzip sql dosyanızı şunu kullanarak düzenleyin:

vi unzipsqlfile.sql

Esc dd ile ilk ikili satırı kaldırın esc shift ile dosyanın altına gidin g son ikili satırı dd ile kaldırın esc x dosyasını kaydedin: Sonra mysql'e şu şekilde yeniden aktarın:

mysql -u kullanıcı adı -p new_database <unzipsqlfile.sql

Bunu bir jetbackup cpanel mysql yedeğinden bir 20go sql dosyasıyla gerçekleştirdim. Büyük dosyalar için işi yaparken beklemek için sabırlı olun


0

Dosyanız sadece .sql uzantısı olmalıdır, (.zip, .gz .rar) vb. Desteklemeyecektir. örnek: dump.sql


0

Hatayı düzeltmek için bunu kullanabilirsiniz:

zcat {address_sql_database(.tar.gz)} | mysql -u root -p {database_name} --binary-mode

2
Neden? Lütfen soruyu nasıl cevapladığını açıklayın.
Yunnosch

0

Orijinal poster sorusunun çözüldüğünü biliyorum, ancak buraya Google aracılığıyla geldim ve çeşitli yanıtlar sonunda beni SQL'imin, onu içe aktarmak için kullanılandan farklı bir varsayılan karakter kümesiyle döküldüğünü keşfetmeye yönlendirdi. Orijinal soruyla aynı hatayı aldım, ancak dökümümüz başka bir MySQL istemcisine aktarıldığından, onu başka bir araçla açıp farklı şekilde kaydetme yoluna gidemedik.

Bizim için çözüm olduğu ortaya çıktı --default-character-set=utf8mb4seçeneği çağrısına hem kullanılmak üzere mysqldumpyanı sıra yoluyla almak için çağrı mysql. Tabii ki, parametrenin değeri aynı sorunla karşılaşan diğer kişiler için farklı olabilir, sunucuların (veya araçların) varsayılan ayarı herhangi bir karakter kümesi olabileceğinden, onu aynı tutmak önemlidir.


Yazdığınız dizenin tamamını paylaşır mısınız? Seninle aynı durumu yaşadığım için. Yine de neden benim için çalışmadığından emin değilim. aynı sunucuda, bir web sitesinin aşamalarını oluşturmaya ve mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gzardından onu kullanarak içe gunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
Romeo Patrick

İpimiz, çeşitli özel ayarların büyük bir koleksiyonu olduğu için size yardımcı olmaz. Durumunuzu tanımlama şeklinize göre, cevabım geçerli olmayacak: Benim sorunum, boşaltma bilgisayarının / bağlantısının geri yüklemeden farklı bir kurulumdan kaynaklanıyordu, bu yüzden onları aynı olmaya zorlamak için varsayılan karakter setini belirlememiz gerekiyordu.
Tork

0

Eski ama altın!

MacOS'ta (Catalina 10.15.7) biraz tuhaftı: kendimi dump.sqliçine yeniden adlandırmak zorunda kaldım dump.zipve bundan sonra, onu açmak için bulucu (!) Kullanmam gerekti . terminalde, unzip dump.zipoder tar xfz dump.sql[or .gz .tar ...]hata mesajlarına yol açar.

Son olarak, bulucu onu tamamen iyi bir şekilde açtı, bundan sonra dosyayı sorunsuz bir şekilde içe aktarabilirim.

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.