SQL 덤프에서 데이터베이스를 복원하는 중 오류


14

MySQL을 처음 접했고 Windows에서 실행 중입니다. 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 '\☻'. 500Mb 덤프 파일이며 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다시피 대답은 분명히 있습니다 ... MySQL 덤프 파일이 아닌 원시 SQLite 데이터베이스입니다.

실제로 SQLite 데이터베이스의 처음 몇 바이트는 다음과 같습니다.

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

여기서 16 번째 옥텟은 0x00이며이 ERROR: ASCII '\0' appeared in the statement...경우 메시지를 설명합니다 . --binary-mode적절한 제안 은 잘못된 경보입니다.


Windows 사용자 : 'file'유틸리티는 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

윈도우

이 명령으로 덤프 파일을 작성하십시오.

.\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의>는 문제를 일으키는 UTF-16으로 인코딩 된 파일을 만듭니다. 여기에 파워 쉘 검색 : dev.mysql.com/doc/refman/5.7/en/mysqldump.html
SimZal

1

mysqldumpWindows 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을 사용하여 파일을 가져 오려고 할 때 동일한 오류가 표시되었습니다 .

PowerShell 세션에서 기본 인코딩을 UTF8로 설정하면이 문제가 해결되었습니다.

내 해결 방법-테스트 된 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

누군가 나에게 압축 된 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

그리고 RESTORE는 dump.sql 파일을 추출했습니다.

참조 : 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.