Ошибка MySQL:: 'Доступ запрещен для пользователя' root '@' localhost '

$ ./mysqladmin -u root -p 'redacted'
Введите пароль:

mysqladmin: подключиться к серверу с ошибкой "localhost":
'Доступ запрещен для пользователя' root '@' localhost '(с использованием пароля: YES)'

Как я могу это исправить?

Ответ 1

  1. Откройте и /etc/my.cnf или /etc/mysql/my.cnf, в зависимости от вашего дистрибутива.
  2. Добавьте skip-grant-tables [mysqld] skip-grant-tables в [mysqld]
  3. Перезапустите Mysql
  4. Теперь вы можете войти в mysql, используя приведенную ниже команду mysql -u root -p
  5. Запустите mysql> flush privileges;
  6. Установите новый пароль с помощью команды ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. Вернитесь в /etc/my.cnf и удалите/прокомментируйте skip-grant-tables
  8. Перезапустите Mysql
  9. Теперь вы сможете войти с новым паролем mysql -u root -p

Ответ 2

Все решения, которые я нашел, были намного сложнее, чем нужно, и никто не работал для меня. Вот решение, которое решило мою проблему. Не нужно перезапускать mysqld или запускать его со специальными привилегиями.

sudo mysql

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

С помощью одного запроса мы меняем auth_plugin на mysql_native_password и устанавливаем пароль root для root (не стесняйтесь изменять его в запросе)

Теперь вы можете войти в систему с помощью root. Более подробную информацию можно найти в документации mysql

(выйдите из консоли mysql с помощью Ctrl + D или набрав exit)

Ответ 3

Я попробовал много шагов, чтобы устранить эту проблему. Существует так много источников для возможных решений этой проблемы, что трудно отфильтровать смысл от бессмыслицы. Я наконец -то нашел хорошее решение здесь:

Шаг 1. Определение версии базы данных.

$ mysql --version

Вы увидите такой вывод с MySQL:

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

Или, например, для MariaDB:

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

Обратите внимание на то, какая база данных и какая версия вы используете, поскольку вы будете использовать их позже. Затем вам нужно остановить базу данных, чтобы вы могли получить доступ к ней вручную.

Шаг 2. Остановка сервера базы данных.

Чтобы изменить пароль root, вы должны предварительно закрыть сервер базы данных.

Вы можете сделать это для MySQL с помощью:

$ sudo systemctl stop mysql

И для MariaDB:

$ sudo systemctl stop mariadb

Шаг 3: Перезапуск сервера баз данных без проверки прав доступа

Если вы запустите MySQL и MariaDB без загрузки информации о привилегиях пользователей, это позволит вам получить доступ к командной строке базы данных с правами root без предоставления пароля. Это позволит вам получить доступ к базе данных, не зная об этом.

Для этого вам необходимо остановить загрузку базы данных таблиц предоставления, в которых хранятся данные о привилегиях пользователя. Поскольку это немного угроза безопасности, вы также должны пропустить сеть, чтобы другие клиенты не могли подключиться.

Запустите базу данных без загрузки таблиц грантов или создания сетей:

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

Амперсанд в конце этой команды заставит этот процесс работать в фоновом режиме, чтобы вы могли продолжать использовать свой терминал.

Теперь вы можете подключиться к базе данных как пользователь root, который не должен запрашивать пароль.

$ mysql -u root

Вместо этого вы сразу увидите приглашение оболочки базы данных.

MySQL Prompt

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

mysql>

Приглашение MariaDB

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

MariaDB [(none)]>

Теперь, когда у вас есть root-доступ, вы можете изменить пароль root.

Шаг 4: Изменение пароля root

mysql> FLUSH PRIVILEGES;

Теперь мы можем изменить пароль root.

Для MySQL 5.7.6 и новее, а также для MariaDB 10.1.20 и новее используйте следующую команду:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Для MySQL 5.7.5 и старше, а также для MariaDB 10.1.20 и старше используйте:

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

