root  / my Debian tips&tricks  / recover mysql root password 

Official Debian logo

Собствено не раз забывал пароль рута на mysql, да и поленившись поставить нормальный пароль, потом хочется его сменить. В общем у меня смена его не проходит гладко, поэтому здесь расскажу про восстановление:
  1. /etc/init.d/mysql stop
  2. /usr/bin/mysqld_safe --user=root --skip-grant-tables
    Если необходимо использовать эту же консоль далее, то в конце команды через пробел пишем амперсанд.
  3. Можно отредактировать файл:
    /etc/mysql/mysql.conf.d/mysqld.cnf
    написать в секцию [mysqld] строку skip-grant-tables и запустить mysql (НЕ забудьте закомментировать эту строку после смены пароля и перезапустить mysql)
  4. Если на предыдущем этапе Вы встретили что-то типа такого:
    mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
    Тогда делаем следующее:
    mkdir -p /var/run/mysqld
    chown mysql:mysql /var/run/mysqld
  5. Открываем ещё одну консоль (или Ctrl+Z в текущей):
    mysql -u root
  6. Для 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;
  7. Найти все процессы mysql и отправить им SIGTERM для сообщения процессу мягко выйти после завершения операций очистки
    sudo kill `sudo cat /var/run/mysqld/mysqld.pid`
  8. Затем запустить mysql как обычно и попытаться в него зайти с новым паролем.
И ещё на всякий случай две mysql-команды на привилегии:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;
LJ