web-dev-qa-db-fra.com

Modifié max_allowed_packet et toujours recevoir une erreur "paquet trop large"

J'utilise MySqldump pour créer un fichier plat à des fins de sauvegarde. J'ai utilisé ce fichier pour recréer la base de données sur un autre serveur. J'ai dirigé le processus d'importation via SSH sur la ligne de commande et j'ai reçu plusieurs Packet too Large les erreurs.

J'ai redémarré mysql avec un maximum de max_allowed_packet beaucoup plus grand (I.E.- 1000m) et a toujours reçu l'erreur. J'ai même essayé de régler le max_allowed_packet dans le fichier d'importation, toujours reçu l'erreur.

Existe-t-il un moyen d'assurer que le max_allowed_packet est défini et/ou utilise MySQLDUMM qui créera un fichier qui ne provoque pas ce problème?

Pour référence:

le fichier mysqldump non compressé est ~ 2 Go

type de base de données est innoDB

8
Patrick

Le premier que j'ai pensé était quoi max_allowed_packet Contrôle effectivement. Voici ce que j'ai trouvé:

Selon le page 99 de "compréhension de MySQL internes" (ISBN 0-596-00957-7) , voici les paragraphes 1 à 3 l'expliquant:

Le code de communication réseau MySQL a été écrit sous l'hypothèse selon laquelle les requêtes sont toujours raisonnablement courtes et peuvent donc être envoyées et traitées par le serveur dans un seul morceau, appelé A paquets dans la terminologie MySQL. Le serveur attribue la mémoire pour un tampon temporaire pour stocker le paquet et la demande suffisamment pour l'adapter entièrement. Cette architecture nécessite une précaution d'éviter que le serveur est à court de mémoire --- un capuchon de la taille du paquet, que cette option accomplit.

Le code d'intérêt par rapport à cette option est trouvé dans SQL/NET_SERV.CC. Jetez un coup d'oeil sur my_net_read (), puis suivez l'appel à my_real_read () et payez une attention particulière à Net_REALLOC ().

Cette variable limite également la longueur d'un résultat de nombreux fonctions de cordes. Voir SQL/Field.CC et SQL/INTEM_STRFUNC.CC pour plus de détails.

Compte tenu de cette définition de max_allowed_packet, j'ai ensuite découvert quelque chose d'autre de Serverfault: Innodb_Log_File_Size et Innodb_Log_Buffer_Size combiné doivent être supérieurs à dix fois votre plus grand objet BLOB si vous avez beaucoup de gros

Garder ces deux choses à l'esprit, j'augmenterais Innodb_Log_File_Size dans /etc/my.cnf à la taille maximale autorisée pour cela, 2047m. Bien sûr, cela nécessite ce qui suit

service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Cela permettra d'accueillir les gros blobs que vous pourriez avoir dans vos données.

5
RolandoMySQLDBA

Pour certaines raisons, max_allowed_packet est ignoré par mysqldump - conception ? Le complément réel est net_buffer_length. Alors essayez plutôt

mysqldump --net_buffer_length=100k -u root -p databasename > dump.sql
2
Leopd