Обязательно замените new_password новым новым паролем.

Примечание. Если команда ALTER USER не работает, это обычно указывает на большую проблему. Однако вы можете попробовать UPDATE... SET для сброса пароля root.

[ВАЖНО] Это конкретная строка, которая фиксировала мою конкретную проблему:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

Не забудьте перезагрузить таблицы грантов после этого.

В любом случае вы должны увидеть подтверждение того, что команда была успешно выполнена.

Query OK, 0 rows affected (0.00 sec)

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

Шаг 5. Перезапустите сервер базы данных.

В учебнике приводятся некоторые дополнительные шаги по перезапуску базы данных, но единственное, что я использовал, это:

Для MySQL используйте: $ sudo systemctl start mysql

Для MariaDB используйте:

$ sudo systemctl start mariadb

Теперь вы можете подтвердить, что новый пароль был применен правильно, запустив:

$ mysql -u root -p

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

Вывод

Теперь у вас есть административный доступ к серверу MySQL или MariaDB. Убедитесь, что новый корневой пароль, который вы выбрали, является сильным и безопасным, и держите его в надежном месте.

Ответ 4

Для пользователей Ubuntu/Debian

Запустите следующее для подключения от имени пользователя root (без пароля)

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

Если вы не хотите добавлять --defaults-file каждый раз, когда хотите подключиться как root, вы можете скопировать /etc/mysql/debian.cnf в свой домашний каталог:

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

а потом:

sudo mysql

Ответ 5

Для новых пользователей Linux это может быть сложной задачей. Позвольте мне обновить это с помощью mysql 8 (последняя версия доступна сейчас 8.0.12, как и 12 сентября 2018 года)

  1. Откройте файл конфигурации "mysqld.cnf" в папке "/etc/mysql/mysql.conf.d/".
  2. Добавьте skip-grant-tables в следующую строку текста [mysql] и сохраните.
  3. Перезапустите службу mysql как "sudo service mysql restart". Теперь ваш mysql свободен от какой-либо аутентификации.
  4. Подключитесь к mysql-клиенту (также известному как mysql-shell) в качестве mysql -u root -p. На данный момент пароль не вводится.
  5. выполнить привилегии flush для команды sql ;
  6. Сбросьте пароль сейчас как ALTER USER 'root' @'localhost' IDENTIFIED BY 'MyNewPassword';
  7. Теперь вернемся к нормальному состоянию; удалите эту строку "skip-grant-tables" из "mysqld.cnf" и перезапустите службу.

Это.

Ответ 6

Перепробовав ответы на все остальные вопросы, вот что у меня наконец получилось

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

Я нашел ответ в этом сообщении: https://medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06

Ответ 7

В своем рабочем столе MySQL вы можете перейти на левую боковую панель, в разделе "Управление" выберите "Пользователи и привилегии", нажмите "root" в разделе "Учетные записи пользователей", в правой части нажмите вкладку "Ограничения учетной записи", чтобы увеличить максимальные запросы, обновления и т.д., И затем щелкните вкладку "Административные роли" и установите флажки для доступа к учетной записи. Надеюсь, это поможет!

Ответ 8

Я сделал это, чтобы установить пароль root в начальной настройке MySQL в OSx. Откройте терминал.

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

Закройте терминал и откройте новый терминал. И в Linux работают следующие настройки, чтобы установить пароль root.

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

(sudo mysqld_safe --skip-grant-tables: Это не сработало для меня в первый раз, но, во-вторых, это был успех.)

Затем войдите в MySQL

mysql -u root

FLUSH PRIVILEGES;

Теперь измените пароль:

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

Перезапустить MySQL:

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

Ответ 9

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

Соответствующая часть:

В системах Ubuntu, работающих под управлением MySQL 5.7 (и более поздних версий), пользователь root MySQL настроен на аутентификацию с использованием плагина auth_socket по умолчанию, а не с паролем. Это обеспечивает большую безопасность и удобство использования во многих случаях, но также может усложнить ситуацию, когда вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к пользователю.

Чтобы использовать пароль для подключения к MySQL от имени пользователя root, вам необходимо переключить метод аутентификации с auth_socket на mysql_native_password. Для этого откройте подсказку MySQL на своем терминале:

  

sudo mysql

Затем проверьте, какой метод аутентификации каждая из ваших учетных записей пользователей MySQL использует, с помощью следующей команды:

  

SELECT user,authentication_string,plugin,host FROM mysql.user;

Выход

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

В этом примере вы можете видеть, что пользователь root действительно аутентифицируется с помощью плагина auth_socket. Чтобы настроить учетную запись root для аутентификации с помощью пароля, выполните следующую команду ALTER USER. Обязательно смените пароль на надежный пароль по вашему выбору и обратите внимание, что эта команда изменит пароль root, заданный вами на шаге 2:

  

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

Затем запустите FLUSH PRIVILEGES, чтобы сервер перезагружал таблицы грантов и применил ваши новые изменения:

  

FLUSH PRIVILEGES;

Еще раз проверьте методы аутентификации, используемые каждым из ваших пользователей, чтобы убедиться, что root больше не аутентифицируется с помощью плагина auth_socket:

  

SELECT user,authentication_string,plugin,host FROM mysql.user;

Выход

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

В этом примере вы видите, что корневой пользователь MySQL теперь аутентифицируется с использованием пароля. Как только вы подтвердите это на своем собственном сервере, вы можете выйти из оболочки MySQL:

  

exit

Ответ 10

В моем случае под Debian 10 ошибка

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

был решен (ХОРОШИЙ СПОСОБ)

sudo mysql -u root -p mysql

ПЛОХОЙ СПОСОБ:

mysql -u root -p mysql

Ответ 11

Если вы похожи на меня, и все вышеперечисленные предложения не сработали, продолжайте удалять все версии mysql на вашем компьютере, ищите все оставшиеся файлы mysql, используя эту команду sudo find / -name "mysql" и rm -rf, каждый файл или каталог с именем mysql, прикрепленным к нему. (Вы должны пропустить файлы, связанные с библиотеками языков программирования). Теперь установите свежую версию MySQL и наслаждайтесь. NB: Вы потеряете все свои данные, поэтому сначала взвесьте ваши варианты.

Ответ 12

Это может произойти, если у вас недостаточно прав. Введите su, введите пароль пользователя root и повторите попытку.

Ответ 13

Хорошо, я знаю, что это старая ветка, но если вы зашли на эту страницу через Google, как я, и ни одно из вышеперечисленных решений не сработало, ошибка оказалась на 100% глупостью с моей стороны. Я не подключался к серверу. После подключения все прошло гладко.

В случае, если это помогает узнать мои настройки, я использую Sequel Pro и пытаюсь подключиться к нему с помощью Node с помощью пакета NPM mysql. Я не думал, что мне нужно на самом деле подключаться (кроме запуска Sequel Pro), потому что я уже делал это из своего приложения.

enter image description here

Ответ 14

Убедитесь, что вы загрузили MySQL после загрузки.

mysql.server start

Если вы получите следующую ошибку: "ОШИБКА! Сервер завершает работу без обновления PID файла", убедитесь, что у вас нет других экземпляров MySQL.

См. Ответ Tombart: ошибка запуска сервера MySql "Сервер завершает работу без обновления PID файла"

Ответ 15

'Доступ запрещен для пользователя' root '@' localhost '(с использованием пароля: YES)' Эта ошибка произойдет только в том случае, если вы недавно изменили пароль, но не внесли изменений в файл config.inc.php phpmyadmin.

Поэтому я решил свою проблему, изменив пароль в файле /XAMPP/xamppfiles/phpmyadmin/config.inc.php.