Eu tentei várias etapas para corrigir esse problema. Existem tantas fontes para possíveis soluções para esse problema que é difícil filtrar o sentido das bobagens. Finalmente encontrei uma boa solução aqui :
Etapa 1: identificar a versão do banco de dados
$ mysql --version
Você verá uma saída como esta com o MySQL:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Ou imprima assim para o MariaDB:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Anote qual banco de dados e qual versão você está executando, como você os usará mais tarde. Em seguida, você precisa interromper o banco de dados para acessá-lo manualmente.
Etapa 2: Parando o servidor de banco de dados
Para alterar a senha root, você deve desligar o servidor de banco de dados antecipadamente.
Você pode fazer isso no MySQL com:
$ sudo systemctl stop mysql
E para MariaDB com:
$ sudo systemctl stop mariadb
Etapa 3: Reiniciando o servidor de banco de dados sem verificação de permissão
Se você executar o MySQL e o MariaDB sem carregar informações sobre os privilégios do usuário, ele permitirá que você acesse a linha de comando do banco de dados com privilégios de root, sem fornecer uma senha. Isso permitirá que você obtenha acesso ao banco de dados sem saber.
Para fazer isso, é necessário parar o banco de dados de carregar as tabelas de concessão, que armazenam informações sobre privilégios do usuário. Como esse é um risco à segurança, você também deve pular a rede também para impedir que outros clientes se conectem.
Inicie o banco de dados sem carregar as tabelas de concessão ou ativar a rede:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Oe comercial no final deste comando fará com que esse processo seja executado em segundo plano, para que você possa continuar usando o seu terminal.
Agora você pode se conectar ao banco de dados como usuário root, o que não deve solicitar uma senha.
$ mysql -u root
Você verá imediatamente um prompt de shell do banco de dados.
Prompt do MySQL
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Prompt do MariaDB
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Agora que você tem acesso root, pode alterar a senha root.
Etapa 4: Alterando a senha root
mysql> FLUSH PRIVILEGES;
Agora podemos alterar a senha do root.
Para o MySQL 5.7.6 e mais recente , bem como o MariaDB 10.1.20 e mais recente , use o seguinte comando:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Para o MySQL 5.7.5 e anterior , bem como o MariaDB 10.1.20 e anterior , use:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Certifique-se de substituir new_password
por sua nova senha de escolha.
Nota: Se o ALTER USER
comando não funcionar, geralmente é indicativo de um problema maior. No entanto, você pode tentar UPDATE ... SET
redefinir a senha root.
[IMPORTANTE] Esta é a linha específica que corrigiu meu problema específico:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Lembre-se de recarregar as tabelas de concessão depois disso.
Em qualquer um dos casos, você deverá ver a confirmação de que o comando foi executado com sucesso.
Query OK, 0 rows affected (0.00 sec)
A senha foi alterada; portanto, agora você pode parar a instância manual do servidor de banco de dados e reiniciá-la como antes.
Etapa 5: reiniciar o servidor de banco de dados normalmente
O tutorial segue algumas etapas adicionais para reiniciar o banco de dados, mas a única peça que usei foi esta:
Para o MySQL, use:
$ sudo systemctl start mysql
Para MariaDB, use:
$ sudo systemctl start mariadb
Agora você pode confirmar que a nova senha foi aplicada corretamente executando:
$ mysql -u root -p
O comando agora deve solicitar a senha recém-atribuída. Digite-o e você deverá obter acesso ao prompt do banco de dados conforme o esperado.
Conclusão
Agora você tem acesso administrativo ao servidor MySQL ou MariaDB restaurado. Verifique se a nova senha root que você escolhe é forte e segura e mantenha-a em local seguro.