- Remover ou comentar old_passwords =1 em my.cnf
Reinicie o MySQL. Se você não fizer isso, o MySQL continuará usando o formato de senha antigo, o que significa que você não pode atualizar as senhas usando a função de hash PASSWORD() embutida.
Os hashes de senha antigos são de 16 caracteres, os novos são de 41 caracteres.
-
Conecte-se ao banco de dados e execute a seguinte consulta:
SELECT user, Length(`Password`) FROM `mysql`.`user`;
Isso mostrará quais senhas estão no formato antigo, por exemplo:
+----------+--------------------+ | user | Length(`Password`) | +----------+--------------------+ | root | 41 | | root | 16 | | user2 | 16 | | user2 | 16 | +----------+--------------------+
Observe aqui que cada usuário pode ter várias linhas (uma para cada especificação de host diferente).
Para atualizar a senha de cada usuário, execute o seguinte:
UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';
Por fim, libere os privilégios:
FLUSH PRIVILEGES;
Fonte:Como corrigir "o mysqlnd não pode se conectar ao MySQL 4.1+ usando autenticação antiga" no PHP5.3