Может так случиться, что вы забудете или потеряете свой root пароль MySQL, но не стоит отчаиваться – его можно сбросить и восстановить доступ. Что нам нужно знать так это то, что пароль хранится в таблице пользователей. Это означает, что нам нужно найти способ обойти аутентификацию MySQL, чтобы мы могли обновить запись пароля.
К счастью, это легко сделать, и это руководство проведет вас через процесс восстановления или сброса пароля root в версии MySQL 8.0.
Согласно документации по MySQL, существует два способа сброса корневого пароля MySQL и в этой статье мы рассмотрим оба.
Сброс MySQL root пароля с использованием –init-file
Один из способов сброса пароля root - создать локальный файл, а затем запустить службу MySQL, используя параметр --init-file, как показано ниже:
# vim /home/user/init-file.txt
Важно убедиться, что файл доступен для чтения пользователю mysql. В этот файл вставьте следующее и измените «new_password» на пароль, который вы хотите использовать:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Теперь убедитесь, что служба MySQL остановлена. Вы можете сделать следующее:
# systemctl stop mysqld.service # для дистрибутивов использующих systemd # /etc/init.d/mysqld stop # для дистрибутивов использующих init
Далее запустите следующее:
# mysqld --user=mysql --init-file=/home/user/init-file.txt --console
Это запустит службу MySQL и во время процесса выполнит созданный вами файл инициализации, и, следовательно, пароль для пользователя root будет обновлен. Обязательно удалите файл после сброса пароля.
После этого обязательно остановите сервер и запустите его как обычно.
# systemctl stop mysqld.service # для дистрибутивов использующих system # systemctl restart mysqld.service # для дистрибутивов использующих systemd # /etc/init.d/mysqld stop # для дистрибутивов использующих init # /etc/init.d/mysqld restart # для дистрибутивов использующих init
Теперь вы должны иметь возможность подключиться к серверу MySQL от имени пользователя root, используя новый пароль.
# mysql -u root -p
Сброс MySQL root пароля с использованием –skip-grant-tables
Второй вариант - запустить службу MySQL с параметром --skip-grant-tables. Это менее безопасно, так как пока служба запускается таким образом, все пользователи могут подключаться без пароля.
Если сервер запущен --skip-grant-tables, опция для --skip-network активируется автоматически, поэтому удаленные подключения не будут доступны.
Сначала убедитесь, что служба MySQL остановлена.
# systemctl stop mysqld.service # для дистрибутивов использующих systemd # /etc/init.d/mysqld stop # для дистрибутивов использующих init
Затем запустите службу с помощью следующей опции.
# mysqld --skip-grant-tables --user=mysql &
Теперь вы можете подключиться к серверу MySQL, просто используя:
# mysql
Поскольку управление учетными записями отключается при запуске службы с параметром --skip-grant-tables, нам придется перезагрузить гранты. Таким образом, мы сможем изменить пароль позже:
# FLUSH PRIVILEGES;
Теперь вы можете выполнить следующий запрос, чтобы обновить пароль. Обязательно замените «new_password» реальным паролем, который вы хотите использовать.
# ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';
Теперь остановите сервер MySQL и запустите его как обычно.
# systemctl stop mysqld.service # для дистрибутивов использующих system # systemctl restart mysqld.service # для дистрибутивов использующих systemd # /etc/init.d/mysqld stop # для дистрибутивов использующих init # /etc/init.d/mysqld restart # для дистрибутивов использующих init
Теперь вы сможете подключиться с новым паролем:
# mysql -u root –p