เกิดข้อผิดพลาดขณะกู้คืนฐานข้อมูลจาก SQL dump


14

ฉันยังใหม่กับ MySQL และใช้งานบน Windows ฉันพยายามกู้คืนฐานข้อมูลจาก dumpfile ใน MySQL แต่ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

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

ฉันพยายาม$ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlแต่นี่ให้ฉันต่อไปนี้ERROR at line 1: Unknown command '\☻'. เป็นไฟล์ดัมพ์ 500 Mb และเมื่อฉันดูเนื้อหาโดยใช้ gVIM สิ่งที่ฉันเห็นคือนิพจน์และข้อมูลที่ไม่สามารถเข้าใจได้ นอกจากนี้เมื่อฉันพยายามที่จะคัดลอกเนื้อหาจากไฟล์ไปยังโพสต์ที่นี่สิ่งที่ฉันสามารถคัดลอกคือ: SQLite format 3ชนิดนี้ดูเหมือนแปลก


1
คุณเป็นคนที่ทำการสำรองข้อมูลหรือไม่
Menios

ฉันได้รับข้อผิดพลาดนี้ แต่มีการถ่ายโอนข้อมูล MySQL ใหม่และลองนำเข้าอีกครั้งและทำงานได้ดี การถ่ายโอนข้อมูล MySQL ของเรามาในสองส่วนซิปที่จะต้องมีการเชื่อมต่อและซิปแล้ว ฉันคิดว่าการเปิดไฟล์เริ่มต้นถูกขัดจังหวะส่งผลให้.sqlไฟล์มีตัวอักษรแปลก ๆ และการเข้ารหัส ความพยายามครั้งที่สองทำงานได้ดี
Joshua Pinter

คำตอบ:


18

การอ้างอิงถึง--binary-mode(แนะนำใน MySQL 5.6.3) อาจเป็นสิ่งที่ทำให้ไขว้เขว

ดูเหมือนว่าคุณกำลังจัดการกับไฟล์เอาต์พุต mysqldump อยู่ที่นั่น ลองใช้fileยูทิลิตี้

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

หากคุณไม่ได้รับการASCII textตอบสนองคุณกำลังจัดการกับบางอย่างที่ไม่ใช่ไฟล์ดัมพ์จากmysqldumpทั้งหมดหรือคุณกำลังจัดการกับบางสิ่งที่ถูกบีบอัด (เช่น gzip หรือ bzip2 เป็นต้น) ซึ่งคุณ ' d mysqlจำเป็นที่จะต้องยกเลิกการบีบอัดก่อนที่จะเข้าไปในท่อมัน

ถ้าคุณเห็นSQLite 3.x databaseคุณมีคำตอบแน่นอน ... มันเป็นฐานข้อมูล SQLite ดิบไม่ใช่ไฟล์ดัมพ์ของ MySQL

อันที่จริง, ไบต์แรก ๆ ของฐานข้อมูล SQLite คือ:

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

โปรดทราบว่า octet ที่ 16 ที่นี่คือ 0x00 อธิบายถึงERROR: ASCII '\0' appeared in the statement...ข้อความในกรณีนี้ คำแนะนำที่--binary-modeเหมาะสมคือการเตือนที่ผิดพลาด


ผู้ใช้ Windows: แฟ้ม 'ยูทิลิตี้เป็นเครื่องมือจาก Unix แต่รุ่น Windows สามารถพบได้ที่นี่


ฉันได้รับข้อผิดพลาดนี้และเมื่อใช้ผลตอบแทนมันfile MySQL.sql UTF-8 Unicode text, with very long linesความคิดใด ๆ
Joshua Pinter

@JoshuaPinter less -S MySQL.sqlลอง คุณเห็นอะไร? มันดูเหมือนไฟล์ถ่ายโอนข้อมูล MySQL หรือไม่ พวกเขาเป็นส่วนใหญ่ที่มนุษย์อ่านได้ (ใช้qเพื่อออก)
Michael - sqlbot

1
-- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64)ใช่บรรทัดแรกดูเหมือนว่า และเลื่อนลงผ่านแถบพื้นที่แสดงคำสั่ง MySQL ทั่วไป อย่างไรก็ตามถ้าฉันลงไปเรื่อย ๆ มันค้างในบางบรรทัด บรรทัดเดียวกับที่ปรากฏในข้อความแสดงข้อผิดพลาด ฉันตรวจดูเพิ่มเติมและพบว่าการถ่ายโอนข้อมูล MySQL ไม่ได้รับการคลายซิปอย่างถูกต้องในครั้งแรก ไม่แน่ใจว่ามีอะไรผิดพลาด แต่เมื่อฉันเปิดเครื่องรูดอีกครั้งมันทำงานได้ดี ฉันได้เพิ่มคำตอบไว้ที่นี่เพื่อคนอื่น ๆ : stackoverflow.com/a/51432853/293280 ขอบคุณมากสำหรับความช่วยเหลือและการตอบกลับอย่างรวดเร็ว 👍
Joshua Pinter

