Erro do MySQL:: ‘Acesso negado para o usuário’ root ‘@’ localhost ‘

$ ./mysqladmin -u root -predigido
Digite a senha:

mysqladmin: connect to server em ‘localhost’ falhou o erro:
‘Acesso negado para o usuário’ root ‘@’ localhost ‘(usando a senha: YES)’

Como posso consertar isso?

  1. Abra e edite o /etc/my.cnf
  2. Adicione skip-grant-tables sob [mysqld]
  3. Reinicie o Mysql
  4. Você deve poder logar no mysql agora usando o comando abaixo mysql -u root -p
  5. Execute mysql> flush privileges;
  6. Definir nova senha por ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. Volte para /etc/my.cnf e remova / comente skip-grant-tables
  8. Reinicie o Mysql
  9. Agora você poderá fazer o login com a nova senha mysql -u root -p

Todas as soluções que encontrei eram muito mais complexas do que o necessário e nenhuma funcionou para mim. Aqui está a solução que resolveu meu problema. Não há necessidade de reiniciar o mysqld ou iniciá-lo com privilégios especiais.

 sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; 

Com uma única consulta, estamos alterando o auth_plugin para mysql_native_password e configurando a senha root para root (sinta-se livre para alterá-lo na consulta)

Agora você deve poder logar com root. Mais informações podem ser encontradas na documentação do mysql

(saia do console do mysql com Ctrl + D ou digitando exit )

Eu tentei muitas etapas para corrigir esse problema. Existem tantas fonts de possíveis soluções para esse problema que é difícil filtrar o sentido do absurdo. Eu finalmente encontrei uma boa solução aqui :

Etapa 1: identificar a versão do database

 $ mysql --version 

Você verá alguma saída como esta com o MySQL:

 $ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper 

Ou saída assim para o MariaDB:

 mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1 

Anote qual database e qual versão você está executando, pois você os usará mais tarde. Em seguida, você precisa parar o database para poder acessá-lo manualmente.

Etapa 2: parando o servidor de database

Para alterar a senha do root, você precisa encerrar o servidor de database com antecedência.

Você pode fazer isso para o MySQL com:

 $ sudo systemctl stop mysql 

E para o MariaDB com:

 $ sudo systemctl stop mariadb 

Etapa 3: Reiniciando o servidor de database sem verificação de permissão

Se você executar o MySQL e o MariaDB sem carregar informações sobre privilégios de usuário, ele permitirá que você acesse a linha de comando do database com privilégios de root sem fornecer uma senha. Isso permitirá que você obtenha access ao database sem saber.

Para fazer isso, você precisa parar o database de carregar as tabelas de concessão, que armazenam informações de privilégios de usuário. Como esse é um risco de segurança, você também deve pular a rede para evitar que outros clientes se conectem.

Inicie o database sem carregar as tabelas de permissions ou ativar a rede:

 $ sudo mysqld_safe --skip-grant-tables --skip-networking & 

O e comercial no final deste comando fará com que esse processo seja executado em segundo plano para que você possa continuar a usar seu terminal.

Agora você pode se conectar ao database como o usuário root, que não deve pedir uma senha.

 $ mysql -u root 

Você verá imediatamente um prompt do shell do database.

Prompt do MySQL

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 

MariaDB Prompt

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> 

Agora que você tem access root, você pode alterar a senha do root.

Etapa 4: alterando a senha do root

 mysql> FLUSH PRIVILEGES; 

Agora podemos realmente mudar a senha da raiz.

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 mais antigo , bem como o MariaDB 10.1.20 e mais antigo , use:

 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password'); 

Certifique-se de replace new_password pela nova senha escolhida.

Nota: Se o comando ALTER USER não funcionar, geralmente é indicativo de um problema maior. No entanto, você pode tentar UPDATE ... SET para redefinir a senha de 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 permissions depois disso.

Em ambos os casos, você deve 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 database e reiniciá-lo como era antes.

Etapa 5: Reinicie o servidor de database normalmente

O tutorial vai em algumas etapas adicionais para reiniciar o database, mas a única parte 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 deve agora solicitar a senha recém-atribuída. Digite-o e você deverá obter access ao prompt do database conforme o esperado.

Conclusão

Você agora tem access administrativo ao servidor MySQL ou MariaDB restaurado. Verifique se a nova senha raiz escolhida é forte e segura e mantenha-a em um local seguro.

Para usuários do Ubuntu / Debian

Execute o seguinte para conectar-se como root (sem qualquer senha)

 sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf 

No seu ambiente de trabalho MySQL, você pode ir para a barra lateral esquerda, em Gerenciamento, selecione “Usuários e privilégios”, clique em raiz em Contas de usuário, na seção direita clique na guia “Limites de conta” para aumentar as consultas, atualizações, etc e Em seguida, clique na guia “Funções administrativas” e marque as checkboxs para conceder access à conta. Espero que ajude!

Eu fiz isso para definir minha senha de root na configuração inicial do MySQL no OSx. Abra um terminal.

 sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql' 

Feche o terminal e abra um novo terminal. E os seguintes são trabalhados no Linux, para definir a senha de root.

 sudo /usr/local/mysql/support-files/mysql.server stop sudo mysqld_safe --skip-grant-tables 

(sudo mysqld_safe – skip-grant-tables: Isso não funcionou para mim na primeira vez. Mas a segunda tentativa foi o sucesso.)

Então entre no MySQL

 mysql -u root FLUSH PRIVILEGES; 

Agora mude a senha:

 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'; 

Reinicie o MySQL:

 sudo /usr/local/mysql/support-files/mysql.server stop sudo /usr/local/mysql/support-files/mysql.server start 

‘Acesso negado para o usuário’ root ‘@’ localhost ‘(usando a senha: YES)’ Este erro só aconteceria se você alterou a senha recentemente mas não fez alterações no arquivo config.inc.php do phpmyadmin.

Então, resolvi meu problema alterando minha senha para o arquivo /XAMPP/xamppfiles/phpmyadmin/config.inc.php.