MySQL - доступ запрещен для пользователя root@localhost

MySQL - доступ запрещен для пользователя root@localhost

Я пытался предоставить удаленный доступ к MySQL, так как MySQL работал только локально.

Я следовал этому руководству http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

Я использовал команду из учебника:

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

Думаю, это испортило локальный MySQL.

Теперь я не могу войти с помощью:

$ mysql -u root -p

я получаю эту ошибку:

Доступ запрещен для пользователя 'root'@'localhost' (использование пароля: Да)

Теперь я знаю, что пароль правильный, так как раньше он работал. Но я случайно заблокировал себя.

Я больше не знаю, что делать.

Операционная система, используемая на сервере — Ubuntu.

решение1

Вы можете попробовать обычную процедуру восстановления:

  1. Остановить службу MySQL
  2. Запустите службу с помощью:

    sudo mysqld_safe --skip-grant-tables &
    
  3. Подключиться (пароль не потребуется):

    mysql -uroot
    
  4. Отмените изменения (будьте внимательны на этот раз и проверьте selectтекущее состояние хоста, оно должно быть 202.54.10.20):

    use mysql;
    update user set Host='localhost' where user='root';
    flush privileges;
    
  5. Перезапустите MySQL обычным способом.

решение2

Попробуйте эту команду:

SHOW GRANTS FOR 'root'@'localhost';

Это также может произойти, если у вас нет соответствующих привилегий. Поэтому вы можете даже ввести следующую команду:

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

решение3

У меня была та же проблема (неправильно обновил хост пользователя из virtualmin) и я исправил ее, выполнив действия, аналогичные ответу от @techraf, но выполнив аналогичные действия с этого сайта, чтобы избежать ошибки can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'в Ubuntu 16.04:

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

Я изменил шаги, чтобы обновить хост вместо пароля:

# 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

затем в 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;

И затем в консоли:

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

решение4

Если вы получаете эту ошибку в Workbench, выполните следующие действия.

Сначала просто войдите в систему, используя свой текущий пароль:

sudo mysql -u root -p

Затем измените свой пароль, так как ненадежный пароль иногда приводит к ошибкам.

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

FLUSH PRIVILEGES;

Затем просто выйдите и войдите снова, используя новый пароль:

quit

sudo mysql -u root -p

После успешного входа в систему введите команду:

use mysql;

Должно появиться сообщение типа «База данных изменена», затем введите:

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

После этого введите:

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

Затем введите:

FLUSH PRIVILEGES;

Затем просто выйдите:

quit

Теперь попробуйте войти с новым паролем в WORKBENCH. Надеюсь, это сработает. Спасибо.

Связанный контент