
Введение
Это случается с лучшими из нас. Если вы забыли или потеряли пароль 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 theALTER USER
command doesn’t work, it’s usually indicative of a bigger problem. However, you can tryUPDATE ...
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 является надежным и безопасным, и сохраните его в надежном месте.