Je ne parviens pas à connecter un serveur MySQL à distance ... La connexion semble fonctionner correctement car avec telnet [ip] [port], la réponse est:
4.1.3b-beta-nt-max▒ <0v '[uZ ,? B {efSLa $, Q4N
Lorsqu'il est exécuté en ligne de commande ou par MySQL Workbench 6.3
mysql -u [utilisateur] -p -h [hôte]
J'ai la même erreur:
ERREUR 2027 (HY000): Paquet mal formé
C’est un bogue client mysql, j’ai cherché à ce sujet et c’est une vieille demande de changement d’auth. Votre client est obsolète, il utilise une ancienne communication de protocole. Maintenant, s’il s’agit d’un problème lié à Workbench, vous devez tout d’abord mettre à jour ou rétrograder le client MySQL et essayer de l’exécuter seul.
Ici, c’est la même question avec une réponse plus complète: https://dba.stackexchange.com/questions/135343/server-responds-with-empty-packet-during-session-negotiation-resulting- dans le client
Et, pour le nouveau protocole Auth, phase de connexion: https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase.html
Si vous devez vous connecter à des serveurs MySQL antérieurs à 4.1 à partir de versions ultérieures de MySQL (5.7 ou ultérieure), vous devrez utiliser l'option "--skip-secure-auth" du client. Et la version client ne peut pas être plus récente que la v5.7.4 car cette option avait été supprimée dans la version 5.7.5. Vous pouvez télécharger la version 5.7.4_m14 depuis le site d'archive de mysql. Par exemple,
$ mysql -uuser -p -hserver --skip-secure-auth
J'ai eu la même erreur en essayant de me connecter à un serveur MariaDB avec le client MySQL mysql-client
. Je l'ai résolu en installant mariadb-client
(qui écrase le binaire mysql
, utilisez donc la même commande pour vous connecter).
J'ai fait face à ce problème pour la requête de sélection normale. C'était étrange que, lorsque j'utilisais des minuscules 's' dans l'instruction de requête, cela me donnait la même erreur. Je compris que cela se produit en interne car il essaie de récupérer les données du cache mysql. Ce n'était pas à cause du cas de 's' dans la requête select.
//Returned Error
select * from foo;
//This worked fine
Select * from foo;
//This also worked fine
select SQL_NO_CACHE * from foo;
A partir de cela, j'ai pu conclure que c'était le problème car il utilisait des données en cache.