Как сбросить пароль root MySQL или MariaDB

Вступление

Забывание паролей происходит с лучшими из нас. Если вы забудете или потеряете пароль root к своей базе данных MySQL или MariaDB, вы все равно сможете получить доступ и сбросить пароль, если у вас есть доступ к серверу и учетная запись пользователя с включенной функциейsudo.

В этом руководстве будет рассказано, как сбросить пароль root для более старых и новых версий MySQL и MariaDB.

Предпосылки

Чтобы восстановить ваш корневой пароль MySQL / MariaDB, вам потребуется:

  • Доступ к серверу Linux под управлением MySQL или MariaDB с пользователем sudo.

[[шаг-1 -—- определение-версии-базы-данных]] == Шаг 1. Определение версии базы данных

Большинство современных дистрибутивов Linux поставляются с MySQL или MariaDB, популярной заменой, которая полностью совместима с MySQL. В зависимости от используемой базы данных и ее версии, вам потребуется использовать разные команды для восстановления пароля root.

Вы можете проверить свою версию с помощью следующей команды:

mysql --version

Вы увидите некоторые результаты, как это с MySQL:

MySQL outputmysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

Или вывод для MariaDB следующим образом:

MariaDB outputmysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

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

[[step-2 -—- stop-the-database-server]] == Шаг 2 - Остановка сервера базы данных

Чтобы сменить пароль пользователя root, вам необходимо заранее выключить сервер базы данных.

Вы можете сделать это для MySQL с:

sudo systemctl stop mysql

И для MariaDB с:

sudo systemctl stop mariadb

После остановки сервера базы данных вы получите доступ к нему вручную, чтобы сбросить пароль root.

[[шаг-3 -—- перезапуск-сервер-базы-данных-без-проверки-разрешений]] == Шаг 3 - перезапуск сервера базы данных без проверки разрешений

Если вы запустите MySQL и MariaDB без загрузки информации о пользовательских привилегиях, это позволит вам получить доступ к командной строке базы данных с правами суперпользователя без предоставления пароля. Это позволит вам получить доступ к базе данных, не зная об этом.

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

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

sudo mysqld_safe --skip-grant-tables --skip-networking &

Амперсанд в конце этой команды заставит этот процесс работать в фоновом режиме, чтобы вы могли продолжать использовать свой терминал.

Теперь вы можете подключиться к базе данных как пользователь root, который не должен запрашивать пароль.

mysql -u root

Вместо этого вы сразу увидите приглашение оболочки базы данных.

MySQL подскажите

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.

[[step-4 -—- change-the-root-password]] == Шаг 4 - Изменение пароля root

Один простой способ изменить пароль root для современных версий MySQL - использовать командуALTER USER. Однако эта команда сейчас не будет работать, потому что таблицы грантов не загружены.

Скажем серверу базы данных перезагрузить таблицы предоставления с помощью командыFLUSH PRIVILEGES.

FLUSH PRIVILEGES;

Теперь мы можем изменить пароль root.

ДляMySQL 5.7.6 and newer, а также дляMariaDB 10.1.20 and newer используйте следующую команду.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

ДляMySQL 5.7.5 and older, а также дляMariaDB 10.1.20 и старше используйте:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Обязательно заменитеnew_password новым выбранным паролем.

[.Примечание]##

Note: Если командаALTER USER не работает, это обычно указывает на более серьезную проблему. Однако вместо этого вы можете попробоватьUPDATE ... SET сбросить пароль root.

UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

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

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

OutputQuery OK, 0 rows affected (0.00 sec)

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

[[step-5 -—- restart-the-database-server-normal]] == Шаг 5. Перезагрузите сервер базы данных в обычном режиме.

Сначала остановите экземпляр сервера базы данных, который вы запустили вручную на шаге 3. Эта команда выполняет поиск PID или идентификатора процесса MySQL или MariaDB и отправляетSIGTERM, чтобы сообщить ему о плавном выходе после выполнения операций очистки. Вы можете узнать больше вthis Linux process management tutorial.

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

sudo kill `cat /var/run/mysqld/mysqld.pid`

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

sudo kill `/var/run/mariadb/mariadb.pid`

Затем перезапустите службу, используяsystemctl.

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

sudo systemctl start mysql

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

sudo systemctl start mariadb

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

mysql -u root -p

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

Заключение

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

Related