mysql -- Как сбросить (изменить) пароль root -- забыл пароль

Forums:

В случае, если вы забыли пароль root для подключения к mysql, можно воспользоваться safe-режимом:

  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, чтобы избежать такой ошибки и сделать его владельцем пользователя mysql
  4. Запускаем 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
    2020-06-14T11:07:14.807620Z mysqld_safe Logging to syslog.
    2020-06-14T11:07:14.815041Z mysqld_safe Logging to '/var/log/mysql/error.log'.
    2020-06-14T11:07:14.856418Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

  5. Подключаемся из консоли к серверу mysqld и выбираем базу данных mysql:
    mysql -u root mysql
  6. Используем плагин 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

  7. Перезагружаем привилегии:
    flush privileges;
  8. Меняем пароль для нужного пользователя, в нашем случае это root:
    • Для MySQL версий 5.7.6 и новее:
      ALTER USER 'root'@'localhost' IDENTIFIED BY 'MY_PASSWORD';
    • Для MySQL версий 5.7.5 и старее:
      SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MY_PASSWORD');

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

    Query OK, 0 rows affected (0.01 sec)

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

    UPDATE mysql.user SET authentication_string=PASSWORD('MY_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

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

    2020-06-14T11: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`

    Если и это вызвало ошибку:

    cat: /var/run/mysqld/mysqld.pid: Отказано в доступе

    Добавляем права:

    sudo chmod 755 /var/run/mysqld/mysqld.pid

  11. Проверяем, что нет запущенных процессов mysqld:
    ps -eaf|grep mysqld
  12. Запускаем Mysql-server в нормальном режиме:
    sudo service mysql start
  13. И пытаемся подключиться к нашему серверу с новым паролем, который мы установили.

Источник