Я пытался предоставить удаленный доступ к 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
Вы можете попробовать обычную процедуру восстановления:
- Остановить службу MySQL
Запустите службу с помощью:
sudo mysqld_safe --skip-grant-tables &
Подключиться (пароль не потребуется):
mysql -uroot
Отмените изменения (будьте внимательны на этот раз и проверьте
select
текущее состояние хоста, оно должно быть202.54.10.20
):use mysql; update user set Host='localhost' where user='root'; flush privileges;
Перезапустите 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. Надеюсь, это сработает. Спасибо.