Как изменить (сбросить) root пароль в MySQL

Содержимое статьи:

Довольно часто происходит такая ситуация, что пароль для учетной записи root в MySQL необходимо восстановить, поменять или сбросить. Хорошо, если он известен, но бывают случаи, когда пароль был утерян или неизвестен с самого начала. В данной статье пойдет речь о том, как этот пароль восстановить, имея доступ к серверу, на котором запущен mysql-server для обоих случаев, когда пароль о учетной записи root ИЗВЕСТЕН и НЕ ИЗВЕСТЕН.

Как поменять пароль root в MySQL

Если пароль root ИЗВЕСТЕН

Возьмем самую простую ситуацию, когда пароль от учетной записи root вам известен и все что нужно сделать, это просто его поменять. Чтобы задать новый пароль для учетной записи root, необходимо проделать следующие действия: В том случае, если вы пользуетесь каким-либо веб-интерфейсом, например, phpMyAdmin, то тогда вы можете пропустить пункт 1 и сразу же выполнить запрос для нужной версии MySQL (пункт 2) прямо из интерфейса phpMyAdmin (вкладка SQL).

1) Подключаемся в консоль MySQL сервера с правами root (не забываем ввести пароль, после появления соответствующего запроса):

mysql -u root -p

2) Меняем пароль для пользователя root:

Для MySQL версий 5.7.6 и новее (5.7.7, 5.7.8…)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';

Для MySQL версий 5.7.5 и старее (5.7.4, 5.7.3…)

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEW_PASSWORD');

NEW_PASSWORD — это пароль, который вам необходимо поменять на свой собственный.
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:

Query OK, 0 rows affected (0.01 sec)

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

UPDATE mysql.user SET authentication_string=PASSWORD('NEW_PASSWORD'), plugin='mysql_native_password' WHERE User='root';

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

Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

3) Перезагружаем привилегии, чтобы изменения вступили в силу:

flush privileges;

4) Для выхода из консоли MySQL сервера выполняем команду выхода:

exit;

После этого, пароль должен поменяться.

Если пароль root НЕ ИЗВЕСТЕН

Если вы не знаете текущий пароль root (потеряли, забыли) в MySQL, то придется пойти чуть более сложным путем, чем описанные действия выше:

1) Останавливаем mysqld:

sudo service mysql stop

2) Проверяем, что нет запущенных процессов mysqld:

ps -eaf|grep mysqld

Если все нормально, то вывод команды должен состоять лишь из одной строки, примерно такого содержания:

root     24902  1530  0 11:41 pts/0    00:00:00 grep --color=auto mysqld

3) Создаем каталог /var/run/mysqld для запуска mysqld в safe режиме из консоли

sudo mkdir /var/run/mysqld

4) Делаем владельцем данного каталога пользователя mysql (чтобы не было проблем с правами)

sudo chown mysql /var/run/mysqld

5) Запускаем MySQL в ручном режиме из консоли, пропуская проверку прав (опция —skip-grant-tables). А также отключаем доступ к серверу через TCP/IP (с помощью опции —skip-networking), чтобы злоумышленник не мог воспользоваться тем, что мы отключили проверку прав пользователей. При использовании данной опции, доступ к серверу становится возможным только через localhost.

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

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

# sudo mysqld_safe --skip-grant-tables --skip-networking &
[1] 26152
2019-05-02T14:17:14.807620Z mysqld_safe Logging to syslog.
2019-05-02T14:17:14.815041Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2019-05-02T14:17:14.856418Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

6) Подключаемся из консоли к серверу mysqld и выбираем базу данных mysql:

mysql -u root mysql

7) Используем плагин mysql_native_password, иначе в некоторых случаях будем получать ошибку «ERROR 1524 (HY000): Plugin ‘auth_socket’ is not loaded«, а нам это не нужно:

update user set plugin="mysql_native_password";

Вывод в результате выполнения данной команды должен быть примерно таким:

Query OK, 0 rows affected (0.00 sec)
Rows matched: 4 Changed: 0 Warnings: 0

8) Перезагружаем привилегии:

flush privileges;

9) Меняем пароль для нужного пользователя, в нашем случае это root:

Для MySQL версий 5.7.6 и новее (5.7.7, 5.7.8…)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';

Для MySQL версий 5.7.5 и старее (5.7.4, 5.7.3…)

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEW_PASSWORD');

NEW_PASSWORD — это пароль, который вам необходимо поменять на свой собственный.
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:

Query OK, 0 rows affected (0.01 sec)

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

UPDATE mysql.user SET authentication_string=PASSWORD('NEW_PASSWORD'), plugin='mysql_native_password' WHERE User='root';

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

Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

9) После чего, вводим команду exit для отключения:

exit;

10) Выключаем запущенный в ручном режиме Mysqld сервер:

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Если все пройдет успешно, то вывод должен быть примерно таким:

2019-05-02T14:30:03.404615Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
[1]+  Done                    sudo mysqld_safe --skip-grant-tables --skip-networking

Если же команда не сработала и вы получаете вот такую (или любую другую) ошибку:

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

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

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

11) Проверяем, что нет запущенных процессов mysqld:

ps -eaf|grep mysqld

12) Запускаем Mysql-server в нормальном режиме:

sudo service mysql start

Добавить комментарий