Eu uso o mysqldump para criar um arquivo simples para fins de backup. Usei esse arquivo para recriar o banco de dados em um servidor alternativo. Executei o processo de importação por meio do ssh na linha de comando e recebi vários Packet too Large
erros.
Reiniciei o mysql com um max_allowed_packet muito maior (ou seja, 1000M) e ainda recebi o erro. Eu até tentei definir o max_allowed_packet no arquivo de importação, ainda recebi o erro.
Existe uma maneira de garantir que o max_allowed_packet esteja definido e/ou use o mysqldump que criará um arquivo que não cause esse problema?
Para referência:
o arquivo mysqldump descompactado é ~ 2 GB
tipo de banco de dados é INNODB
A primeira coisa que pensei foi o que max_allowed_packet realmente controla. Aqui está o que eu encontrei:
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:
Dada essa definição de max_allowed_packet, descobri outra coisa de ServerFault: innodb_log_file_size e innodb_log_buffer_size combinados devem ser maiores que dez vezes seu maior objeto blob se você tiver muitos grandes
Mantendo essas duas coisas em mente, eu aumentaria innodb_log_file_size em /etc/my.cnf para o tamanho máximo permitido para ele, 2047M. Isso obviamente requer o seguinte
Isso acomodará quaisquer bolhas grandes que você possa ter em seus dados.
O MySQL
max_allowed_packet
ainda precisa estar dentro dos limites do shell que o iniciou -ulimit -a
mostra quedata seg size
é ilimitado?Por algum motivo,
max_allowed_packet
é ignorado pormysqldump
- por design ? O complemento real énet_buffer_length
. Então, em vez disso, tente