AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 19135
Accepted
KM.
KM.
Asked: 2012-06-13 09:40:25 +0800 CST2012-06-13 09:40:25 +0800 CST 2012-06-13 09:40:25 +0800 CST

Erro do MySQL ao ler pacotes de comunicação

  • 772

Nos logs de erros do MySQL, vejo alguns avisos como estes:

120611 16:12:30 [Warning] Aborted connection 2619503 to db: 'db_name' user: 'user_name' host: 'webapp_hostname' (Got an error reading communication packets)

Não notei nenhuma perda de dados em si, então estou me perguntando o que esse aviso significa ou o que o causa e se como alguém pode resolver o problema que os causa. Isso está no RHEL 6.1 e MySQL Enterprise 5.5.

mysql mysql-5.5
  • 7 7 respostas
  • 188691 Views

7 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-06-13T11:11:02+08:002012-06-13T11:11:02+08:00

    Um dos assassinos silenciosos do MySQL Connections é o MySQL Packet.

    Primeiro, vamos descobrir o que é um pacote MySQL.

    De acordo com a página 99 de "Understanding MySQL Internals" (ISBN 0-596-00957-7) , aqui estão os parágrafos 1-3 explicando os pacotes MySQL:

    O código de comunicação de rede do MySQL foi escrito sob a suposição de que as consultas são sempre razoavelmente curtas e, portanto, podem ser enviadas e processadas pelo servidor em um bloco, que é chamado de pacote na terminologia do MySQL. O servidor aloca a memória para um buffer temporário para armazenar o pacote e solicita o suficiente para acomodá-lo inteiramente. Essa arquitetura requer uma precaução para evitar que o servidor fique sem memória --- um limite no tamanho do pacote, o que essa opção faz.

    O código de interesse em relação a esta opção encontra-se em sql/net_serv.cc . Dê uma olhada em my_net_read() , então siga a chamada para my_real_read() e preste atenção especial em net_realloc() .

    Essa variável também limita o comprimento de um resultado de muitas funções de string. Consulte sql/field.cc e sql/intem_strfunc.cc para obter detalhes.

    Saber isso sobre os Pacotes MySQL permite que um Desenvolvedor/DBA os dimensione para acomodar vários BLOBs dentro de um pacote, mesmo que sejam muito grandes. Definitivamente, um pacote muito pequeno causará problemas para conexões abertas a esse respeito.

    De acordo com a documentação do MySQL

    • Você também pode obter esses erros se enviar uma consulta ao servidor incorreta ou muito grande. Se o mysqld recebe um pacote muito grande ou fora de ordem, ele assume que algo deu errado com o cliente e fecha a conexão. Se você precisar de grandes consultas (por exemplo, se estiver trabalhando com grandes colunas BLOB), poderá aumentar o limite de consultas definindo a variável max_allowed_packet do servidor, que tem um valor padrão de 1 MB. Você também pode precisar aumentar o tamanho máximo do pacote na extremidade do cliente. Mais informações sobre a configuração do tamanho do pacote são fornecidas na Seção C.5.2.10, “Pacote muito grande”.

    • Uma instrução INSERT ou REPLACE que insere muitas linhas também pode causar esses tipos de erros. Qualquer uma dessas instruções envia uma única solicitação ao servidor, independentemente do número de linhas a serem inseridas; assim, muitas vezes você pode evitar o erro reduzindo o número de linhas enviadas por INSERT ou REPLACE.

    RECOMENDAÇÃO

    Tente aumentar o max_allowed_packet para um número muito maior, já que o padrão é 1M. Eu sugeriria cerca de 10 vezes o maior campo TEXT ou BLOB que você tem em seu conjunto de dados atual.

    Para definir o max_allowed_packet para 256M, você pode adicioná-lo a /etc/my.cnf ou my.ini

    [mysqld]
    max_allowed_packet=256M
    

    para cobrir futuras reinicializações do mysqld. Para instalar o valor agora no servidor, execute isto:

    SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
    

    De uma chance !!!

    • 80
  2. Gopinath Karangula
    2012-06-13T10:22:56+08:002012-06-13T10:22:56+08:00

    Principalmente por padrão max_connectionsserá 100. Tente aumentar o parâmetro de configuração para max_connections=400.

    Depois de configurar na my.cnfreinicialização do servidor, ou você pode configurá-lo dinamicamente:

    set @@global.max_connections = 400;
    

    Basta tentar a recomendação acima para evitar essas mensagens de aviso e também garantir que sua rede não tenha quedas de pacotes.

    • 8
  3. Voltaire
    2017-07-07T01:47:38+08:002017-07-07T01:47:38+08:00

    Eu encontrei este problema recentemente depois de mudar do MySQL Enterprise 5.1.x para 5.7.x , sem nenhuma alteração significativa no código do aplicativo, a ' nota ' começou a aparecer.

    No meu caso, a causa raiz para a ' nota ' aparecer foi o programa sair com as conexões ainda abertas. A circunstância de as conexões não serem fechadas foram um pouco mais envolvidas e não relacionadas ao MySQL, mas ACE, threads e TSS.

    • 4
  4. lainatnavi
    2020-03-07T01:34:35+08:002020-03-07T01:34:35+08:00

    Não mencionado aqui, então estou incluindo outra causa desse problema. No meu caso, ao usar o cliente de linha de comando mysql, o erro foi causado por um valor baixo de 30 segundos de interactive_timeout:
    https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html #sysvar_interactive_timeout
    Isso persistirá nas sessões, mas não na reinicialização do servidor.

    SET GLOBAL interactive_timeout=6000;
    
    • 0
  5. Sridevi Subramanian
    2020-10-29T16:28:33+08:002020-10-29T16:28:33+08:00

    Me deparei com o mesmo problema com o MariaDB 10.3.24.

    Parece que o aviso pode ocorrer por todos os outros motivos mencionados aqui e depois alguns.

    No meu caso foi devido a um registro em uma das tabelas do banco de dados que tinha um valor de dicionário vazio para um dos campos.

    +----+--------+
    | id | config |
    +----+--------+
    |  3 | {}     |
    +----+--------+
    

    Como teste, alterei o {}para ()e isso interrompeu a mensagem. Apenas no caso de ajudar alguém.

    • 0
  6. bobmcn
    2021-10-07T06:22:14+08:002021-10-07T06:22:14+08:00

    Recebi esse mesmo erro fazendo uma consulta que retornou várias linhas, processando essas linhas usando rows.Next() (em Golang) e saindo mais cedo devido a um erro não relacionado sem chamar rows.Close(). A parte confusa foi que funcionou nas primeiras vezes, mas acabou falhando, indicando que algum recurso (conexões?) estava sendo usado.

    Eu pude tirar vantagem da declaração de adiamento de Golang, e apenas

    adiar linhas.Close()

    antes de chamar rows.Next(), mas chamar rows.Close() antes de cada saída antecipada do loop rows.Next() também funciona.

    • 0
  7. JeWoPeR
    2015-11-01T10:32:25+08:002015-11-01T10:32:25+08:00

    Esta linha my.ini temporária resolveu meu problema:

    log_error_verbosity=1
    

    Referencie este link

    • -3

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve