Ошибка MySQL: : ‘Доступ запрещён для пользователя ‘root’@’localhost’ [закрыто]

Вопрос или проблема

Рассмотрите:

./mysqladmin -u root -p** '_redacted_'  

Вывод (включая ввод пароля):

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

mysqladmin: ошибка соединения с сервером ‘localhost’:
‘Доступ запрещен для пользователя ‘root’@’localhost’ (используется пароль: ДА)’

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

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

sudo mysql

-- для MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

-- для MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

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

Теперь вы должны иметь возможность войти как root. Дополнительную информацию можно найти в документации MySQL или документации MariaDB.

(Выйдите из консоли MySQL с помощью Ctrl + D или введя exit.)

  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

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

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

В системах Ubuntu, работающих на MySQL 5.7 (и более поздних версиях), корневой пользователь 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)

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

exit

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

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

mysql --version

Вы увидите вывод, подобный этому для MySQL:

mysql  Вер 14.14 Distrib 5.7.16, для Linux (x86_64) с использованием  EditLine wrapper

Или вывод, подобный этому для MariaDB:

mysql  Вер 15.1 Distrib 5.5.52-MariaDB, для Linux (x86_64) с использованием 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

Введите 'help;' или '\h' для помощи. Введите '\c', чтобы очистить текущее входное выражение.

mysql>

Подсказка MariaDB

Введите 'help;' или '\h' для помощи. Введите '\c', чтобы очистить текущее входное выражение.

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";

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

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

Запрос выполнен, 0 строк затронуто (0.00 сек)

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

Шаг 5: Обычный перезапуск сервера базы данных

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

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

sudo systemctl start mysql

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

sudo systemctl start mariadb

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

mysql -u root -p

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

Заключение

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

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

sudo mysql -- Он не запрашивает у меня никакого пароля

-- Затем в консоли MariaDB/MySQL:
update mysql.user set plugin = 'mysql_native_password' where User="root";
FLUSH PRIVILEGES;
exit;

Я нашел ответ в блоге Решено: Ошибка “Доступ запрещен для пользователя ‘root’@’localhost'” MySQL — codementor.tech (Medium).

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

