Как изменить (сбросить) root пароль в MySQL
- AJIekceu4
- 02.05.2019
- 66 008
- 9
- 28.01.2021
- 55
- 53
- 2
Довольно часто происходит такая ситуация, что пароль для учетной записи root в MySQL необходимо восстановить, поменять или сбросить. Хорошо, если он известен, но бывают случаи, когда пароль был утерян или неизвестен с самого начала. В данной статье пойдет речь о том, как этот пароль восстановить, имея доступ к серверу, на котором запущен mysql-server для обоих случаев, когда пароль о учетной записи root ИЗВЕСТЕН и НЕ ИЗВЕСТЕН.
Как поменять пароль root в MySQL
Если пароль root ИЗВЕСТЕН
Возьмем самую простую ситуацию, когда пароль от учетной записи root вам известен и все что нужно сделать, это просто его поменять. Чтобы задать новый пароль для учетной записи root, необходимо проделать следующие действия:
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
Если все нормально, то вывод команды должен состоять лишь из одной строки, примерно такого содержания:
root 24902 1530 0 11:41 pts/0 00:00:00 grep --color=auto mysqld
12) Запускаем Mysql-server в нормальном режиме:
sudo service mysql start
И пытаемся подключиться к нашему серверу с новым паролем, который мы установили.
Добавить комментарий