Erro 1153 do MySQL - Obteve um pacote maior que bytes 'max_allowed_packet'

430

Estou importando um despejo do MySQL e recebendo o seguinte erro.

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

Aparentemente, existem anexos no banco de dados, o que resulta em inserções muito grandes.


Este é na minha máquina local, um Mac com o MySQL 5 instalado a partir do pacote MySQL.

Onde eu mudo max_allowed_packetpara poder importar o despejo?

Há mais alguma coisa que devo definir?

Apenas a execução mysql --max_allowed_packet=32M …resultou no mesmo erro.

kch
fonte
possível duplicata Como alterar o tamanho max_allowed_packet
Muleskinner
@Muleskinner, esta pergunta foi publicada 3 anos antes da que você mencionou e eu estou apontando isso 4 anos após o seu comentário. : p
tiomno 20/02
2
Webyog.com O link está quebrado: 404
Pathros
Aqui , um erro semelhante, "Pacote para consulta é grande (5526600> 1048576).", Foi causado por uma entrada de senha incorreta ao se conectar ao banco de dados MySQL usando o DataGrip 2016.1 por JetBrains, e foi resolvido quando corrigido (usando a senha correta correspondente ao usuário do banco de dados MySQL).
nyedidikeke

Respostas:

589

Você provavelmente precisará alterá-lo para o cliente (você está executando a importação) E o daemon mysqld que está executando e aceitando a importação.

Para o cliente, você pode especificá-lo na linha de comando:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

Além disso, altere o arquivo my.cnf ou my.ini na seção mysqld e defina:

max_allowed_packet=100M

ou você pode executar estes comandos em um console MySQL conectado ao mesmo servidor:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(Use um valor muito grande para o tamanho do pacote.)

Michael Pryor
fonte
Eu tenho um servidor com 16 GB de RAM, é uma má idéia definir max_allowed_packet100 MB?
Webnet
11
FYI - isso me ajudou a resolver um erro DIFERENTE - "o servidor # 2006 foi embora"
itsho 13/12/11
37
Esteja ciente de que o uso de "set global" funciona até o próximo serviço mysql reiniciar.
quer
2
Pule "definir global" e o final ";" ao adicionar esses valores aos arquivos my.ini ou my.cnf. Ex: "net_buffer_length = 1000000" no my.conf.
Rustavore 28/05
3
No CentOS 5, my.cnf está localizado em /etc/my.cnf
Rustavore
124

Como michaelpryor disse, você tem que mudá-lo para tanto o cliente e o servidor mysqld daemon.

Sua solução para a linha de comando do cliente é boa, mas os arquivos ini nem sempre funcionam, dependendo da configuração.

Portanto, abra um terminal, digite mysql para obter um prompt do mysql e execute estes comandos:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

Mantenha o prompt do mysql aberto e execute a execução do SQL da linha de comando em um segundo terminal.

Joshua Fox
fonte
2
Resolveu o problema para mim; a importação que estou fazendo é única e não posso alterar facilmente a configuração. Isso funcionou muito bem. : D
Rob Howard
39

Isso pode ser alterado no seu my.iniarquivo (no Windows, localizado em \ Arquivos de Programas \ MySQL \ MySQL Server) na seção servidor, por exemplo:

[mysqld]

max_allowed_packet = 10M
GHad
fonte
5
em um mac, arquivo obviamente localizado em outro lugar.
kch 18/09/08
2
com certeza, mas a configuração ainda está em algum lugar apesar de eu não saber o local
Ghad
Para mim no Fedora 20 com o MariaDB, colocar essa configuração no final do /etc/my.cnf.d/server.cnf fez o truque. Eu tive que reiniciar o serviço, é claro ... sudo nano systemctl restart mariadb.service
Ray Foss
O arquivo provavelmente seria "my.cnf" e nos sistemas nix, normalmente em / etc / ou / usr / local / etc. Depois de editar, certifique-se de reiniciar o servidor mysql para aplicar as alterações.
Chris
17

Re my.cnf no Mac OS X ao usar o MySQL na distribuição do pacote mysql.com dmg

Por padrão, o my.cnf não é encontrado em nenhum lugar.

Você precisa copiar um /usr/local/mysql/support-files/my*.cnfpara /etc/my.cnfe reiniciar mysqld. (O que você pode fazer no painel de preferências do MySQL, se você o instalou.)

