Сброс пароля root в MySQL и MariaDB
Если вы забыли или потеряли пароль пользователя 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.
Помните, что новый пароль должен быть сложным и уникальным.