SQL 덤프에서 데이터베이스를 복원하는 동안 바이너리 모드 활성화


99

저는 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'.

--binary-modeini 파일 을 넣으려고 시도 했지만 여전히 동일한 오류가 발생합니다. 어떻게해야합니까? 도와주세요.

최신 정보

Nick이 그의 의견에서 제안한 것처럼 시도 $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sql했지만 다음과 같은 결과를 얻었습니다 ERROR at line 1: Unknown command '\☻'. . 500 Mb 덤프 파일이며 gVIM을 사용하여 내용을 보면 이해할 수없는 표현과 데이터 만 볼 수 있습니다.


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

1 행에서 오류가 발생합니다. 알 수없는 명령 '\ ☻'.
user1434997

이 오류가 발생했지만 새로운 MySQL 덤프가 있고 다시 가져 오기를 시도했는데 제대로 작동했습니다. MySQL 덤프는 연결 한 다음 압축을 풀어야하는 두 개의 압축 부분으로 제공됩니다. 초기 압축 해제가 중단 .sql되어 이상한 문자와 인코딩이 있는 파일이 생성되었다고 생각합니다 . 두 번째 시도는 잘 작동했습니다.
Joshua Pinter

답변:


227

파일의 압축을 푼 다음 다시 가져옵니다.


2
압축을 푼 다음 압축을 풉니까?
J86

13
이것이 나를 위해 일한 방법입니다. db.sql.gz의 압축을 풀면 db.sql을 얻고 db.sql.gz로 다시 이름을 바꾸고 압축하지 말고 이름을 바꾼 다음 다시 db.sql로 압축을 풉니 다. 이제 가져올 올바른 파일을 얻을 수 있습니다.
MotsManish

@MotsManish 진심? 농담 인 줄 알았는데 나는 그것을 시도하고 그것이 작동하는지 볼 것이다.
Joshua Pinter

이것은 .tar.bz2Linux 를 사용하여 파일을 압축하고 WinRAR을 사용하여 Windows에서 추출 할 때 작동했습니다 . 나는 그것을 이해하지 못한다 . 좋은.
Shafiq al-Shaar

3
얼굴 손바닥 🤦♀️🤦♀️🤦♀️🤦♀️
Rambatino

59

덤프 파일을 복원하는 Windows에서 동일한 문제가 발생합니다. 내 덤프 파일은 다음과 같이 Windows powershell 및 mysqldump로 생성되었습니다.

mysqldump db > dump.sql

문제는 powershell의 기본 인코딩이 UTF16으로 인해 발생합니다. 더 자세히 살펴보기 위해 GNU의 "파일"유틸리티를 사용할 수 있으며 여기에 Windows 버전이 있습니다 .
내 덤프 파일의 출력은 다음과 같습니다.

CRLF 줄 종결자가있는 매우 긴 줄이있는 Little-endian UTF-16 유니 코드 텍스트입니다.

그런 다음 코딩 시스템의 변환이 필요하며이를 수행 할 수있는 다양한 소프트웨어가 있습니다. 예를 들어 emacs에서

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

그런 다음 utf-8과 같은 필요한 코딩 시스템을 입력하십시오.

그리고 앞으로 더 나은 mysqldump 결과를 얻으려면 다음을 사용하십시오.

mysqldump <dbname> -r <filename>

출력은 mysqldump자체적 으로 처리 되지만 powershell의 리디렉션이 아닙니다.

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


mysqldump <dbname> -r <filename> Windows 또는 DOS 시스템을 사용하는 모든 사람이 이것이 해결책입니다. UTF-8 파일 변환은 산만합니다. -r 옵션을 사용합니다. 출력을 파일 이름으로 지정하고 Windows가 파일에 넣는 CRLF 캐리지 리턴 줄 바꿈 (\ r \ n)을 처리합니다. 여기서 문제가 발생합니다. 우수한 솔루션에 감사드립니다!
Timothy LJ Stewart

4
실제로 메모장 ++를 사용하여 생성 된 파일을 UTF-8로 변환하여 Powershell에서 파일을 만든 후이 문제를 해결했습니다.
Peter Majeed

이 대답은 내가 파고 들지 않았다면 정답을 찾는 데 시간을 절약 할 수 있었을 것입니다. 내가 두 번 이상 찬성 할 수 있기를 바랍니다.
sam452 dec.

@PeterMajeed와 똑같이했습니다. A는 빠른로 변환 - 및 - 저장 메모장 ++ 나 기존 파일 복원 할 수
스티븐 R

20

Windows 컴퓨터에서 이전 단계를 따르십시오.

  1. 메모장에서 파일을 엽니 다.
  2. 다른 이름으로 저장을 클릭하십시오.
  3. 인코딩 유형 UTF-8을 선택합니다.

이제 db를 소싱하십시오.


이것은 Powershell을 통해 mysqldump를 실행하여 만든 SQL 백업 파일에 대해 저에게 효과적이었습니다. Poweshell 출력은 UTF-16입니다. UTF-8로 변경하면 문제가 해결되었고 백업 파일에서 detabase를 복원 할 수있었습니다.
Harry Mantheakis

9

Tar 아카이브 도구를 사용하여 파일을 추출하십시오. 다음과 같이 사용할 수 있습니다.

tar xf example.sql.gz

1
이것이 제 답이었습니다. 처음에는 .sql.gz 파일을 gunzipped 였지만 가져올 때 "binary"오류가 발생했습니다. 파일이 tar / gzipped로 밝혀 졌기 때문에 먼저 파일을 xvftar 한 다음 가져올 수있었습니다.
seanbreeden

8

Notepad ++ (또는 다른 편집기)에서 열고 UTF-8로 변환 / 저장해 보셨습니까?

참조 : 메모장 ++ ansi 인코딩 파일을 utf-8로 변환

또 다른 옵션은 textwrangle을 사용하여 파일을 UTF-8로 열고 저장하는 것입니다. http://www.barebones.com/products/textwrangler/


3
감사. 이것은 나를 위해 트릭을했습니다. NotePad ++에서 파일을 엽니 다. 인코딩> UTF 8로 변환.
Abhijeet Nagre

또한 utf-8 인코딩을 사용하여 기존 .sql 파일을 '다른 이름으로 저장'한 후 파일 크기가 크게 변경되었습니다. 주어진 파일에 비해 거의 절반 크기입니다. 제 경우에는 Windows Power Shell을 사용하여 mysqldump를 가져 왔고 해당 프로그램이 인코딩을 엉망으로 만들었습니다.
tusar

6

다음 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

그리고 문제는 사라졌습니다!


나는 mysqldump를 얻고있다 :에 errno 32를 얻었다
Radu

이 스레드가 당신을 도울 수있을 경우 참조 : stackoverflow.com/questions/22288271/...
Ifedi 오콘

감사합니다. 문제는 이전 mysql 서버에서 이전 버전의 phpmyadmin으로 db를 내 보냈다는 것입니다. 이유는 확실하지 않지만 데이터베이스의 절반은 일반 텍스트로 내보내고 나머지 절반은 gzip으로 내보냈습니다.
Radu

5

dump.sql에 파일 시작 부분에 가비지 문자가 있거나 시작 부분에 빈 줄이있을 수 있습니다.


5

공간이 충분하지 않거나 압축을 푸는 데 시간을 낭비하지 않으려면이 명령을 시도하십시오.

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

compression-sqlfile.gz를 압축 파일 이름으로 바꾸는 것을 잊지 마십시오.

.gz 복원은 위에서 제공 한 명령 없이는 작동하지 않습니다.


3

파일은 dump.sql 문제 여야합니다. Sequel Pro를 사용하여 파일 ecoding을 확인합니다. dump.sql의 가비지 문자 여야합니다.


3

나는 같은 문제가 있었지만 덤프 파일이 실제로 MySQL이 아닌 MSSQL Server 백업이라는 것을 알았습니다.

때로는 레거시 백업 파일이 우리를 속이는 경우가 있습니다. 덤프 파일을 확인하십시오.

터미널 창에서 :

~$ cat mybackup.dmp 

결과는 다음과 같습니다.

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

cat 명령 처리를 중지하려면 다음을 수행하십시오.

CTRL + C



1

Linux에서 gunzip을 사용하여 파일 압축을 풉니 다.

vi unzipsqlfile.sql

esc dd를 사용하여 첫 번째 바이너리 줄을 제거하고 esc shift g를 사용하여 파일 맨 아래로 이동합니다. dd를 사용하여 마지막 바이너리 줄을 제거합니다. esc x 파일을 저장합니다. 그런 다음 다음을 사용하여 mysql로 ​​다시 가져옵니다.

mysql -u 사용자 이름 -p new_database <unzipsqlfile.sql

jetbackup cpanel mysql 백업의 20go sql 파일로 수행했습니다. vi가 큰 파일에 대한 작업을 수행하기를 기다리십시오.



0

이것을 사용하여 오류를 수정할 수 있습니다.

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

2
왜? 질문에 대한 답을 설명해주십시오.
Yunnosch

0

원래 포스터 질문이 해결되었음을 알고 있지만 Google을 통해 여기에 왔고 다양한 답변을 통해 결국 SQL이 가져 오기에 사용 된 것과 다른 기본 문자 집합으로 덤프되었다는 사실을 알게되었습니다. 원래 질문과 동일한 오류가 발생했지만 덤프가 다른 MySQL 클라이언트로 파이프되었으므로 다른 도구로 열어서 다르게 저장하는 경로를 갈 수 없었습니다.

우리에게 솔루션은를 통해 가져 오는 호출뿐만 아니라 --default-character-set=utf8mb4의 호출에도 사용할 수있는 옵션으로 밝혀졌습니다 . 물론, 매개 변수의 값은 동일한 문제에 직면 한 다른 사람들에 따라 다를 수 있습니다. 서버 (또는 도구) 기본 설정이 임의의 문자 집합 일 수 있으므로 동일하게 유지하는 것이 중요합니다.mysqldumpmysql


작성한 전체 문자열을 공유 하시겠습니까? 나는 당신과 같은 상황을 겪고 있습니다. 나는 그것이 나를 위해 작동하지 않는 이유를 여전히 잘 모르겠습니다. 그것은과 웹 사이트의 준비를 만들기 위해 노력하고, 동일한 서버에서의 mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gz다음 사용하여 가져 오려는gunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
로미오 패트릭

우리의 문자열은 다양한 사용자 정의 설정의 거대한 모음이므로 도움이되지 않습니다. 상황을 설명하는 방식으로 내 대답은 적용되지 않습니다. 내 문제는 덤핑 컴퓨터 / 연결이 복원 설정과 다른 설정으로 인해 발생했기 때문에 기본 문자 집합을 지정해야 똑같습니다.
Torque

0

오래되었지만 금!

내 이름을 변경했다 : 맥 OS (카탈 10.15.7)에 그것은 조금 이상한 dump.sql로를 dump.zip그리고 그 후, 나는 그것을 압축 해제 파인더 사용했다 (!). 단말기에 unzip dump.zip데르tar xfz dump.sql[or .gz .tar ...] 는 오류 메시지로 이어집니다.

마지막으로 파인더는 파일을 문제없이 가져올 수 있으므로 압축을 완전히 풀었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.