kch
fonte
A configuração padrão no lugar para OSX parece ser meu-medium.cnf, embora o tamanho max_allowed_packet é o mesmo em meu-large.cnf ... até que você começar a mudar as coisas :)
Chris Burgess
No meu caso, /usrl/local/mysql/my.cnf não funcionou até copiá-lo para /etc/my.cnf.
VG
14

No etc / my.cnf, tente alterar o max_allowed _packet e o net_buffer_length para

max_allowed_packet=100000000
net_buffer_length=1000000 

se isso não funcionar, tente mudar para

max_allowed_packet=100M
net_buffer_length=100K 
Amirtha Rajan
fonte
12

A correção é aumentar o max_allowed_packet do daemon MySQL. Você pode fazer isso em um daemon em execução, efetuando login como Super e executando os seguintes comandos.

# mysql -u admin -p

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)

Em seguida, importe seu dump:

gunzip < dump.sql.gz | mysql -u admin -p database
Primoz Rome
fonte
Em qual versão do MySQL você estava executando isso?
crmpicco
6

No CENTOS 6 /etc/my.cnf, na seção [mysqld] a sintaxe correta é:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#
Mike Castro Demaria
fonte
4

Use uma max_allowed_packetvariável que emita um comando como

mysql --max_allowed_packet=32M -u root -p database < dump.sql

Tomasz Tybulewicz
fonte
2
tentei isso, não funcionou. despejo inteiro em 272mb, tentei com max maior que isso.
kch 18/09/08
4

Ligeiramente não relacionado ao seu problema, então aqui está um para o Google.

Se você não mysqldump o SQL, pode ser que seu SQL esteja quebrado.

Acabei de receber esse erro por ter acidentalmente uma literal de cadeia não fechada no meu código. Dedos desleixados acontecem.

Essa é uma mensagem de erro fantástica para obter uma string em fuga, obrigado por esse MySQL!

jplindstrom
fonte
1
Eu também recebi esse erro por causa de SQL quebrado. Mais especificamente, minha tabela possui restrições nulas e meu código INSERTing valores nulos. Em vez de me dar um erro informativo, o MySQL retornou o max_allowed_packeterro. Se ajuda para aqueles que, no futuro, eu estava inserindo usando o API pandasdf.to_sql(...)
Alex Petralia
1

Às vezes, digite a configuração:

max_allowed_packet = 16M

no my.ini não está funcionando.

Tente determinar o my.ini da seguinte maneira:

set-variable = max_allowed_packet = 32M

ou

set-variable = max_allowed_packet = 1000000000

Em seguida, reinicie o servidor:

/etc/init.d/mysql restart
Grzegorz Brzęczyszczykiewicz
fonte
1

É um risco de segurança ter max_allowed_packetum valor mais alto, pois um invasor pode enviar pacotes de tamanho maior e travar o sistema.

Portanto, o valor ideal max_allowed_packetpara ser ajustado e testado.

É melhor mudar quando necessário (usando set global max_allowed_packet = xxx) do que tê-lo como parte do my.ini ou my.conf .

Shiva
fonte
0

Estou trabalhando em um ambiente de hospedagem compartilhada e hospedei um site baseado no Drupal. Não consigo editar o my.iniarquivo ou my.confarquivo também.

Portanto, excluí todas as tabelas relacionadas Cachee, portanto, posso resolver esse problema. Ainda estou procurando uma solução / maneira perfeita para lidar com esse problema.

Editar - Excluir as tabelas criou problemas para mim, porque Drupal esperava que essas tabelas existissem. Então esvaziei o conteúdo dessas tabelas que resolveu o problema.

Raj Pawan Gumdal
fonte
0

Erro:

ERRO 1153 (08S01) na linha 6772: Obteve um pacote maior que bytes 'max_allowed_packet' A operação falhou com o código de saída 1

INQUERIR:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

Valor máximo:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824
Tính Ngô Quang
fonte
-1

Defina max_allowed_packet para o mesmo (ou mais) do que era quando você o jogou com o mysqldump. Se você não puder fazer isso, faça o despejo novamente com um valor menor.

Ou seja, supondo que você o tenha despejado com o mysqldump. Se você usou outra ferramenta, está por sua conta.

MarkR
fonte