En général, l'erreur:
Erreur: 2006 ( CR_SERVER_GONE_ERROR
) - Le serveur MySQL est parti
signifie que le client n'a pas pu envoyer de question au serveur .
mysql
importer
Dans votre cas spécifique lors de l'importation du fichier de base de données via mysql
, cela signifie très probablement que certaines des requêtes dans le fichier SQL sont trop volumineuses pour être importées et qu'elles n'ont pas pu être exécutées sur le serveur, donc le client échoue lors de la première erreur survenue.
Vous avez donc les possibilités suivantes:
Ajoutez l'option force ( -f
) pour mysql
continuer et exécuter le reste des requêtes.
Cela est utile si la base de données contient de grandes requêtes liées au cache qui ne sont pas pertinentes de toute façon.
Augmentez max_allowed_packet
etwait_timeout
dans la configuration de votre serveur (par exemple ~/.my.cnf
).
Vider la base de données à l'aide de l' --skip-extended-insert
option pour décomposer les grandes requêtes. Importez-le ensuite à nouveau.
Essayez d'appliquer l' --max-allowed-packet
option pour mysql
.
Raisons courantes
En général, cette erreur peut signifier plusieurs choses, telles que:
une requête au serveur est incorrecte ou trop volumineuse,
Solution: augmenter la max_allowed_packet
variable .
Assurez-vous que la variable est sous la [mysqld]
section, non [mysql]
.
N'ayez pas peur d'utiliser de grands nombres pour les tests (comme 1G
).
N'oubliez pas de redémarrer le serveur MySQL / MariaDB.
Vérifiez que la valeur a été correctement définie par:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Vous avez obtenu un délai d'expiration de la connexion TCP / IP côté client.
Solution: augmenter la wait_timeout
variable .
Vous avez tenté d'exécuter une requête après la fermeture de la connexion au serveur.
Solution: une erreur logique dans l'application doit être corrigée.
Les recherches de nom d'hôte ont échoué (par exemple, problème de serveur DNS) ou le serveur a été démarré avec l' --skip-networking
option.
Une autre possibilité est que votre pare-feu bloque le port MySQL (par exemple 3306 par défaut).
Le thread en cours d'exécution a été tué, essayez à nouveau.
Vous avez rencontré un bogue où le serveur est mort lors de l'exécution de la requête.
Un client s'exécutant sur un hôte différent n'a pas les privilèges nécessaires pour se connecter.
Et bien d'autres, alors apprenez-en plus sur: B.5.2.9 Le serveur MySQL est parti .
Débogage
Voici quelques idées de débogage de niveau expert:
Vérifiez les journaux, par exemple
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Testez votre connexion via mysql
, telnet
ou les fonctions ping (par exemple mysql_ping
en PHP).
Utilisez tcpdump
pour renifler la communication MySQL (ne fonctionnera pas pour la connexion socket), par exemple:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Sous Linux, utilisez strace
. Sur BSD / Mac, utilisez dtrace
/ dtruss
, par exemple
sudo dtruss -a -fn mysqld 2>&1
Voir: Premiers pas avec DTracing MySQL
Apprenez-en plus sur le débogage du serveur ou client MySQL sur: 26.5 Débogage et portage de MySQL .
Pour référence, vérifiez le code source dans le sql-common/client.c
fichier responsable du lancement de l' CR_SERVER_GONE_ERROR
erreur pour la commande client.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}