MySQL PHP incompatibilité
Je suis sous WAMP en local, mais la connexion à une base de données MySQL distante. Le local de la version de PHP est la dernière 5.3.0.
L'une des bases de données à distance, étant en version 5.0.45 fonctionne très bien. Cependant, les autres à distance de la base de données, je suis en train d'essayer de se connecter, ce qui est la version 5.0.22 jette d'erreur suivant avant de mourir:
Warning: mysql_connect() [function.mysql-connect]: OK paquet de 6 octets de moins que prévu. PID=5880 dans ...
Warning: mysql_connect() [function.mysql-connect]: mysqlnd ne peut pas se connecter à MySQL 4.1+ à l'aide de vieux authentification dans ...
WTF?
Mise à JOUR:
Revenir à PHP 5.2.* c'est à dire quelque chose de plus bas que 5.3.0 résout complètement le problème. Tant que je ne suis pas candidat 5.3.0 je peux me connecter à deux bases de données. Je ne suis pas sûr de ce que l'explication est pour cette étrangeté.
- mysqlnd ne fait pas partie de la 5.2, c'est à dire que vous utilisez un autre connecteur/lib maintenant que vous avez est revenue à php 5.2.
- alors, quel serait le problème avec 5.3 ont probablement été alors?
Vous devez vous connecter pour publier un commentaire.
Le compte MySQL que vous utilisez probablement a un vieux de 16 caractères mot de passe long (hash).
Vous pouvez tester avec un client MySQL (comme HeidiSQL, la console MySQL client ou de toute autre client) et un compte qui a accès à la
mysql
.user
table. Si le champ du Mot de passe contient 16 caractères il est un ancien mot de passe et mysqlnd ne peut l'utiliser pour se connecter au serveur MySQL.Vous pouvez définir un nouveau mot de passe pour cet utilisateur avec
voir dev_mysql_set_password
edit:
Vous devriez également vérifier si le serveur est configuré pour utiliser/créer des vieux mots de passe par défaut.
edit2:
S'il vous plaît exécuter la requête
sur le 5.0.22 serveur (celui qui est "à défaut"). Remplacer
username
par le compte que vous utilisez dans mysql_connect().Ce n'est que de retour?
J'ai essayé de trouver une solution simple à ce problème. Essayez cette approche. Dans MySQL type
Si votre mot de passe est seize personnages, c'est parce que vous avez utilisé OLD_PASSWORD sur votre ou ont été en cours d'exécution d'une ancienne version de MySQL. Pour mettre à jour le type de
permutation de racine, localhost et newpass pour votre utilisateur, hôte et passer respectivement. Maintenant, lorsque vous ré-type
Votre mot de passe doit ont changé. Ce fixe pour moi.
SELECT PASSWORD('yourpass');
, puis la copie de l'imprimé de hachage dans une commande comme celle-ci et de l'exécuter sur la machine serveur:UPDATE mysql.user SET Password='yourhash' WHERE User='root'; FLUSH PRIVILEGES;
.Votre serveur de base de données est configuré pour utiliser les anciens mots de passe par défaut. Le message d'erreur que vous obtenez est mysqlnd voir une base de données qui peut soutenir la nouvelle (safer) d'authentification, mais refuse de le faire. Dans un tel cas, mysqlnd abandon de la connexion et refuse de travailler.
Assurez-vous que votre mon.cnf n'a pas
Après avoir commentaire que la configuration de mon.cnf (ou de le supprimer à partir de là où il s'agirait d'un jeu), et de redémarrer le serveur, assurez-vous de re-créer votre mot de passe à l'aide de la commande VolkerK décrit, sinon vous ne serez pas en mesure de se connecter.
old_passwords
la valeur 1. Pour vérifier, exécutezSELECT @@global.old_passwords;
Une solution plus simple consiste à supprimer de la base de données de l'utilisateur et d'en créer un nouveau avec le même nom d'utilisateur et mot de passe.
ppa:ondrej/php
. J'ai également eu à mettre à jour mon apache2 service. Longue histoire courte, ce mysql question qui m'est arrivé. Je voulais juste dire que cette solution a fonctionné pour moi, et je n'ai même pas besoin de passer par les tracas de la création d'un nouvel utilisateur. J'ai simplement eu un peu de mettre à jour le mot de passe de mes utilisateurs. J'espère que cela aide quelqu'un d'autre en bas de la route. Je vous remercie pour votre brief et de la solution de travail.Que l'utilisateur Evernoob ci-dessus dit:
"Revenir à PHP 5.2.* c'est à dire quelque chose de plus bas que 5.3.0 résout complètement le problème. Tant que je ne suis pas candidat 5.3.0 je peux me connecter à deux bases de données. Je ne suis pas sûr de ce que l'explication est pour cette étrangeté"
Dans le cas de connexion à une salle de tuyau (dans notre cas, DreamHost), qui est à l'aide de la oldpassword option, nous ne pouvions pas modifier la table des utilisateurs. Ces options va fonctionner dans d'autres scénarios, mais pas avec d'hébergement web partagé.
De remarque, nous sommes en cours d'exécution WAMP.
Mon hébergeur a différentes versions de PHP/MySQL configuré et d'utiliser un certain un-je besoin pour utiliser le bon .extension php - notamment .php5 Il pourrait être quelque chose d'aussi simple que ça.
Revenir à PHP 5.2.* a fait le tour! MERCI!!!!
Si vous utilisez WAMP... à gauche sur wamp > php > version> obtenir plus d'>
sélectionnez la version que vous voulez et de les télécharger.
installer/exécuter le fichier exe
gauche sur wamp > php > version> PHP 5.2.*
Qui a résolu ce problème. Je ne pouvais pas exécuter l'une de ces commandes SQL sans l'obtention d'un "command denied to user 'XXX'@'localhost'" erreur. Bon coup d'oeil essayez de vous connecter en tant que SU 'Root'. Peut-être sur un serveur personnel, mais ne va pas se produire sur un ordinateur hôte réel.
J'ai juste eu ce problème avec un site WordPress qui a soudainement cessé de fonctionner et affiche cette erreur.
J'ai trouvé une interface graphique dans le site web du Panneau de Contrôle qui m'a permis de changer le mot de passe pour l'utilisateur de base de données. J'ai essayé de changer le mot de passe actuel et ce n'était pas autorisée, car le mot de passe actuel n'était pas assez fort.
J'ai changé le mot de passe de la base de données vers un nouveau mot de passe plus forts et édité mon wp-config.php fichier pour avoir le nouveau mot de passe.
Cela a fonctionné!
Si ma conjecture est, le fournisseur d'hébergement mis à jour quelque chose, peut-être que MySQL, pour une version qui nécessite de mots de passe forts. Le correctif a été pour moi d'utiliser le cpanel interface graphique pour modifier la base de données de l'utilisateur mot de passe, et de mise à jour wp-config.php pour correspondre.
Après beaucoup de recherche et tente j'ai trouvé un moyen sans needage à tout downgrade/upgrade de MySQL et aucun effet sur les autres utilisateurs de l'instance en cours d'exécution de MySQL.
La solution est de réinitialiser le mot de passe par:
pour les versions de MySQL plus récente que 5.7.5 ( > 5.7.5):
pour les anciennes versions de MySQL: ( <= 5.7.5)
J'ai trouvé le point de ici!
Il fait mine de fonctionne bien!