6.5.5 Как восстановить пароль root MySQL
При потери пароля root от MySQL его можно легко восстановить имея root доступ к самому серверу. Выполняется это с помощью входа в MySQL в безопасном режиме, о чем ниже.
Учите: пароль root на сервере и пароль root MySQL это два разных пароля.
Пошаговая инструкция на примере Ubuntu
Важно: если у Вас система на базе ОС+ISPManager4, обязательно ознакомьтесь со вторым разделом этой статьи.
1. Сначала остановите службу MySQL. Для некоторых других систем семейства Linux команды могут отличаться:
sudo service mysql stop
2. Запустите MySQL без загрузки таблиц прав доступа:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Дополнительно: что делать если mysqld_safe
не запускается? Распространенными решениями являются:
Используйте sudo mysqld
Альтернативная команда выглядит следующим образом:
sudo mysqld --skip-grant-tables --skip-networking &
Отключите monit или подобные сервисы
На серверах с панелью ISPManager и с многим другими панелями используется monit или аналоги. В таком случае сначала необходимо отключить мониторинг процесса mysqld командой monit unmonitor mysqld
и только затем убить процесс. После чего включить его снова monit monitor mysqld
.
Или временно отключить monit вовсе:
service monit stop
Запущенные процессы MySQL
Уже запущенные параллельные процессы MySQL могут создать необходимость их ручного прекращения. Сначала получим их список командой:
ps aux | grep mysql
Затем остановим процессы следующей командой, где <PID>
замените идентификатором процесса:
sudo kill -9 <PID>
Недостаточно прав или проблемы с директориями
Иногда mysqld_safe
не запускается из-за проблем с правами или отсутствующих директорий. Попробуйте:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
Также убедитесь, что /var/run/mysqld/
существует и имеет правильные права:
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
3. Теперь подключитесь к серверу MySQL без пароля:
mysql -u root
4. Сначала переключитесь на базу данных mysql:
USE mysql;
5. Сначала нужно идентифицировать сколько пользователей root вообще существует в нашем MySQL. Сделать это можно следующим образом:
SELECT host, user, password FROM user WHERE user = 'root';
Что выдаст следующий результат:
Пароль нужно будет сбросить для каждого из этих пользователей, если Ваш проект не требует иначе.
6. Затем необходимо сбросьте пароль на новый для каждого пользователя root (замените NewPassword на пароль и localhost на нужную переменную host, список которых Вы получили в предыдущем шаге):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
Для MySQL 5.7 и более ранних версий
UPDATE user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';
FLUSH PRIVILEGES;
5. Перезапустите MySQL в нормальном режиме. Для этого выйдите из MySQL:
EXIT;
И остановите MySQL:
sudo service mysql stop
6. Запустите ее снова:
sudo service mysql start
7. Проверьте доступ. Попробуйте войти с новым паролем:
mysql -u root -p
Введите новый пароль. Если вход выполнен успешно, сброс завершён.
Нюансы с панелями управления
На серверах с установленной панелью управления про смену пароля root MySQL нужно также уведомить и саму панель, иначе она не сможет нормально функционировать.
Ниже мы приведем примеры для релевантных панелей управления.
ISPManager4
1. Перейдите в раздел Серверы баз данных под root, выберите MySQL и нажмите Изменить:
2. Установите новый пароль root MySQL вместо старого:
3. Перезапустите панель командой killall -9 ispmgr
или полноценной перезагрузкой сервера.