Pegue 22 em mover de senhas antigas e mysql_upgrade [duplicado]

3

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.

    
por exscape 11.02.2015 / 09:56

1 resposta

1

O segmento vinculado nos comentários solucionou o problema.

Depois de seguir essas instruções, reiniciei o servidor e tentei fazer o login como de costume (sem --skip-secure-auth ), o que funcionou.
Em seguida, executei mysql_upgrade -u root -p , o que também funcionou. Depois disso e uma reinicialização do mysqld, tudo parece funcionar como deveria, e meu usuário root tem uma "nova" senha (hash longo de 41 caracteres, em vez de 16).

Com o usuário root corrigido, você poderá migrar outros usuários conforme descrito em a documentação do MySQL , que estabelece as etapas para identificar quais senhas você precisa atualizar e como fazer isso.

    
por 11.02.2015 / 13:36

Tags