"O servidor MySQL se foi" ao tentar importar um arquivo de despejo grande

11

Estou tentando importar um arquivo de despejo do MySQL.

O arquivo foi criado em um servidor Linux, estou tentando importar no Windows

Entrei na linha de comando e executei:

SOURCE c:/dump.sql

Mas isso parece ter gerado alguns problemas no conjunto de caracteres (especificamente com aspas inteligentes e outras pontuações não padrão).

Foi-me sugerido que eu corro:

mysql -u username -d dbase < c:\dump.sql

Quando tento isso, recebo o erro

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

Um pouco de pesquisa no Google sugeriu que isso estava relacionado à opção max_allowed_packet, mas eu tentei isso e não funcionou. Alguém tem alguma idéia do que isso poderia ser?

Se alguém tiver uma sugestão sobre o problema do conjunto de caracteres, isso também seria útil.

Jeremy French
fonte
Algum feedback? [15 caracteres necessários para comentar]
Mihai Limbăşan

Respostas:

23

Meu primeiro instinto depois de ler a mensagem de erro no título da pergunta foi sugerir o aumento de max_allowed_packet. Você mencionou que tentou "mudar" e não funcionou. Você pode confirmar que modificou corretamente o arquivo de configuração do servidor? Seu fraseado faz parecer que você tentou usá-lo como uma opção de linha de comando na linha de comando do cliente mysql.exe, o que não faria com que o servidor alterasse o comportamento.

Portanto, resumindo, o que você deve tentar é localizar e editar o arquivo my.cnf que seu servidor está usando no momento. Na [mysqld]seção, altere as configurações de max_allowed_packet para algo como

[mysqld]
max_allowed_packet=32M

Não se esqueça de reiniciar o servidor depois de alterar a configuração.

Eu usei 32M (um valor ridiculamente grande) como exemplo. Como sua consulta parece ser enorme, você deve tentar esse valor (ou talvez 64M se tiver RAM suficiente) para ver se funciona.

Outra opção é deixar o servidor como está e alterar o comportamento do cliente usado para gerar o dump SQL. Diga para limitar o tamanho das consultas individuais a menos de 1 MB - isso também deve ser suficiente.

Para mais detalhes, consulte B.1.2.10. Pacote muito grande no manual do MySQL.

Mihai Limbăşan
fonte
1
Sim, eu estava apenas tentando a opção de linha de comando. A razão pela qual achei que isso teve efeito foi que ele deu um erro muito pequeno ao pacote permitido máximo quando o defini como algo menor. Vou tentar sua sugestão na segunda-feira. Obrigado
Jeremy French
De nada - estou quase certo de que isso funcionará. Infelizmente, como em muitos outros programas (ok, a maioria) escritos nos últimos 50 anos, as mensagens de erro do MySQL tendem a ser péssimas e enganosas, se você ainda não está familiarizado com o funcionamento da mente do desenvolvedor :).
Mihai Limbăşan
Fico feliz em ouvir isso - divirta-se.
Mihai Limbăşan
Muito, muito incrível. Eu tive esse mesmo problema, vim aqui fazer a pergunta e bam! resolvido. @ Mihai - o que você receber; não é suficiente :)
Steven Evers
Essa solução nos ajudou quando recebemos esse erro depois de mover nosso MySQL do localhost para um servidor remoto. Muito obrigado!
Lea Cohen
1

No MySQL 5.7.24, era devido à configuração antiga do MySQL 5.6

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

A opção abaixo é obrigatória se a versão do SQL for a mesma 5.7.5 ou superior.

sql_mode=TRADITIONAL

Também existem dois parâmetros max_allowed_packet no /etc/my.cnf, outro é para o mysqldump. Por favor, tome nota do mesmo.

max_allowed_packet = <1G>

Minha instalação está no CentOS7.

Krishna Pandey
fonte
0

Você é capaz de acessar a instância do MySQL no servidor Windows a partir da caixa do Linux?

Em caso afirmativo, você pode executar o comando na caixa linux, com a opção -h para se conectar ao servidor na caixa do windows?

mysql -u username -d dbase -h <windows host> < dump.sql

Isso pode resolver os problemas do conjunto de caracteres , pois você está usando o cliente Linux na caixa original para fazer a importação. (apenas um palpite)

Brent
fonte
0

O que o log do MySQL diz?

Às vezes, esse erro é relatado no cliente se houver um erro incorrigível no servidor. Isso pode ser um indicador de corrupção no disco das tabelas do banco de dados.

Dave Cheney
fonte
-1

Sua conta possui uma senha? Talvez você precise adicionar a opção -p:

mysql -u username -p -d dbase < c:\dump.sql
Brent
fonte
Ah - provavelmente não, pois parece ter falhado na importação.
Brent