Tentei importar um arquivo sql grande através do phpMyAdmin ... Mas ele continuava mostrando erro
'Servidor MySQL desapareceu'
O que fazer?
max_allowed_packet
. Um pouco bruto, mas se isso funcionar, você pode encontrar um valor sensato.
Tentei importar um arquivo sql grande através do phpMyAdmin ... Mas ele continuava mostrando erro
'Servidor MySQL desapareceu'
O que fazer?
max_allowed_packet
. Um pouco bruto, mas se isso funcionar, você pode encontrar um valor sensato.
Respostas:
Como indicado aqui :
Dois motivos mais comuns (e correções) para o servidor MySQL desapareceram (erro 2006):
O tempo limite do servidor expirou e fechou a conexão. Como consertar:
verifique se a variável wait_timeout no arquivo de configuração my.cnf do mysqld é grande o suficiente. No Debian:,
sudo nano /etc/mysql/my.cnf
definawait_timeout = 600
segundos (você pode ajustar / diminuir esse valor quando o erro 2006 acabar), entãosudo /etc/init.d/mysql restart
. Não verifiquei, mas o valor padrão para wait_timeout pode estar em torno de 28800 segundos (8 horas).O servidor descartou um pacote incorreto ou muito grande. Se o mysqld obtiver um pacote muito grande ou incorreto, ele assume que algo deu errado com o cliente e fecha a conexão. Você pode aumentar o limite máximo de tamanho do pacote aumentando o valor de max_allowed_packet no arquivo my.cnf. No Debian:,
sudo nano /etc/mysql/my.cnf
configuremax_allowed_packet = 64M
(você pode ajustar / diminuir esse valor quando o erro 2006 se for), entãosudo /etc/init.d/mysql restart
.
Editar:
Observe que os arquivos de opções do MySQL ainda não têm seus comandos disponíveis como comentários (como no php.ini por exemplo). Então você deve digitar qualquer alteração / emenda em my.cnf
ou my.ini
e colocá-los no mysql/data
diretório ou em qualquer um dos outros caminhos, sob o grupo adequado de opções, tais como [client]
, [myslqd]
, etc. Por exemplo:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Em seguida, reinicie o servidor. Para obter seus valores, digite o cliente mysql:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
consulta MySQL) e o arquivo que estava importando tinha alguns registros muito grandes. Abri o arquivo my.ini (eu estava executando o Windows) e configurei o valor para isto max_allowed_packet = 64M
:, reiniciei o MySQL e executei novamente a importação.
wait_timeout
linha
Para mim, essa solução não deu certo, então eu executei
SET GLOBAL max_allowed_packet=1073741824;
no meu cliente SQL.
Se não conseguir alterar isso com o serviço MYSql em execução, você deve interromper o serviço e alterar a variável no arquivo "my.ini".
Por exemplo:
max_allowed_packet=20M
php.ini
arquivo (como sugerido por @GBD na resposta) e o arquivo de configuração do MySQL my.ini
para fazê-lo funcionar.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
cliente em um e importar o .sql
arquivo grande em outra sessão funcionará bem.
Se você estiver trabalhando no XAMPP, poderá corrigir o problema do MySQL Server com as seguintes alterações.
abra o arquivo my.ini A localização do my.ini é (D: \ xampp \ mysql \ bin \ my.ini)
altere os seguintes valores de variável
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Se você estiver executando com valores padrão, terá muito espaço para otimizar sua configuração do mysql.
O primeiro passo que eu recomendo é aumentar o max_allowed_packet para 128M.
Faça o download do script MySQL Tuning Primer e execute-o. Ele fornecerá recomendações para várias facetas da sua configuração para melhor desempenho.
Também procure ajustar seus valores de tempo limite no MySQL e PHP.
Qual é o tamanho do arquivo que você está importando e é possível importar o arquivo usando o cliente de linha de comando mysql em vez do PHPMyAdmin?
Se você estiver usando o MAMP no OS X, precisará alterar o max_allowed_packet
valor no modelo para MySQL.
Você pode encontrá-lo em: Arquivo> Editar modelo> MySQL my.cnf
Em seguida, basta procurar max_allowed_packet
, alterar o valor e salvar.
Resolvi meu problema com este pequeno arquivo /etc/mysql/my.cnf:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
A outra razão pela qual isso pode acontecer está ficando sem memória. Verifique / var / log / messages e certifique-se de que o my.cnf não esteja configurado para fazer com que o mysqld aloque mais memória do que a sua máquina.
Seu processo mysqld pode realmente ser morto pelo kernel e depois reiniciado pelo processo "safe_mysqld" sem você perceber.
Use top e observe a alocação de memória enquanto ela está em execução para ver qual é o seu espaço livre.
faça um backup do my.cnf antes de alterá-lo.
Eu tive esse erro e outros relacionados, quando importei no arquivo SQL de 16 GB. Para mim, editando o my.ini e definindo o seguinte (com base em várias postagens diferentes) na seção [mysqld]:
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
Se você estiver executando no Windows, acesse o painel de controle, serviços e veja os detalhes do MySQL e verá onde está o my.ini. Depois de editar e salvar o my.ini, reinicie o serviço mysql (ou reinicie o computador).
Se você estiver usando o HeidiSQL, também poderá definir alguns ou todos eles usando isso.
Atualizei "max_allowed_packet" para 1024M, mas ele ainda não estava funcionando. Acontece que meu script de implantação estava em execução:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Certifique-se de especificar explicitamente um número maior na linha de comando, se você o estiver usando dessa maneira.
Se seus dados incluem BLOB
dados:
Observe que uma importação de dados da linha de comando parece obstruir os dados do BLOB, resultando no erro 'O servidor MySQL se foi'.
Para evitar isso, recrie o mysqldump, mas com a --hex-blob
bandeira:
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
que gravará o arquivo de dados com valores hexadecimais, em vez de binários, entre outros textos.
O PhpMyAdmin também tem a opção "Despejar colunas binárias em notação hexadecimal (por exemplo," abc "torna-se 0x616263)", que funciona bem.
Observe que há um bug de longa data (em dezembro de 2015), o que significa que as GEOM
colunas não são convertidas:
Faça backup de uma tabela com uma coluna GEOMETRY usando o mysqldump?
portanto, usar um programa como o PhpMyAdmin parece ser a única solução alternativa (a opção mencionada acima converte corretamente as colunas GEOM).
Se levar muito tempo para falhar, aumente o wait_timeout
variável.
Se falhar imediatamente, amplie a max_allowed_packet
variável; Se ainda não funcionar, verifique se o comando é SQL válido. A minha tinha citações em fuga que estragaram tudo.
Além disso, se possível, considere limitar o número de inserções de um único comando SQL para, digamos, 1000. Você pode criar um script que crie várias instruções a partir de uma única, reintroduzindo a parte INSERT ... a cada n inserção.
Eu recebi um erro semelhante. Para resolver isso, basta abrir o arquivo my.ini. Aqui na linha 36, altere o valor do tamanho máximo permitido do pacote, ou seja. max_allowed_packet = 20M
Certifique-se de que o processo mysqld não seja reiniciado devido a gerenciadores de serviços como systemd.
Eu tive esse problema em vagrant com centos 7. Os ajustes de configuração não ajudaram. Acontece que era o systemd que matava o serviço mysqld toda vez que consumia muita memória.
Hoje tive um erro semelhante ao duplicar o banco de dados (o servidor MySQL desapareceu ...), mas quando tentei reiniciar o mysql.server, obtive um erro
ERROR! The server quit without updating PID ...
Foi assim que resolvi: abri Aplicativos / Utilitários / e executei o Activity Monitor
quit mysqld
foi capaz de resolver o problema do erro com
mysql.server restart
Estou fazendo alguns cálculos grandes que envolvem a conexão mysql para ficar muito tempo e com dados pesados. Eu estava enfrentando este "Mysql ir embora". Então eu tentei otimizar as consultas, mas isso não me ajudou, então eu aumentei o limite de variáveis mysql, que é definido como um valor mais baixo por padrão.
wait_timeout max_allowed_packet
Até o limite que mais lhe convém, deve ser o Qualquer número * 1024 (bytes). você pode fazer login no terminal usando o comando ' mysql -u nome de usuário - p ' e pode verificar e alterar esses limites de variáveis.
Nas contas de hospedagem compartilhada do GoDaddy, é complicado ajustar os arquivos PHP.ini etc. No entanto, existe outra maneira e funcionou perfeitamente para mim. (Acabei de carregar com êxito um arquivo de texto de 3.8Mb .sql, contendo 3100 linhas e 145 cols. Usando o comando IMPORT no phpMyAdmin, estava obtendo que o temido servidor MySQL desaparecesse e não há mais informações.)
Eu descobri que Matt Butcher tinha a resposta certa. Como Matt, eu havia tentado todos os tipos de truques, desde a exportação de bancos de dados MySQL em pedaços pequenos até a criação de scripts que dividem grandes importações em menores. Mas aqui está o que funcionou:
(1) CPANEL ---> ARQUIVOS (grupo) ---> BACKUP
(2a) Sob o título "Parcial Backups" ...
(2b) Em "Download a MySQL Database Backup"
(2c) Escolha seu banco de dados e faça o download de um backup (esta etapa é opcional, mas recomendável)
(3a) Diretamente à direita de 2b, sob o título "Restaurar um backup do banco de dados MySQL"
(3b) Escolha o arquivo de importação .SQL da unidade local
(3c) A verdadeira felicidade será sua (em breve ....) A minha demora 5 segundos
Consegui usar esse método para importar uma única tabela. Nada mais no meu banco de dados foi afetado - mas é contra isso que a etapa (2) acima se destina a proteger.
Notas:
a. Se você não tiver certeza de como criar um arquivo de importação .SQL, use o phpMyAdmin para exportar uma tabela e modificar a estrutura do arquivo.
FONTE: Artigo de Matt Butcher 2010
max_allowed_packet
não ajuda.Eu estava recebendo o mesmo erro que você ao importar um .sql
arquivo para o meu banco de dados via Sequel Pro.
O erro ainda persistiu após levantar o max_allowed_packet
que 512M
então eu corri a importação na linha de comando em vez de:
mysql --verbose -u root -p DatabaseName < MySQL.sql
Ele deu o seguinte erro:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
Encontrei algumas perguntas úteis sobre o StackOverflow:
No meu caso, meu .sql
arquivo estava um pouco corrompido ou algo assim. O dump do MySQL que obtemos vem em dois arquivos zip que precisam ser concatenados juntos e depois descompactados. Acho que o descompactação foi interrompido inicialmente, deixando o arquivo com alguns caracteres e codificações estranhos. Obter um novo despejo do MySQL e descompactá-lo funcionou corretamente para mim.
Só queria adicionar isso aqui caso outras pessoas achem que aumentar a max_allowed_packet
variável não estava ajudando.
Nenhuma das soluções em relação ao tamanho do pacote ou ao tempo limite fez alguma diferença para mim. Eu precisava desativar o ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
Eu tenho o mesmo problema com
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
No arquivo \ xampp \ mysql \ bin \ my.ini do phpmyadmin, obtemos apenas
[mysqldump]
max_allowed_packet=110M
que é apenas para o mysqldump -u root -p dbname. Resolvi meu problema substituindo o código acima por
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M