it-swarm-pt.tech

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

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.

11
Jeremy French

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. No [mysqld] 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 para 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.

23
Mihai Limbăşan

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.

1
Krishna Pandey

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.

0
Dave Cheney

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

Nesse caso, você pode executar o comando na caixa do linux, com a opção -h para conectar-se 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)

0
Brent