MySQL - acesso negado ao usuário root@localhost

MySQL - acesso negado ao usuário root@localhost

Eu estava tentando dar acesso remoto ao MySQL, pois o MySQL só funcionava localmente.

Eu segui este guia http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

Usei um comando como este do tutorial:

mysql> update user set Host='202.54.10.20' where user='root';

Acho que isso bagunçou o mysql local.

Agora não consigo fazer login com:

$ mysql -u root -p

eu recebo este erro:

Acesso negado ao usuário 'root'@'localhost' (usando senha: Sim)

Agora sei que a senha está correta, pois funcionava antes. mas eu acidentalmente me tranquei..

Eu não sei mais o que fazer.

O sistema operacional usado pelo servidor é o Ubuntu.

Responder1

Você pode tentar o procedimento normal de recuperação:

  1. Pare o serviço MySQL
  2. Execute o serviço usando:

    sudo mysqld_safe --skip-grant-tables &
    
  3. Conecte-se (senha não será necessária):

    mysql -uroot
    
  4. Reverta suas alterações (tenha cuidado desta vez e verifique selectqual é o estado atual, o host deve estar 202.54.10.20):

    use mysql;
    update user set Host='localhost' where user='root';
    flush privileges;
    
  5. Reinicie o MySQL da maneira normal

Responder2

Experimente este comando:

SHOW GRANTS FOR 'root'@'localhost';

Isso também pode acontecer se você não tiver os privilégios adequados. então você pode até digitar o seguinte comando:

GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;

Responder3

Eu tive o mesmo problema (atualizei incorretamente o host do usuário do virtualmin) e corrigi-o com etapas semelhantes à resposta do @techraf, mas seguindo etapas semelhantes deste site para evitar o can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'erro no Ubuntu 16.04:

https://coderwall.com/p/j9btlg/reset-the-mysql-5-7-root-password-in-ubuntu-16-04-lts

Modifiquei as etapas para atualizar o host em vez da senha:

# Stop MySQL
sudo service mysql stop
# Make MySQL service directory.
sudo mkdir /var/run/mysqld
# Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld
# Start MySQL manually, without permission checks or networking.
sudo mysqld_safe --skip-grant-tables --skip-networking &
# Log in without a password.
mysql -uroot mysql

então no mysql:

select user, host from mysql.user; --just to check
UPDATE mysql.user SET host='localhost' WHERE User='root' AND Host='202.54.10.20'; --CHANGE the host to the one you see in the query
select user, host from mysql.user; --check again 
commit;
exit;

E então no console:

# Turn off MySQL.
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
# Start the MySQL service normally.
sudo service mysql start

Responder4

Se você estiver recebendo esse erro no Workbench, siga estas etapas.

Primeiro basta fazer login com sua senha atual:

sudo mysql -u root -p

Em seguida, altere sua senha porque ter uma senha de baixa resistência às vezes dá erro.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Em seguida, basta sair e fazer login novamente com sua nova senha:

quit

sudo mysql -u root -p

Depois de fazer login com sucesso, digite o comando:

use mysql;

Deverá mostrar uma mensagem como 'Banco de dados alterado' e digite:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Depois desse tipo:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Então digite:

FLUSH PRIVILEGES;

Então simplesmente saia:

quit

Agora tente fazer login com sua nova senha no seu WORKBENCH. Espero que funcione. Obrigado.

informação relacionada