6

ของ windows

สร้างไฟล์ดัมพ์ของคุณด้วยคำสั่งนี้

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

โดยใช้:

.\mysqldumb --help

-r, --result-file ชื่อ =

                 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
นี่คือคำตอบที่ถูกต้อง Powershell's> สร้างไฟล์ที่เข้ารหัส UTF-16 ซึ่งเป็นสาเหตุของปัญหา ค้นหา Powershell ที่นี่: dev.mysql.com/doc/refman/5.7/en/mysqldump.html
SimZal

1

ฉันมีข้อผิดพลาดนี้ครั้งเดียวหลังจากทำงานmysqldumpบน Windows PowerShell เช่นนั้น:

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

สิ่งที่ฉันทำคือเปลี่ยนเป็นสิ่งนี้ (ไพพ์แทนเป็น 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

และปัญหาก็หายไป!


1

ฉันก็เช่นกันใน PowerShell

ฉันพบปัญหานี้เมื่อฉันใช้ PowerShell เพื่อโทรmysqldumpและ>เพื่อไพพ์เอาต์พุตไปยังไฟล์ PowerShell ใช้การเข้ารหัสที่ไม่ถูกต้องเมื่อสร้างไฟล์และฉันพบข้อผิดพลาดเดียวกันเมื่อฉันพยายามนำเข้าไฟล์โดยใช้mysql .. <export-file.sql

ฉันพบว่าการตั้งค่าการเข้ารหัสเริ่มต้นเป็น UTF8 ในเซสชัน PowerShell แก้ไขปัญหานี้ได้

ความละเอียดของฉัน - PowerShell ทดสอบ 5.1:

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

ตัวอย่าง: ฉันสร้างการส่งออกอย่างไร(ลดความซับซ้อน) :

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

หมายเหตุ: ค้นพบว่าสิ่งนี้ไม่ทำงานบน PowerShell 4.0

สภาพแวดล้อมการพัฒนาของฉันใช้ 5.1 แต่ prod อยู่ที่ 4.0 และการแก้ไขเริ่มต้นของฉันไม่ทำงานใน PowerShell เวอร์ชันเก่า

จำเป็นต้องใช้ | Set-Content -Encoding UTF8 $fileName

เรื่องนี้ได้รับการแนะนำโดย Ifedi


0

คุณได้ลองเปิดใน notepad ++ (หรือเอดิเตอร์อื่น) แล้วแปลง / บันทึกเราเป็น UTF-8 หรือไม่?

ดู: /programming/7256049/notepad-converting-ansi-encoded-file-to-utf-8

ตัวเลือกอื่นอาจใช้ textwrangle เพื่อเปิดและบันทึกไฟล์เป็น UTF-8: http://www.barebones.com/products/textwrangler/


0

มีคนส่ง gtar ที่บีบอัดให้ฉัน ไม่คุ้นเคยแม้แต่กับ gtar แต่เป็นรูปแบบการบีบอัดอื่น

$ 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

อย่างไรก็ตามฉันสามารถคลายขนาดได้ตามปกติ:

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

จากนั้นฉันก็นำเข้าได้:

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

0

วิธีแก้ไข:แตกไฟล์สำรองแล้วกู้คืนดัมพ์ sql ที่แยกออกมา

ตัวอย่าง:

ข้อมูลสำรองถูกใช้เป็นไฟล์ dump.sql.gz และแตกไฟล์โดยใช้ gunzip cmd ดังนี้

shell>  gunzip dump.sql.gz

และเรียกคืนไฟล์ dump.sql ที่แยกออกมา

Ref: เกี่ยวกับ MySQL ไบนารี่และโหมดการโต้ตอบ

http://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html#option_mysql_binary-mode

มันใช้งานได้สำหรับฉันและทุกชุด !!


0

ในกรณีของฉันไฟล์เสียหาย ฐานข้อมูลที่ถูกบีบอัดที่มีนามสกุลแต่มันก็เป็นจริง.bz2.tar.bz2

การถอดรหัสโดยใช้bzip2 -dkจะไม่เกิดข้อผิดพลาดใด ๆ และสร้างไฟล์ การใช้คำสั่งfileในไฟล์เอาต์พุตbzip2 compressed data, block size = 900kจึงไม่ผิดแม้แต่กับการใช้งาน

ฉันต้องใช้ tar -xf myfile.bz2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.