Из моего ответа здесь , подумал, что это может быть полезно:
Я пробовал много шагов, чтобы исправить эту проблему. Существует так много источников возможных решений этой проблемы, что трудно отфильтровать смысл от бессмыслицы. Я наконец нашел хорошее решение здесь :
Шаг 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
Теперь команда должна запросить вновь назначенный пароль. Введите его, и вы должны получить доступ к приглашению базы данных, как и ожидалось.
Заключение
Теперь у вас восстановлен административный доступ к серверу MySQL или MariaDB.Убедитесь, что выбранный вами новый пароль root является надежным и надежным, и храните его в надежном месте.