Сброс пароля root в MySQL и MariaDB

Материал из Home wiki
Перейти к навигации Перейти к поиску

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

Данное руководство поможет сбросить пароль пользователя root в MySQL и MariaDB.


Требования

Чтобы восстановить пароль MySQL или MariaDB, нужен:

Доступ к серверу, на который установлена СУБД.
Пользователь с поддержкой sudo.


Определение версии MySQL и MariaDB

Большинство современных дистрибутивов Linux поставляются с MySQL или MariaDB (аналог MySQL,полностью совместимый с этой БД). Способ восстановления пароля во многом зависит от версии СУБД.

Чтобы узнать версию программы, введите:

 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

Запишите название и версию СУБД: эти данные пригодятся в дальнейшем.


Остановка сервера БД

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

# MySQL
sudo systemctl stop mysql
# MariaDB
sudo systemctl stop mariadb

В моем варианте используется команда service

 # MySQL
 sudo service mysql stop 
 # MariaDB
 sudo service mysql stop


Перезапуск базы данных без проверки привилегий

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

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

Чтобы запустить БД без таблиц привилегий, введите:

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.
# MariaDB
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


Изменение пароля root

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

Перезапустите таблицы привилегий с помощью команды:

FLUSH PRIVILEGES;

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

В MySQL 5.7.6+ и MariaDB 10.1.20+ используйте команду:

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

Примечание: Если команда ALTER USER не работает, это обычно свидетельствует о более серьезной проблеме. Вы можете попробовать изменить пароль с помощью UPDATE … SET.

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

В MySQL 5.7.5, MariaDB 10.1.20 и более ранних версиях СУБД введите:

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

Примечание: Вместо new_password укажите новый пароль пользователя root.

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

После обновления пароля на экране должен появиться такой вывод:

Query OK, 0 rows affected (0.00 sec)

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


Перезапуск сервера

Остановите сервер баз данных, запущенный вручную в разделе 3. Эта команда находит (ID процесса) MySQL или MariaDB и отправляет SIGTERM, чтобы выйти после выполнения операции очистки.

# MySQL
sudo kill `cat /var/run/mysqld/mysqld.pid`
# MariaDB
sudo kill `/var/run/mariadb/mariadb.pid`

Теперь можно перезапустить сервис:

# MySQL
sudo systemctl start mysql
# MariaDB
sudo systemctl start mariadb

В моем понимании достаточно выполнить

service mysql restart

Убедитесь, что новый пароль работает:

mysql -u root -p

Команда должна запросить пароль пользователя root.


Заключение

Теперь вы знаете, как восстановить доступ суперпользователя к серверу MySQL и MariaDB.

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