it-roy-ru.com

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

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

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

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

145
Harsh Trivedi
  1. Откройте и измените /etc/my.cnf или /etc/mysql/my.cnf, в зависимости от вашего дистрибутива.
  2. Добавить 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
219
Kishore Venkataramanan

Все решения, которые я нашел, были намного сложнее, чем необходимо, и ни одно из них не помогло мне. Вот решение, которое решило мою проблему. Нет необходимости перезапускать 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 )

357
user1878906

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

Шаг 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 без загрузки информации о пользовательских привилегиях, это позволит вам получить доступ к командной строке базы данных с правами суперпользователя без предоставления пароля. Это позволит вам получить доступ к базе данных, не зная об этом.

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

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

$ 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 Prompt

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

MariaDB [(none)]>

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

Шаг 4. Изменение корневого пароля

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

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

Заключение

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

30
Blairg23

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

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

Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
21
Fab

Для новых пользователей 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. запустить команду sql сбросить привилегии;
  6. Сбросьте пароль сейчас как ALTER USER 'root' @ 'localhost' ИДЕНТИФИЦИРОВАНО 'MyNewPassword';
  7. Теперь вернемся к нормальному состоянию; удалите эту строку "skip-grant-tables" из "mysqld.cnf" и перезапустите службу.

Вот и все.

12
Amit Kr

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

4
Colleen Purcell

Я сделал это, чтобы установить мой пароль 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
2
Sadee