Как сбросить корневой пароль MySQL или MariaDB
Введение
Забывание паролей случается с лучшими из нас. Если вы забудете или потеряете пароль root для своей базы данных MySQL или MariaDB, вы все равно сможете получить доступ и сбросить пароль, если у вас есть доступ к серверу и учетная запись пользователя с поддержкой sudo
.
В этом руководстве рассказывается, как сбросить пароль root для старых и новых версий MySQL и MariaDB.
Предпосылки
Чтобы восстановить корневой пароль MySQL/MariaDB, вам потребуется:
- Доступ к серверу Linux под управлением MySQL или MariaDB с пользователем sudo.
Шаг 1 — Определение версии базы данных
Большинство современных дистрибутивов Linux поставляются либо с MySQL, либо с MariaDB, популярной заменой, полностью совместимой с MySQL. В зависимости от используемой базы данных и ее версии вам потребуется использовать разные команды для восстановления пароля root.
Вы можете проверить свою версию с помощью следующей команды:
- mysql --version
Вы увидите такой вывод с MySQL:
MySQL outputmysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Или выведите вот так для MariaDB:
MariaDB outputmysql 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
Вместо этого вы сразу увидите приглашение оболочки базы данных.
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
.
- FLUSH PRIVILEGES;
Теперь мы действительно можем изменить пароль root.
Для MySQL 5.7.6 и новее, а также для MariaDB 10.1.20 и новее используйте следующую команду.
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Для MySQL 5.7.5 и старше, а также для MariaDB 10.1.20 и старше используйте:
- SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Обязательно замените new_password
новым выбранным паролем.
Примечание. Если команда ALTER USER
не работает, это обычно указывает на более серьезную проблему. Однако вместо этого вы можете попробовать UPDATE ... SET
сбросить пароль root.
- UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Не забудьте перезагрузить таблицы грантов после этого.
В любом случае вы должны увидеть подтверждение успешного выполнения команды.
OutputQuery 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 `/var/run/mariadb/mariadb.pid`
Затем перезапустите службу с помощью systemctl
.
Для MySQL используйте:
- sudo systemctl start mysql
Для MariaDB используйте:
- sudo systemctl start mariadb
Теперь вы можете убедиться, что новый пароль был применен правильно, запустив:
- mysql -u root -p
Теперь команда должна запросить новый назначенный пароль. Введите его, и вы должны получить доступ к приглашению базы данных, как и ожидалось.
Заключение
Теперь у вас восстановлен административный доступ к серверу MySQL или MariaDB. Убедитесь, что новый пароль root, который вы выбрали, надежный и безопасный, и храните его в надежном месте.