6.5.5 Как восстановить пароль root MySQL

MySQL Restore Banner

При потери пароля 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';

Что выдаст следующий результат:

MySQL Password Restore, количество 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 и нажмите Изменить:

ISPManager, Серверы баз данных

2. Установите новый пароль root MySQL вместо старого:

ISPManager, Серверы баз данных, Изменить

3. Перезапустите панель командой killall -9 ispmgr или полноценной перезагрузкой сервера.