Ошибка MySQL:: 'Доступ запрещен для пользователя' root '@' localhost '
$ ./mysqladmin -u root -p 'redacted'
Введите пароль:
mysqladmin: подключиться к серверу с ошибкой "localhost":
'Доступ запрещен для пользователя' root '@' localhost '(с использованием пароля: YES)'
Как я могу это исправить?
Ответы
Ответ 1
- Откройте и
/etc/my.cnf
или /etc/mysql/my.cnf
, в зависимости от вашего дистрибутива. - Добавьте
skip-grant-tables
[mysqld]
skip-grant-tables
в [mysqld]
- Перезапустите Mysql
- Теперь вы можете войти в mysql, используя приведенную ниже команду
mysql -u root -p
- Запустите
mysql> flush privileges;
- Установите новый пароль с помощью команды
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
- Вернитесь в /etc/my.cnf и удалите/прокомментируйте skip-grant-tables
- Перезапустите Mysql
- Теперь вы сможете войти с новым паролем
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 года)
- Откройте файл конфигурации "mysqld.cnf" в папке "/etc/mysql/mysql.conf.d/".
- Добавьте skip-grant-tables в следующую строку текста [mysql] и сохраните.
- Перезапустите службу mysql как "sudo service mysql restart". Теперь ваш mysql свободен от какой-либо аутентификации.
- Подключитесь к mysql-клиенту (также известному как mysql-shell) в качестве mysql -u root -p. На данный момент пароль не вводится.
- выполнить привилегии flush для команды sql ;
- Сбросьте пароль сейчас как ALTER USER 'root' @'localhost' IDENTIFIED BY 'MyNewPassword';
- Теперь вернемся к нормальному состоянию; удалите эту строку "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), потому что я уже делал это из своего приложения.
Ответ 14
Убедитесь, что вы загрузили MySQL после загрузки.
mysql.server start
Если вы получите следующую ошибку: "ОШИБКА! Сервер завершает работу без обновления PID файла", убедитесь, что у вас нет других экземпляров MySQL.
См. Ответ Tombart: ошибка запуска сервера MySql "Сервер завершает работу без обновления PID файла"
Ответ 15
'Доступ запрещен для пользователя' root '@' localhost '(с использованием пароля: YES)' Эта ошибка произойдет только в том случае, если вы недавно изменили пароль, но не внесли изменений в файл config.inc.php phpmyadmin.
Поэтому я решил свою проблему, изменив пароль в файле /XAMPP/xamppfiles/phpmyadmin/config.inc.php.