|
Собствено не раз забывал пароль рута на mysql, да и поленившись поставить нормальный пароль,
потом хочется его сменить. В общем у меня смена его не проходит гладко, поэтому здесь расскажу
про восстановление:
/etc/init.d/mysql stop
-
/usr/bin/mysqld_safe --user=root --skip-grant-tables
Если необходимо использовать эту же консоль далее, то в конце команды через пробел пишем амперсанд.
-
Можно отредактировать файл:
/etc/mysql/mysql.conf.d/mysqld.cnf
написать в секцию [mysqld] строку skip-grant-tables и запустить mysql (НЕ забудьте закомментировать эту строку после смены пароля и перезапустить mysql)
-
Если на предыдущем этапе Вы встретили что-то типа такого:
mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
Тогда делаем следующее:
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
- Открываем ещё одну консоль (или Ctrl+Z в текущей):
mysql -u root
-
Для MySQL 5.7.6 и новее, а также для MariaDB 10.1.20 и новее используем:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-passwd';
В противном случае:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new-passwd');
Однако, если окажется так, что ALTER не сработает, то используем:
UPDATE mysql.user SET authentication_string = PASSWORD('new-passwd') WHERE User = 'root' AND Host = 'localhost';
Если и это не сработает, то пробуем:
ALTER USER 'root'@'*' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORD';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORD';
Обратите вниманиее, после этих манипуляций необходимо выполнить:
FLUSH PRIVILEGES;
-
Найти все процессы mysql и отправить им SIGTERM для сообщения процессу мягко выйти после завершения операций очистки
sudo kill `sudo cat /var/run/mysqld/mysqld.pid`
- Затем запустить mysql как обычно и попытаться в него зайти с новым паролем.
И ещё на всякий случай две mysql-команды на привилегии:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;
|