(Это также может работать на других дистрибутивах, особенно основанных на 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

По своему опыту, если вы запустите без sudo, это не сработает. Поэтому убедитесь, что ваша команда такова;

sudo mysql -uroot -p

Для новых пользователей Linux это может быть сложной задачей. Позвольте мне обновить это с MySQL 8 (последняя версия доступна сейчас — 8.0.12 на 2018-09-12)

  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 команду flush privileges;
  6. Сбросьте пароль сейчас, используя ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘MyNewPassword’;
  7. Теперь давайте вернемся к нормальному состоянию; удалите эту строку “skip-grant-tables” из “mysqld.cnf” и перезапустите службу.

Вот и всё.

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

ERROR 1698 (28000): Доступ запрещен для пользователя 'root'@'localhost'

была решена (хороший способ)

sudo mysql -u root -p mysql

Плохой способ:

mysql -u root -p mysql

Моя станция здесь:

  • UBUNTU 21.04

  • PHP 5.6.40-57

  • MYSQL 5.7.37

Давайте настроим это

nano /etc/mysql/mysql.conf.d/mysqld.cnf

внизу напишите это

skip-grant-tables

перезагрузите его

service mysql restart

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

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

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

sudo mysql

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

Источник: Phoenixnap – Доступ запрещен для пользователя root localhost

В вашем MySQL Workbench вы можете перейти в левую боковую панель, в разделе Управление выберите “Пользователи и привилегии”, нажмите root под Учетные записи пользователей, в правом разделе нажмите на вкладку “Ограничения учетной записи”, чтобы увеличить максимальное количество запросов, обновлений и т.д., а затем нажмите на вкладку “Административные роли” и отметьте флажки, чтобы предоставить учетной записи доступ.

Ух – ничего не сработало для меня! У меня машина CentOS 7.4, работающая на MariaDB 5.5.64.

Мне пришлось сделать это сразу после установки MariaDB с YUM;

systemctl restart mariadb
mysql_secure_installation

Команда mysql_secure_installation проведет вас через несколько шагов, включая “Задать пароль root? [Y/n]”. Просто скажите “y” и дайте ему пароль. Ответьте на другие вопросы по своему усмотрению.

Затем вы сможете войти с вашим паролем, используя

mysql -u root -p

Он выживет

systemctl restart mariadb

Ключ

Затем я проверил исходный код /bin/mysql_secure_installation, чтобы выяснить, как он мог волшебным образом изменить пароль root, и ни один из других ответов здесь не смог этого сделать. Важный момент:

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User="root";"

…Говорит SET Password=..., а не SET authentication_string = PASSWORD.... Таким образом, правильная процедура для этой версии (5.5.64) следующая:

Войдите с помощью mysql -u root -p, используя пароль, который вы уже установили.

Или остановите базу данных и запустите ее с помощью:

mysql_safe --skip-grant-tables --skip-networking &

С подсказки mysql>:

use mysql;
select host,user,password from user where user="root";
(посмотрите на ваши существующие пароли для root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user="root" AND host="localhost";
select host,user,password from user where user="root";
flush privileges;
quit;

Убейте запущую mysqld_safe. Перезапустите MariaDB. Войдите как root: mysql -u -p. Используйте свой новый пароль.

Если хотите, вы можете установить все пароли root одновременно. Я думаю, что это мудро:

mysql -u root -p

(войти в систему)
use mysql;
select host,user,password from user where user="root";
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user="root";
select host,user,password from user where user="root";
flush privileges;
quit;

Это обновит все пароли root: т.е. для “localhost”, “127.0.0.1” и “::1”

В будущем, когда я перейду на RHEL 8 или что-то еще, я постараюсь запомнить, чтобы проверить /bin/mysql_secure_installation и посмотреть, как это сделали ребята, которые настраивали MariaDB для этой ОС.

Исправление для macOS

  1. Установите MySQL с https://downloads.mysql.com/archives/community/ (8.x — последняя на данный момент версия, но убедитесь, что версия совместима с версией macOS)

  2. Установите пароль для root (пускай <root-password> будет паролем) во время установки (не забудьте запомнить пароль!)

  3. Выберите опцию Использовать устаревшее шифрование пароля (это то, что я использовал, и не пробовал опцию Использовать сильное шифрование пароля)

  4. Найдите и откройте MySQL.prefPane (используйте инструмент поиска)

    1. Выберите вкладку Конфигурация
    2. Нажмите на опцию Выбрать в разделе Файл конфигурации
      1. Выберите /private/etc/my.cnf
  5. Из терминала откройте новый или существующий файл с именем /etc/my.cnf (vi /etc/my.cnf) и добавьте следующий контент:

     [mysqld]
     skip-grant-tables
    
  6. Перезапустите mysqld следующим образом:

    1. ps aux | grep mysql
    2. kill -9 <pid1> <pid2> ... (получите pid всех связанных с MySQL процессов)
  7. mysqld перезапустится автоматически

  8. Убедитесь, что опция установлена, запустив следующее из терминала:

     ps aux | grep mysql
    
     > mysql/bin/mysqld ... --defaults-file=/private/etc/my.cnf ... (вывод)
    
  9. Выполните следующую команду для подключения (пусть mysql-<версия>-macos<версия>-x86_64 будет папкой, в которой установлен MySQL. Чтобы получить фактическую папку, выполните ls /usr/local/ и скопируйте имя папки):

     /usr/local/mysql-<версия>-macos<версия>-x86_64/bin/mysql -uroot -p<root-password>
    

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

Теперь установите свежую версию MySQL и наслаждайтесь. Примечание: вы потеряете все свои данные, поэтому сначала оцените свои варианты.

Иногда по умолчанию устанавливается временный пароль при установке – как упоминается в документации. Это можно подтвердить с помощью следующей команды.

sudo grep 'temporary password' /var/log/mysqld.log

Это может произойти, если у вас недостаточно привилегий.

Введите su, введите пароль root и попробуйте снова.

После множества попыток с следующим ответом:

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

И подобными ответами, мой терминал по-прежнему выдавал мне следующую ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии вашего сервера MariaDB для правильного синтаксиса, используемого рядом…

Поэтому после исследований в интернете эта строка решила мою проблему и позволила изменить пароль пользователя root:

sudo mysqladmin --user=root password "[ваш пароль]"

windows :

cd \Ampps\mysql\bin :

mysql.exe -u root -pmysql

после запуска mysql (вы можете видеть оболочку, подобную этой mysql> )
используйте этот запрос :

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

попробуйте снова получить доступ с root root

Одна из вещей, которую стоит проверить, — это фильтр from-host. По умолчанию он может быть “localhost”. Пытаетесь подключиться с удаленного клиента? Измените его на “%”.

введите описание изображения здесь

На Arch Linux

Пакет: mysql 8.0.29-1

Что сработало для меня:

  1. Отредактируйте файл my.cnf, который обычно можно найти по адресу /etc/mysql/my.cnf и добавьте skip-grant-tables в конце файла.

  2. Перезапустите службу mysql, вызвав sudo systemctl restart mysqld

  3. Убедитесь, что служба mysql стартовала правильно, вызвав sudo systemctl status mysqld

  4. Войдите в mysql, используя ‘root’, вызвав mysql -u root -p

  5. Сбросьте привилегии, вызвав flush privileges;

  6. Создайте нового пользователя с помощью CREATE USER 'root'@'localhost' IDENTIFIED BY 'rootpassword';

  7. (Если вы планируете использовать эту базу данных с PHP), вы должны вместо этого использовать CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';

  8. Проверьте, отобразились ли ваши изменения в базе данных, вызвав следующее по порядку:

    • use mysql;
    • SELECT User, password_last_changed FROM user;
  9. Выйдите из консоли mysql и закомментируйте/удалите skip-grant-tables, отредактировав файл my.cnf (см. шаг 1 для местоположения)

  10. Перезапустите службу mysql (см. шаг 2 и шаг 3)

И это всё.

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

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

Введите описание изображения здесь

Я получал ту же ошибку, настраивая версию mysql-8 zip. Наконец, я переключился на версию installer, которая работала безупречно. Во время установки есть запрос на установку пароля для root. После установки он точно работает.

Введите описание изображения здесь

Согласно официальной документации MariaDB, в MariaDB 10.4.3 и более поздних версиях плагин аутентификации unix_socket установлен по умолчанию.

Чтобы отключить его и вернуть предыдущий метод аутентификации mysql_native_password, добавьте строку ниже в секцию [mysqld] файла my.cnf:

[mysqld]
unix_socket=OFF

А затем выполните:

mysql_install_db --auth-root-authentication-method=normal

А затем запустите mysqld

Эта команда будет работать нормально:

mysqladmin -u root password CHANGEME

Для дополнительной информации смотрите Настройка mysql_install_db для возвращения к предыдущему методу аутентификации.

Я пытался использовать Docker Desktop на Mac, чтобы запустить 5.7.35, и эта конфигурация docker-compose.yml позволила это сделать:

В частности, это было добавление строки…

command: –default-authentication-plugin=mysql_native_password

…что и сработало

version: '3.3'
services:
  mysql_db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'your_password'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - ~/your/volume/path:/var/lib/mysql

Столкнувшись с аналогичной проблемой при интеграции с Spring Boot, проблема в моем случае была довольно простой.

Я пытался получить доступ к пользователю root, но предоставлял неверный пароль в своем application.properties

Решение таково

  • Либо измените пользователя с root на фактического пользователя, с которым вы хотите получить доступ с предоставленным паролем

Пример для моего случая: я указал root вместо budget в качестве имени пользователя.

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/budgetdb
spring.datasource.username=budget
spring.datasource.password=@@@password1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • Либо предоставьте правильный пароль для пользователя root, что является потенциальной причиной проблемы.

    spring.jpa.hibernate.ddl-auto=create
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/budgetdb
    spring.datasource.username=root
    spring.datasource.password=@@@Budget9650
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    

Аргумент ‘-p’ не ожидает пробел между именем аргумента и значением.

Вместо

./mysqladmin -u root -p 'redacted'

Используйте

./mysqladmin -u root -p'redacted'

Или просто

./mysqladmin -u root -p

что запросит вас ввести пароль.

Решение: Сдавайтесь!

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

Из-за недостатка терпения к тому, чтобы заставить это работать, я отправил команду на установку SQLite, которая использует всего 450 КБ, и это сработало прекрасно с самого начала.

Если у вас нет терпения святого, выберите SQLite и сэкономьте себе много времени, усилий, боли и места на диске..!

Ответ или решение

Ошибка MySQL: "Access denied for user ‘root’@’localhost’" – Решение проблемы с доступом

Ошибка "Access denied for user ‘root’@’localhost’" часто возникает при попытке доступа к серверу MySQL или MariaDB. Этот документ объясняет причины ошибки и предлагает решения для её устранения.

Природа ошибки

Ошибка возникает, когда сервер MySQL или MariaDB не позволяет подключение пользователя root с указанными учетными данными. Возможные причины включают:

  1. Неверные учетные данные: Убедитесь, что вы вводите корректный пароль для пользователя root.
  2. Метод аутентификации: В MySQL версии 5.7 и выше по умолчанию используется плагин аутентификации auth_socket, который требует, чтобы пользователь входил в систему через UNIX-пользователя root, а не по паролю.
  3. Проблемы с конфигурацией: Настройки сервера могли быть неправильно настроены, что приводит к отказу в доступе.

Шаги для решения проблемы

1. Проверьте учетные данные

Убедитесь, что вы используете правильное имя пользователя и пароль. Попробуйте выполнить команду в терминале:

mysql -u root -p

При этом будет предложено ввести пароль. Убедитесь, что между -p и паролем нет пробела.

2. Проверка метода аутентификации

Если вы имеете доступ к серверу через sudo, выполните:

sudo mysql

Затем проверьте метод аутентификации:

SELECT user, host, plugin FROM mysql.user;

Если для пользователя root установлен плагин auth_socket, измените его на mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'новый_пароль';
FLUSH PRIVILEGES;

Теперь попробуйте подключиться снова, введя новый пароль.

3. Перезапуск MySQL без проверки привилегий

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

  1. Остановите службу MySQL:
sudo systemctl stop mysql
  1. Запустите MySQL в безопасном режиме:
sudo mysqld_safe --skip-grant-tables &
  1. Подключитесь к MySQL:
mysql -u root
  1. Внутри MySQL выполните:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';
  1. Перезапустите MySQL:
sudo systemctl restart mysql

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

Заключение

Ошибка "Access denied for user ‘root’@’localhost’" может быть вызвана множеством причин, включая неверные учетные данные и неправильные настройки аутентификации. Примеры выше представляют несколько возможных решений. Обязательно проверяйте каждый шаг внимательно, чтобы убедиться, что вы устраните проблему на своём сервере MySQL или MariaDB.

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

Оцените материал
Добавить комментарий

Капча загружается...