Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

obtendo conexão perdida com o mysql ao usar o mysqldump mesmo com o parâmetro max_allowed_packet


Tente adicionar o --quick opção para o seu mysqldump comando; funciona melhor com mesas grandes. Ele transmite as linhas do conjunto de resultados para a saída, em vez de absorver a tabela inteira e, em seguida, escrevê-la.
 mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
 gzip  > dump_test.sql.gz

Você também pode tentar adicionar o --compress opção para o seu comando mysqldump. Isso faz com que ele use o protocolo de conexão compactado mais amigável à rede para seu servidor MySQL. Observe que você ainda precisa do gzip tubo; O protocolo compactado do MySQL não faz com que o dump saia do mysqldump comprimido.

Também é possível que o servidor esteja expirando sua conexão com o mysqldump cliente. Você pode tentar redefinir as durações do tempo limite. Conecte-se ao seu servidor por outros meios e emita essas consultas, depois execute seu mysqldump trabalho.

Estes definem os tempos limite para um dia de calendário.
    SET GLOBAL wait_timeout=86400;
    SET GLOBAL interactive_timeout=86400;

Finalmente, se seu servidor estiver longe de sua máquina (através de roteadores e firewalls), algo pode estar atrapalhando o mysqldump conexão. Alguns roteadores e firewalls inferiores têm limites de tempo nas sessões NAT (tradução de endereço de rede). Eles deveriam manter essas sessões vivas enquanto estão em uso, mas algumas não. Ou talvez você esteja atingindo um limite de tempo ou tamanho configurado por sua empresa para conexões externas.

Tente fazer login em uma máquina mais próxima do servidor e executar mysqldump nele. Em seguida, use algum outro meio (sftp?) para copiar seu arquivo gz para sua própria máquina.

Ou talvez seja necessário segmentar o despejo desse arquivo. Você pode fazer algo assim (não depurado).
mysqldump  -uroot -h my.host -p'mypassword'  \ 
          db_name table_name --skip-create-options --skip-add-drop-table \
          --where="id>=0 AND id < 1000000" | \
          gzip....

Em seguida, repita isso com essas linhas.
          --where="id>=1000000 AND id < 2000000" | \

          --where="id>=2000000 AND id < 3000000" | \
          ...

até obter todas as linhas. Dor no pescoço, mas vai funcionar.