Как сбросить/изменить пароль корня MariaDB или MySQL с помощью SSH

Введение

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

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

Требования

Для восстановления пароля root MySQL/MariaDB вам потребуется следующее:

  • Sudo доступ к Linux-серверу, на котором запущен MySQL или MariaDB.

Шаг 1: Проверка версии базы данных

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

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

$ 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

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

Шаг 3: Перезапуск сервера базы данных без проверки разрешений

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

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

Запустите базу данных, не разрешая работу в сети и не загружая таблицы грантов:

$ 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>
Выходные данные MariDB
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

Теперь, когда у вас есть root-доступ, вы можете обновить пароль root.

Шаг 4: Изменение пароля root

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

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

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');

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

Note: If the ALTER USER command doesn’t work, it’s usually indicative of a bigger problem. However, you can try UPDATE ... SET to reset the root password instead.
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User="root" AND Host="localhost";

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

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

Output
Query OK, 0 rows affected (0.00 sec)

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

Шаг 5: Обычный перезапуск сервера базы данных

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

Для MySQL используйте следующее:
$ sudo kill 'cat /var/run/mysqld/mysqld.pid'
Для MariaDB используйте следующее:
$ sudo kill 'cat /var/run/mariadb/mariadb.pid'

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

Для MySQL используйте следующее:
$ sudo systemctl start mysql
Для MariaDB используйте следующее:
$ sudo systemctl start mariadb

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

$ mysql -u root -p

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

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *