Nach dem Upgrade eines PHP-Servers von PHP 5.3.3 auf PHP 5.6.x, der mit MySQL Server 5.1.x auf einer einfachen CentOS 6.x 64-Bit-Box arbeitete, gab es einige neue Web-Apps, die diesen mysqlnd-Verbindungsfehler zeigten:mysqlnd kann nicht sich mit MySQL 4.1+ mit der alten unsicheren Authentifizierung verbinden
Dies war der vollständige und genaue Fehler:
mysqlnd kann mit der alten unsicheren Authentifizierung keine Verbindung zu MySQL 4.1+ herstellen. Bitte verwenden Sie ein Administrationstool, um Ihr Passwort mit dem Befehl SET PASSWORD =PASSWORD(‘your_existing_password’) zurückzusetzen. Dadurch wird ein neuer und sicherer Hash-Wert in mysql.user gespeichert. Wenn dieser Benutzer in anderen Skripten verwendet wird, die von PHP 5.2 oder früher ausgeführt werden, müssen Sie möglicherweise das Old-Passwords-Flag aus Ihrer my.cnf-Datei entfernen
Dies geschieht, weil der neue mysqlnd-PHP-Client sich weigert, mit Passwörtern im alten Stil von MySQL zu arbeiten. Selbst wenn Sie also old_passwords=1 haben, funktioniert dies nicht für diese neuen Web-Apps, die eine stärkere Passwort-Hash-Sicherheit erfordern.
Wie kann ich den Fehler beheben, dass mysqlnd mit der alten unsicheren Authentifizierung keine Verbindung zu MySQL 4.1+ herstellen kann?
Dieser Fehler kann leicht behoben werden, wenn Sie die nächsten Schritte befolgen:
Haupt-MYSQL-Konfigurationsdatei bearbeiten:
nano -w /etc/my.cnf
Änderung:
old_passwords=1
zu
old_passwords=0
Übernehmen Sie die Änderungen:
service mysqld restart
Verbinden Sie sich als root mit der MySQL-Konsole:
mysql -u root -p
Setzen Sie nun das Benutzerkennwort zurück, um den neuen Hash zu verwenden:
SET PASSWORD FOR 'mysqluser'@'localhost'=PASSWORD('passwordhere'); flush privileges;
Ersetzen Sie „mysqluser“ und „passwordhere“ durch Ihren echten Benutzernamen und Ihr richtiges Passwort.
Gehen Sie nun zurück zu /etc/my.cnf und machen Sie die zuvor vorgenommenen Änderungen rückgängig, setzen Sie:
old_password=1
Starten Sie MySQL neu, um die Änderungen zu übernehmen:
service mysqld restart
Alles erledigt, jetzt sollte Ihr Benutzer den stärkeren MySQL-Passwort-Hash verwenden.
Dies kann von der MySQL-Konsole aus mit diesem Befehl überprüft werden:
mysql> SELECT user, Length(Password) FROM mysql.user; +------------------+------------------+ | user | Length(Password) | +------------------+------------------+ | root | 16 | | forum_user | 16 | | user2 | 41 | | lorex | 41 | | m3user | 16 |
Wenn Sie „41“ sehen, verwendet dieser Benutzer den neuen Hash, und „16“ bedeutet, dass er den alten Hash verwendet.
Alles erledigt, an diesem Punkt sollte Ihr Fehler, dass mysqlnd keine Verbindung zu MySQL 4.1+ mithilfe der alten unsicheren Authentifizierung herstellen kann, behoben sein und Sie sollten in der Lage sein, normal mit Ihren Webanwendungen zu arbeiten.
Problembehebung:mysqlnd kann keine Verbindung zu MySQL 4.1+ mithilfe der alten unsicheren Authentifizierung herstellen wurde zuletzt geändert:7. Februar 2017 von Esteban Borges