Вступление
Забывание паролей происходит с лучшими из нас. Если вы забудете или потеряете пароль root к своей базе данных MySQL или MariaDB, вы все равно сможете получить доступ и сбросить пароль, если у вас есть доступ к серверу и учетная запись пользователя с включенной функциейsudo
.
В этом руководстве будет рассказано, как сбросить пароль root для более старых и новых версий MySQL и MariaDB.
Предпосылки
Чтобы восстановить ваш корневой пароль MySQL / MariaDB, вам потребуется:
-
Доступ к серверу Linux под управлением MySQL или MariaDB с пользователем sudo.
[[шаг-1 -—- определение-версии-базы-данных]] == Шаг 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
Запишите, какая база данных и какая у вас версия, так как вы будете использовать их позже. Затем вам нужно остановить базу данных, чтобы вы могли получить к ней доступ вручную.
[[step-2 -—- stop-the-database-server]] == Шаг 2 - Остановка сервера базы данных
Чтобы сменить пароль пользователя root, вам необходимо заранее выключить сервер базы данных.
Вы можете сделать это для MySQL с:
sudo systemctl stop mysql
И для MariaDB с:
sudo systemctl stop mariadb
После остановки сервера базы данных вы получите доступ к нему вручную, чтобы сбросить пароль root.
[[шаг-3 -—- перезапуск-сервер-базы-данных-без-проверки-разрешений]] == Шаг 3 - перезапуск сервера базы данных без проверки разрешений
Если вы запустите MySQL и MariaDB без загрузки информации о пользовательских привилегиях, это позволит вам получить доступ к командной строке базы данных с правами суперпользователя без предоставления пароля. Это позволит вам получить доступ к базе данных, не зная об этом.
Для этого вам необходимо запретить базе данных загружатьgrant tables, в которых хранится информация о привилегиях пользователей. Поскольку это немного угрожает безопасности, вам также следует пропустить сеть, чтобы предотвратить подключение других клиентов.
Запустите базу данных, не загружая таблицы привилегий или не включая сеть:
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>
MariaDB подскажите
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Теперь, когда у вас есть root-доступ, вы можете изменить пароль root.
[[step-4 -—- change-the-root-password]] == Шаг 4 - Изменение пароля root
Один простой способ изменить пароль root для современных версий MySQL - использовать командуALTER USER
. Однако эта команда сейчас не будет работать, потому что таблицы грантов не загружены.
Скажем серверу базы данных перезагрузить таблицы предоставления с помощью командыFLUSH PRIVILEGES
.
FLUSH PRIVILEGES;
Теперь мы можем изменить пароль root.
ДляMySQL 5.7.6 and newer, а также дляMariaDB 10.1.20 and newer используйте следующую команду.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
ДляMySQL 5.7.5 and older, а также дляMariaDB 10.1.20 и старше используйте:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Обязательно заменитеnew_password
новым выбранным паролем.
[.Примечание]##
Note: Если команда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)
Пароль был изменен, поэтому теперь вы можете остановить ручной экземпляр сервера базы данных и перезапустить его, как это было раньше.
[[step-5 -—- restart-the-database-server-normal]] == Шаг 5. Перезагрузите сервер базы данных в обычном режиме.
Сначала остановите экземпляр сервера базы данных, который вы запустили вручную на шаге 3. Эта команда выполняет поиск PID или идентификатора процесса MySQL или MariaDB и отправляетSIGTERM
, чтобы сообщить ему о плавном выходе после выполнения операций очистки. Вы можете узнать больше вthis Linux process management tutorial.
Для 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 является надежным и надежным, и храните его в надежном месте.