Eu tenho um antigo banco de dados MySQL que eu continuei executando por um tempo muito longo, provavelmente cerca de 14 anos.
Aparentemente, eu perdi para executar mysql_upgrade em longo atrás, talvez durante a atualização de 4.x para 5.x (e desde então).
Agora, depois de atualizar para 5.6.22 (a partir de 5.5.x) ontem, eu não consigo mais logar, e eu também não consigo resolver o problema.
Aparentemente, hashes de senhas de estilo antigo foram preteridos por mais de 10 anos, mas nunca vi nenhum aviso dizendo isso, até que ele parou de funcionar agora.
O primeiro sintoma de que algo estava errado foi este:
mysqldump: Got error: 2049: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled) when trying to connect
Eu recebo o mesmo erro usando mysql -u root -p
.
Passei por isso usando a opção --skip-secure-auth
para o comando mysql. Depois disso, a documentação diz que você deve atualizar sua senha :
SET old_passwords = 0;
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('DBA-chosen-password')
WHERE (User, Host) = ('user1', 'localhost');
FLUSH PRIVILEGES;
Isso falha:
ERROR 1054 (42S22): Unknown column 'plugin' in 'field list'
A solução para esse parece ser a execução de mysql_upgrade
, que atualiza a tabela mysql.user para adicionar a coluna do plugin. No entanto, também falha , com esse erro maravilhoso:
# mysql_upgrade -u root -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
Meu palpite é que isso ocorre porque não há uma opção --skip-secure-auth
para mysql_upgrade
, por isso não é possível fazer login.
Eu tentei desativar secure-auth para o servidor, mas se eu fiz isso corretamente, não ajudou. (Possivelmente porque o mysql_upgrade que vem com o 5.6.x usa ele por padrão e não permite que você o desative?)
Alguém tem uma solução para isso? Eu não estou acima de coisas como desativar temporariamente as senhas, etc., enquanto as resolvo; o servidor só é acessível a partir do host local e eu sou o único usuário local.