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 / 40899
Accepted
user18530
user18530
Asked: 2013-04-26 04:23:07 +0800 CST2013-04-26 04:23:07 +0800 CST 2013-04-26 04:23:07 +0800 CST

MySQL: Erro ao ler pacotes de comunicação

  • 772

Eu recebo este aviso no mysql,

[Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets)

Já passei por alguns tópicos no google e de acordo com alguma sugestão aumentei o max_allowed_packetde 128 to 512 to 1024ainda o mesmo comportamento.

Estou usando o Drupal 7, e sim, existem muitos tipos de dados blob, mas 1024 Mbdeve max_allowed_packetser suficiente na minha opinião.

Alguma outra solução alternativa para superar esse aviso?

EDITAR:

Adicionadas algumas configurações como sugestões/respostas do @Rolando, ainda recebo o mesmo aviso.

Minha configuração do mysql está assim:

[client]
port        = 3306
socket      = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K 
max_allowed_packet = 1024M 
table_open_cache = 128 
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 192K
# Query cache disabled
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 100
thread_concurrency = 10
tmp_table_size = 128M
max_heap_table_size = 128M
log_error                = /var/log/mysql/mysql-error.log
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2

log_warnings = 2

server-id   = 1
binlog-format = row
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin = mysql-bin
log-slave-updates
relay-log=mysqld-relay-bin
expire_logs_days        = 10
max_binlog_size         = 100M

innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
innodb_buffer_pool_size = 8G
character-set-server = utf8
#innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 2047M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DIRECT

[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set = utf8

[mysql]
default-character-set = utf8

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 32M

[mysqlhotcopy]
interactive-timeout

[mysqld_save]
syslog

Minha aplicação usa apenas o InnoDB, mas existem poucos bancos de dados como o mysql, que vem com as instalações padrão do mysql são apenas os que usam o tipo de mecanismo MyISAM, acho que isso não deve ser minha preocupação.

Como você pode ver eu também tenho replicação, o aviso é o mesmo no servidor replicado também, cuja configuração é idêntica a esta.

mysql innodb
  • 3 3 respostas
  • 105263 Views

3 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2013-04-26T16:29:06+08:002013-04-26T16:29:06+08:00

    Fico feliz que você tenha dito que todos os seus dados são InnoDB para que eu possa responder da seguinte forma: Se max_allowed_packet estiver no máximo em 1G e você ainda estiver tendo problemas, há apenas dois lugares para procurar:

    1. innodb_log_buffer_size : O tamanho em bytes do buffer que o InnoDB usa para gravar nos arquivos de log no disco. O valor padrão é 8 MB. Um buffer de log grande permite que grandes transações sejam executadas sem a necessidade de gravar o log em disco antes da confirmação das transações. Assim, se você tiver grandes transações, aumentar o buffer de log economiza E/S de disco.
    2. innodb_log_file_size : O tamanho em bytes de cada arquivo de log em um grupo de logs. O tamanho combinado dos arquivos de log deve ser inferior a 4 GB. O valor padrão é 5 MB. Os valores sensíveis variam de 1 MB a 1/N-ésimo do tamanho do buffer pool, onde N é o número de arquivos de log no grupo. Quanto maior o valor, menos atividade de liberação de ponto de verificação é necessária no buffer pool, economizando E/S de disco. Mas arquivos de log maiores também significam que a recuperação é mais lenta em caso de falha.

    Eu abordei algo como cerca de 2 anos atrás

    • Aug 01, 2011: Como max_allowed_packet afeta o backup e a restauração de um banco de dados?
    • Apr 20, 2011: MySQL dá erro "Out of Memory" ao inserir um arquivo grande. De onde vem essa limitação de tamanho de arquivo?

    SUGESTÕES

    Você precisa aumentar os logs de transação do InnoDB . Aqui estão as etapas para aumentar com segurança innodb_log_buffer_size e innodb_log_file_size :

    Passo 01: Adicione-os a/etc/my.cnf

    [mysqld]
    innodb_log_buffer_size = 32M
    innodb_log_file_size = 2047M
    

    Etapa 02: execute isso no mysql

    mysql> SET GLOBAL innodb_fast_shutdown = 0;
    

    Etapa 03: Desligar o mysql

    service mysql stop
    

    Passo 04: Mova os logs antigos de lado

    mv ib_logfile0 ib_logfile0.bak
    mv ib_logfile1 ib_logfile1.bak
    

    Passo 05: Inicie o mysql

    service mysql start
    

    É isso.

    A InnoDB Infrastructure agora deve ter espaço de log suficiente para BLOBs de tamanhos diferentes.

    De uma chance !!!

    • 14
  2. IsraelWebDev
    2016-05-28T03:46:14+08:002016-05-28T03:46:14+08:00

    Depois de ler o comentário de @ user19292 em janeiro de 16 sobre esta pergunta antiga, atualizei de 5.7.9 para 5.7.12 e o problema desapareceu.

    • 2
  3. adrianTNT
    2020-02-27T21:06:29+08:002020-02-27T21:06:29+08:00

    Passei cerca de 5-6 horas alterando as opções e tentando diferentes versões do MySQL, sempre recebi o erro.

    Eu acho que é eider porque:

    • meu código PHP não está fechando corretamente a conexão db (é um aviso, não um erro) mysql_close()ou equivalente.
    • ou porque o servidor de cache/proxy nginx está configurado para fechar a conexão se o cliente a fechou, o servidor de cache/proxy não espera pelo servidor de origem (onde o mysql também está).
    • 1

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 fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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

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