2013-06-03 07:32:18 +0000 2013-06-03 07:32:18 +0000
130
130

mysql как исправить Access denied for user 'root'@'localhost'

Перед тем как что-то испортить, когда я вхожу, используя $ mysql -u root -p, и показываю базы данных:

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| game_data |
| test |
+--------------------+

Тогда я попытался создать нового пользователя и заметил, что что-то не так с PRIVILEGES.

Так что я удалил новых пользователей, и я думаю, что я удалил ‘root’ и ‘Admin’ случайно.

Затем я снова пытаюсь создать ‘root’, но получаю ошибку Access denied, когда делаю все привилегии.

Если я снова войду в MySQL, используя $ mysql -u root -p, и покажу базы данных,

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Все остальные базы данных исчезли.

Как исправить MySQL сейчас?

Я не могу найти базу данных ‘mysql’, не могу создать базу данных, создать пользователя, все, что я пытаюсь сделать, получит ошибку.

ERROR 1045 (28000): Доступ запрещен для пользователя ‘root’@‘localhost’ (используя пароль: YES).

Нужно ли переустанавливать MySQL, используя MacPorts? Если переустановить, я потеряю базу данных game_data, не так ли?

Ответы (6)

138
138
138
2013-06-03 07:35:27 +0000

Выполните следующие шаги.

  1. Запустите экземпляр или демон сервера MySQL с опцией --skip-grant-tables (настройка безопасности).

  2. Выполните эти инструкции.

Если вы столкнулись с неизвестным полем Ошибка пароля, используйте:

update user set authentication_string=password('my_password') where user='root';
  1. Наконец, перезапустите instance/daemon без опции --skip-grant-tables.

Теперь вы должны иметь возможность подключиться с новым паролем.

$ mysql -u root -p

Введите пароль: my_password

Исправлена ошибка с MySQL “Unable to lock ibdata1”

sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart
74
74
74
2016-09-28 15:01:12 +0000

Ничто из вышеперечисленного не помогло мне. Я обнаружил, что мне нужно очистить метод плагина. В 5.6 я мог сделать:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;

В 5.7 я нашел, что мне нужно:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='mysql_native_password' where User='root';
[mysql] flush privileges;

Согласно документам, с плагином, установленным в пустую строку, он должен был быть по умолчанию mysql_native_password, но, возможно, меня смущает пустой хэш пароля. Дополнительные нюансы вы можете прочитать в документации здесь: https://dev.mysql.com/doc/refman/5.7/en/native-authentication-plugin.html

8
8
8
2016-04-28 21:27:58 +0000

Также убедитесь, что нужная запись в таблице user имеет пустое поле plugin (может быть, например, "unix_socket").

Начиная с версии 5.5.7 mysql поддерживает различные автоплагины https://dev.mysql.com/doc/refman/5.6/en/authentication-plugins.html

Так что если у вас есть непустое поле plugin, то пароль будет проигнорирован, а на лог ошибок mysql будет выведено предупреждение (для меня это /var/log/mysql/error.log):

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.

8
8
8
2016-01-22 23:08:02 +0000

Вы можете увидеть что-то подобное;

Защита развертывания MySQL сервера.

Если вы видите, что там написано

grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)

Смотрите последние 10 минут это видео , оно учит вас, как это делать.

3
3
3
2017-11-10 20:13:46 +0000

В моём случае у меня было повреждение базы данных, после перезапуска mysql в Debian логин root был без пароля. Решение было следующим:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

В некоторых других ответах также упоминался плагин native_password, но это то, как вы можете сделать это без сложностей. Вот как он должен быть изменен.

3
3
3
2014-02-21 17:05:47 +0000

Попробуйте:

mysql --no-defaults --force --user=root --host=localhost --database=mysql 
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;

Похожие вопросы

15
12
8
2
11