Поиск по сайту:

Как сбросить корневой пароль MySQL или MariaDB


Введение

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

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

Предпосылки

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

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

Шаг 1 — Определение версии базы данных

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

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

  1. mysql --version

Вы увидите такой вывод с MySQL:

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

Или выведите вот так для MariaDB:

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

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

Шаг 2 — Остановка сервера базы данных

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

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

  1. sudo systemctl stop mysql

И для MariaDB с:

  1. sudo systemctl stop mariadb

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

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

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

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

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

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

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

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

  1. mysql -u root

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

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

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

Шаг 4 — Изменение корневого пароля

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

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

  1. FLUSH PRIVILEGES;

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

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

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

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

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

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

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

  1. 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 используйте:

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

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

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

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

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

  1. sudo systemctl start mysql

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

  1. sudo systemctl start mariadb

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

  1. mysql -u root -p

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

Заключение

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