Erro ao restaurar um banco de dados de um dump SQL

14

Eu sou extremamente novo no MySQL e estou executando no Windows. Estou tentando restaurar um banco de dados de um arquivo de despejo no MySQL, mas recebo o seguinte erro:

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

Eu tentei, $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlmas isso me deu o seguinte ERROR at line 1: Unknown command '\☻'. É um arquivo de despejo de 500 Mb e, quando visualizo seu conteúdo usando o gVIM, tudo o que vejo são expressões e dados que não são compreensíveis. Além disso, quando tento copiar o conteúdo do arquivo para postar aqui, tudo o que posso copiar é: SQLite format 3Isso parece estranho.

user1434997
fonte
1
Você foi quem fez o backup?
Menelaos Bakopoulos
Eu estava recebendo esse erro, mas recebi um novo despejo do MySQL e tentei reimportar e funcionou bem. Nosso despejo do MySQL vem em duas partes compactadas que precisam ser concatenadas e descompactadas. Acho que o descompactação inicial foi interrompido, resultando em um .sqlarquivo com caracteres e codificações estranhos. A segunda tentativa funcionou bem.
19138 Joshua Pinter

Respostas:

18

A referência a --binary-mode(introduzida no MySQL 5.6.3) é provavelmente uma distração.

Não parece que você está lidando com um arquivo de saída do mysqldump. Experimente o fileutilitário.

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

Se você não obtiver a ASCII textresposta, estará lidando com algo que não é um arquivo de despejo mysqldumpou com algo que foi compactado (com gzip ou bzip2, por exemplo), que você ' d precisa descompactar antes de inseri-lo mysql.

Se você vê SQLite 3.x database, definitivamente tem sua resposta ... é um banco de dados SQLite bruto, não um arquivo de despejo do MySQL.

De fato, os primeiros bytes de um banco de dados SQLite são estes:

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

Observe que o 16º octeto aqui é 0x00, explicando a ERROR: ASCII '\0' appeared in the statement...mensagem neste caso. A sugestão --binary-modeapropriada é um alarme falso.


Usuários do Windows: o utilitário 'file' é uma ferramenta do Unix, mas a versão do Windows pode ser encontrada aqui .

Michael - sqlbot
fonte
Estou recebendo esse erro e, ao executá- file MySQL.sqllo, retorna UTF-8 Unicode text, with very long lines. Alguma ideia?
21918 Joshua Pinter
@JoshuaPinter try less -S MySQL.sql. O que você vê? Parece um arquivo de despejo do MySQL? Eles são na maioria das vezes legíveis por humanos. (Use qpara sair.)
Michael - sqlbot
1
Sim, parece a primeira linha -- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64). E descer a barra de espaço mostra instruções típicas do MySQL. No entanto, se eu continuar descendo, ele congela em uma determinada linha. A mesma linha que apareceu na mensagem de erro. Analisei mais a fundo e descobri que o despejo do MySQL não havia sido descompactado corretamente na primeira vez. Não tenho certeza do que deu errado, mas quando eu descompactar, ele funciona bem. Adicionei uma resposta sobre isso aqui para outras pessoas: stackoverflow.com/a/51432853/293280 Muito obrigado por sua ajuda e resposta rápida. Jos
Joshua Pinter
6

janelas

Crie seus arquivos de despejo com este comando

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

Usando:

.\mysqldumb --help

-r, --result-file = name

                 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.
Timothy LJ Stewart
fonte
2
Essa é a resposta correta. O Powershell's cria arquivo codificado em UTF-16 que está causando problemas. Pesquise Powershell aqui: dev.mysql.com/doc/refman/5.7/en/mysqldump.html
SimZal
1

Eu tive esse erro uma vez, depois de executar mysqldumpno Windows PowerShell da seguinte maneira:

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

O que fiz foi alterá-lo para este (canal em vez de 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

E o problema foi embora!

Ifedi Okonkwo
fonte
1

Eu também no PowerShell

Encontrei esse problema quando estava usando o PowerShell para chamar o mysqldump e > canalizar a saída para o arquivo. O PowerShell estava usando a codificação incorreta ao criar o arquivo e recebi o mesmo erro ao tentar importar o arquivo usando o mysql .. <exported-file.sql

Eu descobri que a configuração da codificação padrão como UTF8 na sessão do PowerShell resolveu esse problema.

Minha resolução - Testado PowerShell 5.1:

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

Exemplo: como eu estava produzindo a exportação (simplificada) :

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

Nota: Descoberto isso não funciona no PowerShell 4.0

Meu ambiente de desenvolvimento estava executando o 5.1, mas o prod está em 4.0 e minha correção inicial não funciona nas versões mais antigas do PowerShell.

Precisa usar | Set-Content -Encoding UTF8 $fileName

Isso já foi sugerido por Ifedi

Nicholas
fonte
0

Alguém me enviou um gtar comprimido. Não conhecia muito o gtar, mas é outro formato de compactação.

$ 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

No entanto, consegui descompactá-lo da mesma maneira que de costume:

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

E então eu poderia fazer a importação:

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

No meu caso, o arquivo foi corrompido. O banco de dados foi compactado com extensão, .bz2mas na verdade era um .tar.bz2.

Descomprovar usando bzip2 -dknão gera nenhum erro e gera o arquivo. Usar o comando filenas saídas do arquivo bzip2 compressed data, block size = 900kpara que nem pareça errado usá-lo.

Eu tive que usar tar -xf myfile.bz2

monstercode
fonte